ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

第 06 篇:调度与收敛:kube-scheduler 两阶段调度与 controller-manager 的 Reconcile 循环(底座认知 06)

第 06 篇:调度与收敛:kube-scheduler 两阶段调度与 controller-manager 的 Reconcile 循环(底座认知 06)

scheduler 与 controller-manager

控制面的「决策者」与「执行者」

底座认知 · 第 06 篇

调度流程与控制器模式:状态如何被持续拉回期望

目 录

一、两个组件的分工

二、kube-scheduler:为新 Pod 选节点

2.1 调度流程

2.2 调度约束

三、kube-controller-manager:状态收敛的引擎

3.1 控制器模式

3.2 常见内置控制器

四、leader 选举与高可用

五、排障要点

一、两个组件的分工

scheduler(调度器)与 controller-manager(控制器管理器)同属控制面,但分工明确:调度器决定「新 Pod 放到哪个节点」,控制器管理器负责「持续把集群状态拉回期望状态」。

二、kube-scheduler:为新 Pod 选节点

2.1 调度流程

调度器监听 apiserver 中新创建的、尚未调度的 Pod,通过两阶段为其选定节点:

  1. Filter 预选:过滤掉不满足条件的节点(资源不足、taint 不匹配、不满足亲和性等)
  2. Score 优选:在候选节点上打分(资源均衡、亲和性、负载等),选最高分
  3. Bind 绑定:将 Pod 绑定到选定节点,写入 etcd

2.2 调度约束

  1. nodeSelector / nodeAffinity:按节点标签选择
  2. podAffinity / podAntiAffinity:按与其他 Pod 的关系选择
  3. Taint 与 Toleration:节点打污点,只有容忍的 Pod 才能调度上去

排障常看:Pod 长时间 Pending,多半是 Filter 阶段没有可用节点,可用 kubectl describe pod 查看调度事件。

三、kube-controller-manager:状态收敛的引擎

3.1 控制器模式

K8s 的核心哲学是「声明式 + 控制器循环」:用户声明期望状态,控制器持续对比「期望」与「当前」,并采取行动使二者收敛。

控制器模式(Reconcile 循环):读取期望状态 → 读取当前状态 → 对比差异 → 执行操作使其收敛 → 循环往复。

3.2 常见内置控制器

控制器

职责

ReplicaSet / Deployment

维持副本数,滚动更新与回滚

StatefulSet

有状态应用的有序部署与稳定标识

DaemonSet

确保每个(部分)节点运行一个 Pod

Node

监控节点健康,标记 NotReady

Endpoint / EndpointSlice

维护 Service 背后的 Pod 端点

Namespace / GarbageCollector

资源清理与级联删除

四、leader 选举与高可用

生产环境 scheduler 与 controller-manager 都会多副本部署,但同一时刻只允许一个实例真正工作,通过 leader 选举(基于 etcd lease)保证。

  1. leader 负责实际执行,备用实例处于待命
  2. leader 故障时自动切换到备用实例,实现高可用
  3. 可在日志中看到 elected as leader 字样

五、排障要点

  1. Pod Pending:查看调度事件,定位是资源不足还是调度约束
  2. 副本数不对:检查对应控制器的 Reconcile 是否正常,controller-manager 是否健康
  3. 新增节点不参与调度:检查节点状态与 taint

下一篇进入数据面,看 kubelet 与 kube-proxy 如何在节点上真正「跑起来」。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进