Aslında Olmayan Yüksek Erişilebilirlik
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.
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.