概述
把副本全部调度到同一节点或可用区,会让一次节点或可用区故障直接拖垮整项服务。拓扑分散把副本按故障域摊开,但需在分散度与可调度性之间取得平衡,避免小集群中 Pod 长期 Pending。
关键步骤
- 为节点标注区域或故障域。
- 为 Deployment 添加拓扑分散约束或软反亲和。
- 用 whenUnsatisfiable 权衡分散与可调度性。
- 在发布后与节点排空后核验落点。
验证
- 副本分布在不同节点或区域。
- 单节点故障不影响整体可用。
- 分散不会导致不必要的 Pending。
- 节点变动后分散仍然成立。
注意事项
- 严格反亲和在小集群或缩容期间可能使 Pod 无法调度。
- 它分散副本,但不保证每个域都有足够容量。
适用范围
本条目围绕「用反亲和性分散关键 Pod」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector: { matchLabels: { app: web } }