3 node'a yayılmış 3 replica'mız vardı. Yüksek erişilebilir olduğumuzu sanıyorduk. Değildik.

Kurulum:

  • Her servisten 3 replica
  • 3 Kubernetes node'u
  • Pod anti-affinity: node'lara dağıt — yapıldı
  • Tüm node'lar: us-east-1a — kimsenin kontrol etmediği kısım

Olay:

  • AWS us-east-1a kısmi kesintisi
  • 3 node'un tamamı etkilendi
  • Tüm pod'lar evict edildi
  • Zone'da kapasite yok
  • Tam servis kesintisi

Neden oldu:

  • us-east-1a'da daha ucuz instance'lar
  • Auto-provisioner varsayılan olarak tek AZ'ye düştü
  • Kimse node dağılımını kontrol etmedi

Çözüm:

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

Pod düzeyindeki kısıtlar ancak node'lar gerçekten birden fazla zone'da varsa işe yarar: node group'larını ve cluster autoscaler'ı da üç AZ'ye yayılacak şekilde yeniden yapılandırdık; böylece scheduler'ın dağıtacak bir yeri oldu. Yedekliliğin her katmanda — pod, node, zone — tuttuğunu doğrulamak, bulut mimarisi incelemelerimizin standart bir kontrol noktasıdır.

Ders: Zone dağılımı olmayan replica'lar yüksek erişilebilirlik değildir.


← Çıkarılan Dersler'e dön

Bu tür olaylar önlenebilir. AWS Yönetilen Hizmetler ekibimiz müşteri ortamlarını yapay zekâ destekli izleme ve nöbetteki kıdemli mühendislerle 7/24 gözetir — böylece bu tür hikâyeler arşivde kalır.