Administrator
发布于 2026-08-17 / 3 阅读
0
0

第八章.k8s调度器-亲和性-2

来源链接:https://www.bilibili.com/video/BV1PbeueyE8V?spm_id_from=333.788.videopod.episodes&vd_source=d8c71ff24a3359a807967fc4b5daa0e4&p=59

【k8s教程】Kubernetes v1.29 第八章.k8s调度器-亲和性2 学习笔记

亲和性核心逻辑与拓扑域

亲和性/反亲和性的核心判断依赖拓扑域(topologyKey),拓扑域本质是节点/Pod的标签键值对,相同拓扑域key-value即视为归属同一拓扑范围(可对应同一主机、机架、机房、数据中心、地区等)。
通用调度逻辑如下:

  1. 第一步:查找是否存在匹配指定标签选择器的Pod
  2. 第二步:获取匹配Pod所在节点的拓扑域key-value
  3. 第三步:亲和场景下筛选所有具备该拓扑域key-value的节点,反亲和场景下筛选所有不具备该拓扑域key-value的节点
  4. 第四步:通过预选+优选算法,选择得分最高的节点运行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状态。
  • 实验验证:
    1. 初始无匹配app=pod-1标签的Pod时,创建软策略亲和Pod,无匹配结果,Pod随机调度到node02。
    2. 修改Pod标签为app=pod-1(使用kubectl label --overwrite覆盖已有标签)后,再创建软策略亲和Pod,成功调度到node02(与目标Pod同拓扑域)。

1.2 硬策略(requiredDuringSchedulingIgnoredDuringExecution)

  • 特性:为强制约束,必须满足亲和条件,不满足时直接跳过优选阶段,Pod长期处于Pending状态,无法调度。
  • 实验验证:
    1. 初始无匹配app=pod-1标签的Pod时,创建硬策略亲和Pod,无匹配结果,Pod处于Pending状态。
    2. 修改Pod标签为app=pod-1后,再创建硬策略亲和Pod,成功调度到node02(与目标Pod同拓扑域)。

2. Pod反亲和性

Pod反亲和性用于将Pod调度到与指定Pod不同拓扑域的节点上,同样分为软策略、硬策略两类,逻辑与Pod亲和性相反。

2.1 软策略(preferredDuringSchedulingIgnoredDuringExecution)

  • 特性:满足反亲和条件优先级更高,会通过权重计算优选得分,得分最高的节点获得调度资格;不满足条件时仍可正常调度,不会出现Pending状态。
  • 实验验证:
    1. 创建标签为app=pod-2的Pod运行在node01,创建软策略反亲和Pod,成功调度到node02(与目标Pod不同拓扑域)。
    2. 额外创建标签为app=pod-2的Pod并固定调度到node01,此时两个节点均存在反亲和目标Pod,软策略失效,Pod随机调度到node01或node02。

2.2 硬策略(requiredDuringSchedulingIgnoredDuringExecution)

  • 特性:为强制约束,必须满足反亲和条件,不满足时直接跳过优选阶段,Pod长期处于Pending状态,无法调度。
  • 实验验证:
    1. 无匹配app=pod-1标签的Pod时,创建硬策略反亲和Pod,无匹配结果,Pod可随机调度到任意节点(如node02)。
    2. 创建标签为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调度场景的核心实用技能。


评论