有道-节点亲和与 Pod 反亲和组合

节点亲和与 Pod 反亲和组合

原笔记试图组合节点条件和 Pod 分散条件,但两段 YAML 均有字段或缩进错误。本页只解释调度意图,不提供可直接应用的清单。

原示例想把某组 Pod 按 kubernetes.io/hostname 分散,同时按 kubernetes.io/arch=amd64 选择节点。这是两种不同的匹配对象:nodeAffinity 匹配节点标签podAntiAffinity 匹配已有 Pod 标签及其所在拓扑域。源文称前者为“节点反亲和”,但示例使用 In amd64,实际表达正向节点亲和。

组合调度含义可能结果
两者都用 preferredDuringSchedulingIgnoredDuringExecution尽量选目标架构,尽量避开同主机的同组 Pod资源或其他评分因素可能使多个副本仍落到同一节点
两者都用 requiredDuringSchedulingIgnoredDuringExecution只选符合节点条件且没有冲突 Pod 的拓扑域可用节点不足时,副本保持 Pending

若确实需要硬性分散,应确认 Pod 标签选择器选中了预期副本、匹配的命名空间范围正确,且每个候选节点都具备所用的拓扑标签。节点约束还会与 taint、资源 requests、配额等共同决定能否调度。

原 YAML 的 preferred 节点规则中 weightpreference 未正确对齐;required 节点规则误用 labelSelector,应按节点选择条件的 nodeSelectorTerms.matchExpressions 结构重新编写。修改后仍须由目标集群校验,不能把此页当作部署清单。

关联:调度与自动扩缩模块给出资源和调度全貌;Pod Pending可用于验证硬约束是否使副本无法调度。