Kubernetes 架构:控制面与工作节点¶
Kubernetes 集群由一个控制平面和一组用于运行容器化应用的工作机器组成,这些工作机器称作节点(Node)。每个集群至少需要一个工作节点来运行 Pod。
工作节点托管着组成应用负载的 Pod。控制平面管理集群中的工作节点和 Pod。在生产环境中,控制平面通常跨多台计算机运行,而一个集群通常运行多个节点,以提供容错和高可用。
图:Kubernetes 集群组件。来源:Kubernetes 官方架构文档。
Control Plane 组件¶
API Server¶
API Server 对外提供 Kubernetes API。kubectl、Controller、Scheduler、Kubelet 和 Operator 通过它读写对象。API Server 处理认证、授权、准入、版本转换和校验,并通过存储层将对象持久化到 etcd。请求处理链见 API Server:集群的统一入口。
etcd¶
etcd 保存 Kubernetes 的持久状态。API Server 将资源对象转换为存储版本,再写入 etcd。etcd 使用 revision 标识修改,并提供一致性读写和 Watch;API Server 通过这些能力读取对象并发送变更事件。存储与 Watch 机制见 etcd:Kubernetes 的状态存储。
Controller Manager¶
kube-controller-manager 运行多种 Controller。每个 Controller 关注一类对象,比较期望状态与当前状态,再通过 API Server 创建、更新或删除相关对象。
常见的 Controller 包括:
- Deployment Controller:根据 Deployment 创建和更新 ReplicaSet,推进应用发布。
- ReplicaSet Controller:创建或删除 Pod,使实际副本数符合 ReplicaSet 的要求。
- StatefulSet Controller:维护 Pod 的固定身份、启动顺序和存储声明。
- DaemonSet Controller:确保符合条件的 Node 各自运行一个 Pod。
- Job Controller:创建并管理执行一次性任务的 Pod,直到达到完成条件。
- Node Controller:监控 Node 状态,并处理节点失联等情况。
- EndpointSlice Controller:根据 Service 和 Pod 更新 EndpointSlice。
- PersistentVolume Controller:处理 PV 与 PVC 的绑定和回收流程。
Deployment Controller 和 ReplicaSet Controller 的协作过程见 Controller:从 Deployment 到 Pod。
Scheduler¶
Scheduler 处理尚未绑定节点的 Pod。它根据资源请求、节点亲和性、污点和卷拓扑等约束选择 Node,再通过 Binding 子资源将 Node 名称写入 Pod 的 spec.nodeName。过滤、打分和绑定过程见 Scheduler:Pod 的节点选择。
Worker 组件¶
Kubelet¶
Kubelet 通过 API Server 监视已经分配到本节点的 Pod。它协调 Volume Manager、Device Manager 和 CRI 准备存储、设备、Pod Sandbox 与容器,再将 Pod Conditions、容器状态和 Node Status 写回 API Server。Pod 同步过程见 Kubelet:节点上的 Pod 管理。
Container Runtime¶
Kubelet 通过 CRI 调用 containerd。containerd 拉取镜像并管理 Pod Sandbox 与容器的生命周期,containerd-shim 调用 runc 创建容器进程、Linux namespace 和 cgroup。从 Pod Sandbox 到容器进程的调用路径见 容器运行时:从 CRI 到容器进程。
CNI¶
CNI 规范定义容器运行时调用网络插件的接口。Flannel、Calico 和 Cilium 等插件为 Pod 分配 IP、创建网络设备并配置路由,其中 Calico 与 Cilium 还能执行 NetworkPolicy。网络路径见 网络:通信与流量转发。
CSI¶
CSI 规范定义 Kubernetes 调用存储插件的接口。动态制备时,external-provisioner 调用 CSI Controller Plugin 创建存储卷,PersistentVolume Controller 将 PV 与 PVC 绑定。Scheduler 为 Pod 选定节点后,Kubelet 调用 CSI Node Plugin 在目标节点挂载存储卷。卷制备、绑定与挂载过程见 存储:PersistentVolume、CSI 与数据路径。
Device Plugin¶
Device Plugin 用来把 GPU 等节点设备注册为 Kubernetes 可调度资源。NVIDIA Device Plugin 向 Kubelet 发布 nvidia.com/gpu。Scheduler 为 Pod 选定节点后,Kubelet Device Manager 调用 Allocate 获取设备分配结果。GPU 资源注册、分配与注入过程见 GPU 设备:Device Plugin 与设备注入。
Service 数据面¶
Service ClusterIP 的流量由节点上的数据面组件转发。kube-proxy 读取 Service 与 EndpointSlice,并根据代理模式配置 iptables、IPVS 或 nftables 规则。Calico 或 Cilium 的 eBPF 数据面也可以接管 Service 转发。各类数据面的实现见 网络:通信与流量转发。