Her servis için HA'mız vardı. Trafiği hepsine yönlendiren tek şey hariç.

Kurulum:

  • Her biri 3+ replikalı 20 servis
  • Çoklu AZ dağıtımı
  • Pod disruption budget'lar
  • NGINX Ingress Controller: 1 replika

Olay:

  • Ingress controller pod'u OOMKilled oldu
  • Yeniden zamanlanması 30 saniye sürdü
  • Çalışan NGINX pod'u olmayınca bulut load balancer'ının sağlıklı hedefi kalmadı — istemciler LB'den bağlantı hataları ve 503 aldı, temiz bir 502 bile değil
  • Arkasındaki her servis aynı anda erişilemez oldu

Neden yalnızca 1 replika?

  • “Bu sadece altyapı, hiç çökmez”
  • Varsayılan Helm chart değeri: 1
  • Kimse değiştirmedi

Çözüm:

controller:
  replicaCount: 3
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchLabels:
              app.kubernetes.io/name: ingress-nginx
          topologyKey: kubernetes.io/hostname

Ayrıca:

  • minAvailable: 2 ile PodDisruptionBudget
  • Doğru dürüst resource request/limit'leri
  • Trafik sıçramaları için HPA

Bu, hepsi tek bir availability zone'a düşen replikalarla aynı kör nokta: doğrulamadığınız yedeklilik, yedeklilik değildir.

Ders: Ingress controller'ınız erişilebilirliğinizin TA KENDİSİDİR. Ona öyle davranın.


← Çı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.