2. K8s集群架构基础:Master节点组件、Worker节点组件、控制平面与数据平面分离原理

Kubernetes集群采用主从架构(Master-Worker),所有组件按职责划分为控制平面(Control Plane)与数据平面(Data Plane)。理解这两层的组件构成与交互原理,是规划升级窗口、预留资源、保障Pod调度稳定性的前提。

2.1 控制平面(Master节点)核心组件

控制平面负责集群的全局决策、状态管理与事件响应。通常由3或5个Master节点组成高可用(HA)集群,每个Master运行以下组件:

组件 进程名称 核心职责 关键端口
kube-apiserver kube-apiserver 所有组件与CLI的唯一入口,提供RESTful API,执行认证、授权、准入控制(Admission Control) 6443(HTTPS)
kube-controller-manager kube-controller-manager 运行控制器循环(Node Controller、Deployment Controller、Endpoint Controller等),确保集群实际状态与期望状态一致 10257(HTTPS)
kube-scheduler kube-scheduler 为新创建的Pod选择最合适的Worker节点,基于资源请求、亲和性、污点/容忍度等策略打分 10259(HTTPS)
etcd etcd 分布式键值存储,保存集群所有资源对象(Pod、Service、ConfigMap等)的最终状态,是集群的“唯一真相源” 2379(客户端)、2380(集群通信)
升级窗口影响: 控制平面组件升级时,kube-apiserver 和 etcd 的短暂不可用将导致整个集群的读写操作阻塞。kube-scheduler 和 kube-controller-manager 的 Leader 选举机制(默认 lease 时长 15s)会在升级期间触发重新选举,造成调度与控制器操作的短暂停顿。

2.2 数据平面(Worker节点)核心组件

数据平面负责运行用户容器,并维护网络与存储规则。每个Worker节点运行以下组件:

组件 进程名称 核心职责 关键端口
kubelet kubelet 节点代理,负责管理Pod生命周期(创建、监控、重启),定期向apiserver上报节点状态(Node Status) 10250(HTTPS)、10255(只读)
kube-proxy kube-proxy 维护节点上的网络规则(iptables/IPVS),实现Service的负载均衡与集群内通信 10256(健康检查)
容器运行时 containerd / CRI-O / Docker 拉取镜像、创建/停止容器、管理容器文件系统与资源隔离 Unix Socket(/var/run/containerd.sock)
资源预留关键点: kubelet 支持通过 --system-reserved 和 --kube-reserved 参数为系统守护进程(sshd、systemd)与K8s组件预留CPU/内存资源。升级窗口期间,kubelet 重启会导致节点上所有Pod被重新注册,若未预留足够资源,可能触发节点压力驱逐(Node Pressure Eviction)。

2.3 控制平面与数据平面分离原理

Kubernetes 通过控制平面与数据平面严格分离的架构设计,实现集群的弹性伸缩与故障隔离。其核心原则如下:

  • 职责分离: 控制平面只做决策(调度、状态协调、API响应),不运行用户容器;数据平面只执行容器生命周期与网络转发,不参与集群全局决策。
  • 通信单向依赖: Worker节点上的kubelet主动向apiserver发起心跳与状态上报(Pull模式),控制平面从不主动连接Worker节点。这种设计使得Worker节点故障不会直接影响控制平面稳定性。
  • 状态持久化隔离: 所有集群状态仅存储在控制平面的etcd中,数据平面节点无状态。Worker节点重启后,kubelet会重新从apiserver拉取分配给本节点的Pod清单,实现“无状态恢复”。
  • 升级影响范围: 控制平面升级影响全局调度与API可用性;数据平面升级仅影响该节点上的Pod,其他节点不受影响。升级窗口策略正是利用这一隔离特性,通过逐节点滚动升级降低业务中断风险。
常见误区: 控制平面与数据平面分离并不意味着网络完全隔离。kubelet 需要访问 apiserver(6443端口),kube-proxy 需要访问 apiserver 获取Service与Endpoint信息。升级前务必检查网络策略与防火墙规则,避免升级期间节点失联。

2.4 组件交互流程与升级影响

下图展示了控制平面与数据平面之间的核心交互路径,以及升级窗口期间可能中断的关键链路:

K8s控制平面与数据平面交互及升级影响 控制平面与数据平面交互及升级影响 控制平面(Master节点) etcd kube-apiserver kube-scheduler kube-controller-manager 数据平面(Worker节点) kubelet kube-proxy 容器运行时 Pod(用户容器) 升级窗口影响标注 ① 控制平面升级:kube-apiserver 重启 → 所有组件与CLI无法读写;etcd 升级 → 集群状态短暂不可用 ② 数据平面升级:kubelet 重启 → 节点上Pod被重新注册,可能触发Pod迁移;kube-proxy 重启 → Service规则短暂丢失 ③ 分离优势:控制平面升级不影响运行中的Pod;数据平面逐节点升级不影响其他节点业务

2.5 升级窗口中的组件依赖关系

在规划升级窗口时,必须遵循以下组件依赖顺序,否则可能导致集群功能异常:

  1. etcd → kube-apiserver: apiserver 依赖 etcd 存储与读取集群状态,etcd 必须先升级。
  2. kube-apiserver → kube-controller-manager / kube-scheduler: 控制器与调度器通过 apiserver 监听资源变化,apiserver 升级后它们才能正常工作。
  3. kube-apiserver → kubelet / kube-proxy: Worker节点组件通过 apiserver 获取Pod清单与Service配置,apiserver 恢复后节点才能重新注册。
  4. 容器运行时 → kubelet: kubelet 依赖容器运行时创建Pod,运行时升级应在 kubelet 升级之前完成。
升级窗口资源预留建议: 控制平面节点应预留至少 1 个 CPU 核心和 2 GB 内存用于 etcd 与 apiserver 的升级操作;Worker节点应通过 kubelet 的 --system-reserved 参数预留 0.5 核 CPU 和 1 GB 内存,防止升级期间系统守护进程资源不足导致节点失联。