- 基本概念
- 控制平面组件(Control Plane Components)
- kube-apiserver
- etcd
- kube-scheduler
- kube-controller-manager
- cloud-controller-manager(可选)
- kube-apiserver的重要性 ❗
- Node 组件
- kubelet
- kube-proxy
- 容器运行时(Container Runtime)
- 感谢 💖
- 参考🔎
基本概念
当你部署完 Kubernetes,便拥有了一个完整的集群。
下面先介绍一些基本概念:
节点(Node):即一组工作机器, 会运行容器化应用程序。每个集群至少有一个工作节点。
Pod:工作节点会托管 Pod,而 Pod 就是作为应用负载的组件。Pod里面至少会运行一个容器。
控制平面(Control Plane) :管理集群中的工作节点和 Pod。 在生产环境中,控制平面通常跨多台计算机运行, 一个集群通常运行多个节点,提供容错性和高可用性。
在K8s集群中,我们通常会有一个master节点和多个worker节点。master节点上起的启动所有控制平面组件。而worker节点会运行容器化应用程序。
下面这张图展现了一个正常运行的 Kubernetes 集群所需的各种组件。
控制平面组件(Control Plane Components)
控制平面组件会为集群做出全局决策,比如资源的调度。
控制平面组件可以在集群中的任何节点上运行。 然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有控制平面组件, 并且不会在此计算机上运行用户容器。这个机器通常叫做master机器。
kube-apiserver
kube-apiserver是 Kubernetes 控制平面中的一个核心组件,它是整个集群的 API 入口点,被认为是控制平面的"前端"。它提供了与集群交互的方式,让用户、开发人员和其他组件可以通过 API 请求来管理和操作集群中的资源。
Kube-apiserver 的关键特性包括:
- API 暴露: Kube-apiserver 暴露了 Kubernetes API,允许用户和外部组件通过 HTTP请求进行交互。这些请求可以用于创建、更新、删除和查询各Kubernetes 资源,如 Pod、Service、Deployment等。
- 授权和认证: Kube-apiserver 管理集群中的用户和身份验证,确保只有经过授权的用户能够访问API。它支持多种认证方式,如基本身份验证、令牌、客户端证书等。
- 资源管理: Kube-apiserver 处理对集群资源的请求,通过 API 请求来创建和管理资源,如Pod、ReplicaSet、Namespace 等。它确保资源的合理分配和正确状态。
- 扩展性: Kube-apiserver 支持水平扩展,可以通过部署多个实例来平衡流量和提高可用性。多个 kube-apiserver实例可以通过负载均衡器来分担请求。
- 版本控制: Kubernetes API 支持多个版本,允许不同版本的客户端与不同版本的服务器进行交互。Kube-apiserver管理这些不同的 API 版本,并确保向后兼容性。
etcd
etcd是一个一致性且高可用的键值存储数据库。
etcd 的关键特性包括:
- 数据存储: Kubernetes 集群中的所有数据,包括集群状态、配置信息、资源定义等,都存储在 etcd 中。这使得集群的状态和配置可以在整个集群中保持一致。
- 一致性: etcd 使用 Raft 算法来确保数据的一致性和可用性。这意味着它可以在各个节点之间实现数据的同步和复制,从而避免数据丢失或不一致。
- 高可用性: etcd 支持多节点部署,可以配置为高可用集群。这确保了即使某个节点出现故障,集群仍然可以继续正常运行。
由于 etcd 承载了 Kubernetes 集群的关键数据,确保定期备份 etcd 数据非常重要。在数据损坏、故障或其他紧急情况下,备份可以帮助恢复集群状态。
kube-scheduler
kube-scheduler 负责监视新创建且未指定运行节点(node)的 Pods,并根据一系列规则和策略,选择合适的节点来让 Pod 在上面运行。kube-scheduler 的目标是在集群中实现高效的资源利用、负载均衡和高可用性。
kube-scheduler 的关键特性包括:
- 节点选择: 当用户创建一个新的 Pod 时,Pod 通常不会直接指定运行在哪个节点上。kube-scheduler 通过考虑各种因素,为每个 Pod 选择一个适合的节点。
- 负载均衡: kube-scheduler 的目标之一是实现负载均衡。它会考虑节点的当前负载情况,避免将过多的 Pod 放置在某个节点上。
kube-controller-manager
kube-controller-manager 是 Kubernetes 控制平面中的一个重要组件,它负责运行多个控制器进程,这些控制器进程用于监视和管理集群的状态。尽管从逻辑上看,每个控制器都是一个独立的进程,但出于简化和管理方便的考虑,它们被编译到同一个可执行文件中,并在同一个进程中运行。
控制器的作用是确保集群的期望状态与实际状态一致。它们监视集群资源和事件,然后采取相应的操作来维护资源的状态。无论是故障恢复、自动伸缩、任务管理还是网络配置,控制器在 Kubernetes 中起着关键作用,使集群能够自动适应变化和需求。
Kubernetes 中有许多不同类型的控制器,每个控制器负责特定类型的任务和功能。以下是一些示例:
- 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应
- 副本控制器(Replication Controller): 负责维护 Pod 副本数量的稳定性。如果副本数量不足或过多,副本控制器将自动进行扩容或缩减。
- 任务控制器(Job Controller): 监测代表一次性任务的 Job 对象。当任务需要运行时,Job 控制器创建 Pods 来运行任务,确保任务完成后进行清理。
- 端点分片控制器(EndpointSlice Controller): 填充 EndpointSlice 对象,以提供 Service 和 Pod 之间的连接。它与 Service 控制器一起确保网络流量正确路由到服务后端。
- 服务账号控制器(ServiceAccount Controller): 为新的命名空间创建默认的服务账号。这有助于确保新命名空间中的应用程序可以使用适当的服务账号。
cloud-controller-manager(可选)
cloud-controller-manager这个组件是可选的,云控制器管理器的主要目标是将与特定云平台的交互逻辑从核心 Kubernetes 控制器中分离出来,使集群可以更轻松地连接到云提供商的 API,并根据需要与云平台进行交互。
kube-apiserver的重要性 ❗
Kubernetes 控制平面中的 kube-apiserver 与其他组件之间的关系非常密切,它被认为是控制平面的"前端",负责公开 Kubernetes API 并处理来自用户、应用程序和其他组件的请求。
它为什么这么重要?因为它:
- 与用户和应用程序交互: kube-apiserver 是控制平面的入口点,允许用户和应用程序通过 API 请求与 Kubernetes 集群交互。它接收并处理创建、修改、删除资源(如 Pod、Service、Deployment 等)的请求。
- 与其他控制平面组件交互: 其他控制平面组件,如 kube-controller-manager、kube-scheduler 和 cloud-controller-manager,也通过 kube-apiserver 进行交互。它们通过 API 请求查询和修改集群状态、配置和资源。
- 与节点组件交互: 节点组件,如 Kubelet 和 Kube Proxy,也通过 kube-apiserver 与控制平面交互。例如,Kubelet 会定期向 kube-apiserver 报告节点状态和资源使用情况。
Node 组件
节点组件会在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行环境。
kubelet
kubelet 会在集群中每个节点(node)上运行。它会监控 Pod 中的容器状态。如果容器失败或停止,kubelet 会尝试重新启动容器,保持 Pod 中所有容器的健康状态。它还会提供健康检查、资源管理和网络设置等功能。
kube-proxy
kube-proxy 是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。
容器运行时(Container Runtime)
节点的底层由一个叫做容器运行时的软件进行支撑,它负责比如启停容器这样的事情。最广为人知的容器运行时当属Docker,但它不是唯一的。事实上,我们使用K8s插件API:容器运行时接口(Container Runtime Interface, CRI)。例如 containerd、CRI-O、cri-docker
感谢 💖
好啦,这次的分享就到这里,感谢大家看到这里🤞
参考🔎
Kubernetes官方文档