标准答案
- taint 是节点侧的排斥条件,toleration 只表示允许,不保证 Pod 一定调度到该节点。
- nodeSelector 是简单硬匹配,nodeAffinity 可以表达更丰富的硬约束和软偏好。
- podAffinity/anti-affinity 根据其他 Pod 的标签和拓扑放置,适合共置、分散和故障域策略。
- 约束越多越可能导致 Pending;应明确哪些是安全硬要求,哪些只是性能偏好。
题目解析
taint 是节点侧的排斥条件,toleration 只表示 Pod 可以忍受某个 taint,并不保证它会被放到该节点。nodeSelector 和 required nodeAffinity 才是硬匹配,preferred affinity 是软偏好;pod affinity/anti-affinity 则根据其他 Pod 和拓扑表达共置或分散。
设计时先区分安全、合规和数据局部性等硬约束,再把性能偏好设为软约束,并确认标签、拓扑键和节点容量稳定。约束叠加过多会让 Pod Pending,放宽时也要评估是否把关键副本集中到同一故障域。
常见误区
- 误区:只加 toleration 就期待 Pod 去专用节点。改正:同时配置匹配的 nodeSelector 或 nodeAffinity。
- 误区:所有亲和性都设为 required。改正:只有必须满足的边界用硬约束,其余用 preferred 并保留调度弹性。