← 中文资源

简体中文版本

用反亲和性分散关键 Pod

通过 Pod 反亲和或拓扑分散,使关键服务的副本不会落在同一节点或同一可用区,从而经受单点故障。

阅读英文原文

概述

把副本全部调度到同一节点或可用区,会让一次节点或可用区故障直接拖垮整项服务。拓扑分散把副本按故障域摊开,但需在分散度与可调度性之间取得平衡,避免小集群中 Pod 长期 Pending。

关键步骤

  1. 为节点标注区域或故障域。
  2. 为 Deployment 添加拓扑分散约束或软反亲和。
  3. 用 whenUnsatisfiable 权衡分散与可调度性。
  4. 在发布后与节点排空后核验落点。

验证

  • 副本分布在不同节点或区域。
  • 单节点故障不影响整体可用。
  • 分散不会导致不必要的 Pending。
  • 节点变动后分散仍然成立。

注意事项

  • 严格反亲和在小集群或缩容期间可能使 Pod 无法调度。
  • 它分散副本,但不保证每个域都有足够容量。

适用范围

本条目围绕「用反亲和性分散关键 Pod」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: topology.kubernetes.io/zone
    whenUnsatisfiable: DoNotSchedule
    labelSelector: { matchLabels: { app: web } }