八、调度
调度决定了每个 Pod 的命运——跑在哪个节点、何时跑、能不能跑。理解调度不是会写 YAML 就够了,要能回答"为什么 Pod 卡在 Pending"和"怎么让它按计划分布"。
1、阅读地图
| 专题 | 图号 | 核心问题 |
|---|---|---|
| 调度队列与框架 | K8-1、K8-2 | 调度器的架构和扩展点在哪 |
| 过滤、评分与绑定 | K8-3、K8-4 | 节点如何筛选和比较 |
| 资源请求、限制与节点容量 | K8-5 | 四层预算如何影响调度和驱逐 |
| 亲和性、污点与拓扑 | K8-6 | 精准控制 Pod 的分布规则 |
| 优先级与抢占 | K8-7 | 高优先级 Pod 如何腾出空间 |
| 卷、设备与 RuntimeClass | K8-8a | 卷拓扑和设备如何影响放置 |
| 扩展调度:Profile、插件与 Gang | K8-8b | 多 Profile 和 Gang 的版本边界 |
2、版本关键差异
| 特性 | v1.36 (实验环境) | v1.37 (正文基准) |
|---|---|---|
| GenericWorkload (Gang) | Alpha 关闭 | Beta 关闭 |
| DRADeviceTaints | Beta 开启 | GA 锁定开启 |
| DRAExtendedResource | Beta 开启 | GA 锁定开启 |
| InPlacePodVerticalScaling | GA | GA |
| PodLevelResources | Beta 开启 | Beta 开启 |
3、调度路径总览
从 Pod 创建到绑定完成,经历以下决策序列:
- 队列:Pod 进入 activeQ(或 Waiting 队列,如果有 PodGroup)
- Sort:按 PriorityClass 排序
- Filter:逐节点检查硬性约束(资源、节点选择器、污点容忍、卷拓扑)
- Score:对可行节点打分(资源均衡、亲和性偏好)
- Reserve:暂定资源
- Permit:最终确认(Gang 在此做整体决策)
- Bind:写入 nodeName
如果任何阶段失败,Pod 回到退避队列或不可调度集合,等待集群状态变化后重试。
4、实验约定
调度实验不需要额外部署组件。本章全部命令在当前 kind 集群执行,除 Gang Scheduling 因特性门控不可用外,其余功能均可验证。
本章完成后,读者应能从 kubectl describe pod 的输出中快速定位调度失败的根因,并为不同场景选择合适的分布策略。
下一章为 kubelet 与容器运行时(后续建设)。
