@shinyaz

topologySpreadConstraints は hostname だけでなく zone も設定すべき

約1分

EKS アップグレードの検証中、AWS のベストプラクティスを読んでいて気づいた。topologySpreadConstraintskubernetes.io/hostname だけ設定して満足していたが、topology.kubernetes.io/zone も併用しないと AZ 障害時に全 Pod が落ちるリスクがある。

hostname だけの場合、3 Pod が別ノードに分散していても、全ノードが同じ AZ に集中する可能性がある。zone も追加すると AZ 間にも分散される。

topologySpreadConstraints:
- maxSkew: 1
  topologyKey: kubernetes.io/hostname
  whenUnsatisfiable: DoNotSchedule
  labelSelector:
    matchLabels:
      app: myapp
- maxSkew: 1
  topologyKey: topology.kubernetes.io/zone
  whenUnsatisfiable: DoNotSchedule
  labelSelector:
    matchLabels:
      app: myapp

実際に EKS Auto Mode クラスターで試したところ、3 Pod が ap-northeast-1a, 1c, 1d の3つの AZ に1つずつ配置された。hostname 単体だと同一 AZ 内の別ノードに散らばるだけで終わることがあるので、本番ワークロードでは両方設定しておくのが安全だ。

共有する

田原 慎也

田原 慎也

ソリューションアーキテクト @ AWS

AWS ソリューションアーキテクトとして金融業界のお客様を中心に技術支援を行っています。クラウドアーキテクチャや AI/ML に関する学びをこのブログで発信しています。