节点亲和与 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 节点规则中 weight 与 preference 未正确对齐;required 节点规则误用 labelSelector,应按节点选择条件的 nodeSelectorTerms.matchExpressions 结构重新编写。修改后仍须由目标集群校验,不能把此页当作部署清单。
关联:调度与自动扩缩模块给出资源和调度全貌;Pod Pending可用于验证硬约束是否使副本无法调度。