2. Kubernetes集群架构回顾:Master节点与Worker节点角色,核心组件在扩容中的职责

在深入节点扩容的资源调度与容量规划之前,必须清晰理解Kubernetes集群的两层架构——Master控制平面与Worker数据平面。节点扩容并非简单的“加机器”,而是控制平面组件与节点代理协同完成资源注册、调度决策与负载接入的完整链路。

2.1 Master节点与Worker节点核心角色对比

角色维度 Master节点(控制平面) Worker节点(数据平面)
核心职责 集群状态管理、调度决策、API请求处理 运行容器化工作负载、执行Pod生命周期
扩容中的行为 接收新节点注册、更新集群状态、触发调度 加入集群、上报资源、接收并运行Pod
状态持久化 依赖etcd存储集群元数据 无状态,节点信息由Master维护
故障影响范围 全局:API不可用、调度停止 局部:仅影响该节点上的Pod
扩容关键组件 kube-apiserver, kube-scheduler, controller-manager kubelet, kube-proxy, 容器运行时
关键认知: 节点扩容时,Master节点是“大脑”,负责决策与记录;Worker节点是“手脚”,负责执行与反馈。两者缺一不可,且扩容压力首先落在Master组件的API处理与调度计算上。

2.2 核心组件在扩容中的职责

节点扩容流程涉及三个核心组件的紧密协作:kube-apiserver 作为统一入口,kube-scheduler 作为调度引擎,kubelet 作为节点代理。下图展示了新Worker节点加入集群时,这三个组件之间的交互关系。

节点扩容核心组件交互图 节点扩容核心组件交互流程 Master 控制平面 Worker 数据平面 kube-apiserver API入口 · 认证授权 · 状态存储 kube-scheduler 调度决策 · 资源匹配 · 绑定Pod etcd 集群状态持久化 kubelet 节点代理 · Pod生命周期 容器运行时 ① 节点注册 / 心跳上报 ② 新节点就绪事件 ③ 写入Pod绑定关系 ④ 下发Pod调度结果 ⑤ 启动容器 读写集群状态

2.3 各组件在扩容中的详细职责

2.3.1 kube-apiserver:扩容的“总闸门”

  • 节点注册入口: 新Worker节点的kubelet通过TLS证书向apiserver发起注册请求,apiserver验证身份后创建Node对象。
  • 状态持久化: 将节点资源容量(CPU、内存、最大Pod数)写入etcd,供调度器查询。
  • 事件广播: 节点就绪后,向controller-manager和scheduler发送节点添加事件,触发后续调度流程。
  • 扩容瓶颈点: 大规模节点并发注册时,apiserver的API优先级与限流机制(APF)可能成为瓶颈,需提前规划QPS配额。

2.3.2 kube-scheduler:扩容的“调度大脑”

  • 节点资源感知: 通过apiserver监听Node对象更新,获取新节点的可分配资源(Allocatable)。
  • 调度决策: 将Pending状态的Pod绑定到新节点,执行预选(Predicates)与优选(Priorities)算法。
  • 负载均衡: 扩容后,调度器自动将新增Pod分散到新老节点,避免局部热点。
  • 调度策略扩展: 支持自定义调度器或扩展点(Scheduling Framework),实现容量感知的精细化调度。

2.3.3 kubelet:扩容的“节点执行器”

  • 节点自注册: 启动时向apiserver上报节点名称、IP、资源容量、操作系统信息。
  • 资源上报: 周期性发送心跳并更新节点状态(Ready/NotReady),同时上报已分配资源与剩余资源。
  • Pod执行: 接收apiserver下发的Pod绑定指令,调用容器运行时(Docker/containerd)启动容器。
  • 节点就绪检查: 执行节点条件检查(磁盘压力、内存压力、网络可用性),确保节点真正可用后再接受调度。
扩容最佳实践: 在集群规模较大(>500节点)时,建议为kube-apiserver配置--max-requests-inflight和--max-mutating-requests-inflight参数,并为kube-scheduler启用--kube-api-qps调优,防止节点批量加入时控制平面过载。

2.4 节点扩容状态机:从注册到就绪

新Worker节点从启动到完全接入集群,经历以下状态转换,每个状态都由对应组件驱动:

  1. Pending(待注册): kubelet启动,等待与apiserver建立连接。
  2. Registering(注册中): kubelet向apiserver发起CSR(证书签名请求),apiserver验证并创建Node对象。
  3. NotReady(未就绪): 节点已注册,但kubelet正在执行初始化检查(容器运行时启动、网络插件安装)。
  4. Ready(就绪): 所有节点条件通过,kubelet开始上报资源,调度器可将Pod调度至此节点。
  5. Active(活跃): 节点开始运行Pod,持续上报心跳与资源使用数据。
状态 主导组件 关键动作 扩容耗时参考
Pending kubelet 等待kubelet进程启动 1-3秒
Registering kube-apiserver CSR审批、Node对象创建 2-5秒
NotReady kubelet 容器运行时初始化、CNI插件部署 10-30秒
Ready kube-scheduler 节点加入调度候选队列 1-2秒
Active kubelet + 运行时 接收Pod、启动容器 持续
常见陷阱: 节点注册后长时间处于NotReady状态,通常由容器运行时版本不匹配、CNI网络插件未正确安装或kubelet证书过期导致。扩容前应使用节点预检脚本验证环境一致性。

2.5 扩容场景下的组件协同总结