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节点加入集群时,这三个组件之间的交互关系。
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节点从启动到完全接入集群,经历以下状态转换,每个状态都由对应组件驱动:
- Pending(待注册): kubelet启动,等待与apiserver建立连接。
- Registering(注册中): kubelet向apiserver发起CSR(证书签名请求),apiserver验证并创建Node对象。
- NotReady(未就绪): 节点已注册,但kubelet正在执行初始化检查(容器运行时启动、网络插件安装)。
- Ready(就绪): 所有节点条件通过,kubelet开始上报资源,调度器可将Pod调度至此节点。
- 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证书过期导致。扩容前应使用节点预检脚本验证环境一致性。