【k8s教程】Kubernetes v1.29 第八章.k8s调度器-亲和性2 学习笔记
亲和性核心逻辑与拓扑域
亲和性/反亲和性的核心判断依赖拓扑域(topologyKey),拓扑域本质是节点/Pod的标签键值对,相同拓扑域key-value即视为归属同一拓扑范围(可对应同一主机、机架、机房、数据中心、地区等)。
通用调度逻辑如下:
- 第一步:查找是否存在匹配指定标签选择器的Pod
- 第二步:获取匹配Pod所在节点的拓扑域key-value
- 第三步:亲和场景下筛选所有具备该拓扑域key-value的节点,反亲和场景下筛选所有不具备该拓扑域key-value的节点
- 第四步:通过预选+优选算法,选择得分最高的节点运行Pod
学习技巧:可将自身代入调度器视角,按步骤推导调度逻辑,降低理解难度。
举例如下:
- 若拓扑域为
kubernetes.io/hostname,存在标签为app=pod-1的Pod运行在node02,则亲和该Pod的Pod可调度到node02;若node01也带有该拓扑域标签,则也可调度到node01。 - 若拓扑域为
kubernetes.io/zone,值为薪享宏福,node01、node02均带有该拓扑域标签,则亲和Pod可调度到任意节点。
1. Pod亲和性
Pod亲和性用于将Pod调度到与指定Pod同拓扑域的节点上,分为软策略、硬策略两类,复杂度高于节点亲和性。
1.1 软策略(preferredDuringSchedulingIgnoredDuringExecution)
- 特性:满足亲和条件优先级更高,会通过权重计算优选得分,得分最高的节点获得调度资格;不满足条件时仍可正常调度,不会出现Pending状态。
- 实验验证:
- 初始无匹配
app=pod-1标签的Pod时,创建软策略亲和Pod,无匹配结果,Pod随机调度到node02。 - 修改Pod标签为
app=pod-1(使用kubectl label --overwrite覆盖已有标签)后,再创建软策略亲和Pod,成功调度到node02(与目标Pod同拓扑域)。
- 初始无匹配
1.2 硬策略(requiredDuringSchedulingIgnoredDuringExecution)
- 特性:为强制约束,必须满足亲和条件,不满足时直接跳过优选阶段,Pod长期处于Pending状态,无法调度。
- 实验验证:
- 初始无匹配
app=pod-1标签的Pod时,创建硬策略亲和Pod,无匹配结果,Pod处于Pending状态。 - 修改Pod标签为
app=pod-1后,再创建硬策略亲和Pod,成功调度到node02(与目标Pod同拓扑域)。
- 初始无匹配
2. Pod反亲和性
Pod反亲和性用于将Pod调度到与指定Pod不同拓扑域的节点上,同样分为软策略、硬策略两类,逻辑与Pod亲和性相反。
2.1 软策略(preferredDuringSchedulingIgnoredDuringExecution)
- 特性:满足反亲和条件优先级更高,会通过权重计算优选得分,得分最高的节点获得调度资格;不满足条件时仍可正常调度,不会出现Pending状态。
- 实验验证:
- 创建标签为
app=pod-2的Pod运行在node01,创建软策略反亲和Pod,成功调度到node02(与目标Pod不同拓扑域)。 - 额外创建标签为
app=pod-2的Pod并固定调度到node01,此时两个节点均存在反亲和目标Pod,软策略失效,Pod随机调度到node01或node02。
- 创建标签为
2.2 硬策略(requiredDuringSchedulingIgnoredDuringExecution)
- 特性:为强制约束,必须满足反亲和条件,不满足时直接跳过优选阶段,Pod长期处于Pending状态,无法调度。
- 实验验证:
- 无匹配
app=pod-1标签的Pod时,创建硬策略反亲和Pod,无匹配结果,Pod可随机调度到任意节点(如node02)。 - 创建标签为
app=pod-1的Pod后,两个节点均存在反亲和目标Pod,硬策略反亲和Pod处于Pending状态,无法调度。
- 无匹配
3. 亲和性分类总结
| 类型 | 匹配对象 | 支持运算符 | 是否支持拓扑域 | 调度目标 |
|---|---|---|---|---|
| 节点亲和性 | 节点标签 | In、NotIn、Exists、DoesNotExist、Gt(大于)、Lt(小于) | 不支持 | 主机 |
| Pod亲和性 | Pod标签 | In、NotIn、Exists、DoesNotExist | 支持 | 与指定Pod同拓扑域 |
| Pod反亲和性 | Pod标签 | In、NotIn、Exists、DoesNotExist | 支持 | 与指定Pod不同拓扑域 |
补充说明:
- 拓扑域key-value相同即视为同一拓扑范围,无需严格要求在同一主机,可扩展至机架、机房、数据中心、地区等维度。
- 软策略为「优先满足,不满足也可运行」,硬策略为「必须满足,不满足则不运行」。
- 亲和性/反亲和性仅影响待调度Pod的调度逻辑,已调度完成的Pod不受策略变更影响。
AI 总结
本小节系统讲解了Kubernetes调度器中Pod亲和性、Pod反亲和性的核心调度逻辑、软硬策略特性及实验验证方法,梳理了节点亲和性、Pod亲和性、Pod反亲和性的核心差异,帮助学习者理解如何通过亲和性实现Pod的精细化调度,保障Pod运行在合适的节点上,避免调度到不合适的节点,是Kubernetes调度场景的核心实用技能。