2. Kubernetes 集群架构基础:控制平面与数据平面、节点角色、核心组件交互

在深入节点池 Chart 版本兼容性验证与回滚策略之前,必须牢固掌握 Kubernetes 集群的底层架构。Kubernetes 集群由两大平面构成:控制平面(Control Plane)与数据平面(Data Plane)。理解这两者的职责划分、节点角色以及核心组件的交互方式,是评估升级风险、设计回滚方案的前提。

2.1 控制平面 vs 数据平面

控制平面是集群的“大脑”,负责全局决策与状态管理;数据平面是集群的“肌肉”,负责运行实际的工作负载。两者的职责对比如下:

维度 控制平面(Control Plane) 数据平面(Data Plane)
核心职责 调度、控制器循环、API 请求处理、集群状态存储 运行 Pod、处理容器网络流量、挂载存储卷
关键组件 kube-apiserver, kube-controller-manager, kube-scheduler, etcd kubelet, kube-proxy, 容器运行时(如 containerd)
节点类型 Master 节点(控制面节点) Worker 节点(工作节点)
升级影响范围 影响集群管理能力、API 可用性、调度决策 影响业务 Pod 的运行、网络连通性、存储挂载
回滚复杂度 高(涉及 etcd 数据兼容性、API 版本变更) 中(主要关注 kubelet 与 apiserver 的版本偏移)
关键原则:控制平面组件与数据平面组件之间存在严格的版本兼容性约束。升级节点池 Chart 时,必须确保新版本的 kubelet 与当前控制平面的 kube-apiserver 版本差不超过一个次要版本(n-1 策略)。

2.2 节点角色与核心组件

Kubernetes 集群中的每个节点都运行着一组特定的守护进程。根据节点角色不同,组件集合有所差异。

2.2.1 Master 节点(控制面节点)

  • kube-apiserver:所有组件交互的网关,提供 RESTful API,是集群的“前端”。
  • etcd:分布式键值存储,保存集群所有状态数据(Pod、Service、ConfigMap 等)。
  • kube-controller-manager:运行控制器进程(如 Node Controller、Deployment Controller)。
  • kube-scheduler:负责将新创建的 Pod 分配到合适的 Worker 节点。

2.2.2 Worker 节点(数据面节点)

  • kubelet:节点代理,负责管理 Pod 生命周期,与 apiserver 通信。
  • kube-proxy:维护节点上的网络规则,实现 Service 的负载均衡。
  • 容器运行时:如 containerd、CRI-O,负责拉取镜像并运行容器。
升级关注点:在节点池 Chart 升级场景中,kubelet 的版本变更直接影响节点与 apiserver 的通信协议。若 kubelet 版本高于 apiserver 版本,可能导致节点注册失败或 Pod 调度异常。

2.3 核心组件交互流程

下图展示了用户通过 kubectl 创建 Deployment 时,控制平面与数据平面各组件的完整交互链路:

Kubernetes 核心组件交互流程 Kubernetes 核心组件交互流程(创建 Deployment) kubectl / 用户 kube-apiserver etcd kube-controller-manager kube-scheduler Worker 节点(数据平面) kubelet kube-proxy Pod(容器) kubectl create 存储/读取 watch watch 绑定 Pod 调度结果 交互说明: 1. 用户提交 Deployment 清单 2. apiserver 写入 etcd 3. controller-manager 创建 ReplicaSet 4. scheduler 分配节点 5. kubelet 在节点上启动 Pod

2.4 组件版本兼容性矩阵

升级节点池 Chart 时,必须验证 kubelet 版本与集群其他组件的兼容性。以下为 Kubernetes 官方推荐的版本偏移规则:

组件 允许的版本偏移 说明
kubelet → kube-apiserver ≤ 1 个次要版本(n-1) kubelet 可以比 apiserver 低一个版本,但不能更高
kube-controller-manager → kube-apiserver ≤ 1 个次要版本 控制器管理器必须与 apiserver 同版本或低一个版本
kube-scheduler → kube-apiserver ≤ 1 个次要版本 调度器版本偏移规则同 controller-manager
kubectl → kube-apiserver ± 1 个次要版本 客户端可以比 apiserver 高或低一个版本
回滚陷阱:如果节点池从 v1.28 升级到 v1.29 后发现问题,需要回滚到 v1.28。此时必须确认控制平面仍然运行 v1.28 或 v1.29。若控制平面已升级到 v1.29,则回滚后的 v1.28 kubelet 仍然兼容(n-1);若控制平面已升级到 v1.30,则 v1.28 kubelet 将无法注册,回滚失败。

2.5 节点池升级中的组件交互变化

当对特定节点池执行 Chart 版本升级时,以下交互路径会发生变化:

  1. kubelet 启动参数变更:新 Chart 可能修改 kubelet 的 --node-ip、--max-pods 或 --kube-reserved 等参数。
  2. kubelet 与 apiserver 的 TLS 握手:证书轮换或加密套件变更可能导致握手失败。
  3. kube-proxy 模式切换:从 iptables 切换到 IPVS 时,需要验证网络规则是否平滑迁移。
  4. 容器运行时接口(CRI)版本:kubelet 与 containerd 之间的 gRPC 协议版本必须匹配。
验证策略:在升级节点池前,建议先在一个非生产节点上执行“预升级检查”,通过 kubectl get nodes 观察节点状态,通过 kubectl describe node 查看 kubelet 版本和条件,确保所有组件版本在兼容范围内。