第八章 Kubernetes 调度器 - 固定节点调度(Kubernetes v1.29)
前置关联背景
本章节承接上一小节的污点与容忍(Taint & Toleration)、再上一小节的亲和性(Affinity)相关功能,上述功能可解决部分复杂调度需求,但配置逻辑相对繁琐。若调度需求仅为将Pod运行到指定节点,可使用配置更简便的固定节点调度方案。
固定节点调度核心方案
固定节点调度共包含两种实现方式,分别对应不同的调度约束逻辑:
1. 通过 nodeName 指定节点调度
- 配置方式:在Pod的
spec字段下配置nodeName参数,直接填写目标节点的名称即可。 - 核心特性:
- 属于强制匹配规则,完全跳过Kubernetes默认调度器(Scheduler)的所有调度策略,包括污点容忍校验、预选/优选算法、亲和性规则等均不生效。
- 仅需满足两个基础条件即可完成调度:① 指定的节点名称在集群中真实存在;② 该节点满足Pod运行的最低资源要求。
- 即使目标节点配置了任意类型的污点(如
NoSchedule、NoExecute等),也不会影响调度结果。
- 实验验证:演示中将Deployment的Pod指定调度到
master01节点,该节点默认配置了NoSchedule污点,且未给Pod配置对应容忍,最终Pod仍正常调度到master01节点,验证了跳过默认调度策略的特性。
2. 通过 nodeSelector 节点标签选择器调度
- 配置方式:在Pod的
spec字段下配置nodeSelector参数,通过键值对匹配节点的标签,匹配逻辑为子集运算,只要节点包含所有指定的标签即可匹配成功。 - 核心特性:
- 属于强制约束规则,但不会跳过默认调度器的策略,仍需满足污点、资源等基础调度要求才能完成调度。
- 匹配逻辑为节点标签与配置的键值对完全一致即可。
- 实验验证:
- 首先配置
nodeSelector匹配指定标签,尝试调度到master01节点(该节点有对应标签但配置了NoSchedule污点),Pod持续处于Pending状态。 - 后续给
node01节点添加相同的标签,Pod正常调度到node01节点并进入Running状态,验证了nodeSelector不会跳过污点校验,且匹配到符合要求的节点后完成调度。
- 首先配置
两种固定节点调度方式对比
| 特性 | nodeName 指定节点调度 |
nodeSelector 标签选择器调度 |
|---|---|---|
| 匹配规则 | 强制匹配指定节点名称 | 强制匹配节点标签子集 |
| 是否跳过默认调度策略 | 是,完全跳过 | 否,仍需满足污点、资源等要求 |
| 适用场景 | 明确知道Pod要运行的特定节点 | 按节点标签批量选择目标节点 |
第八章 调度器章节内容总览
本章节从调度基础概念出发,完整覆盖Kubernetes调度相关核心内容:
1. 调度基础概念:介绍Kubernetes调度器的作用与核心调度流程
2. 自定义调度器演示:通过Shell编写简易调度器,验证调度逻辑的可扩展性
3. 调度核心算法:讲解预选(Predicates) 算法、优选(Priorities) 算法的定义与作用
4. 亲和性相关配置:涵盖节点亲和性(Node Affinity)、Pod亲和性(Pod Affinity)、Pod反亲和性(Pod Anti-Affinity) 的配置方法与适用场景
5. 污点与容忍:讲解污点的三种效果(NoSchedule、PreferNoSchedule、NoExecute)、容忍的配置方法,实现节点保护与Pod驱离
6. 固定节点调度:重点讲解nodeName、nodeSelector两种固定调度方式的配置、特性与实验验证
AI 总结
本章节系统讲解了Kubernetes调度器的核心机制与固定节点调度的两种实现方案,学完即可掌握按需指定Pod运行节点的能力:若需强制将Pod调度到特定节点、忽略其他调度规则,可使用nodeName配置;若需按节点标签批量选择目标节点、仍遵守默认调度规则,可使用nodeSelector配置。同时可清晰理解调度器预选、优选、亲和性、污点容忍等核心特性的适用边界,满足不同场景的调度需求。