Pod Eviction Kaskadı
Node'un diski doldu. Tüm pod'lar tahliye edildi. Yeni pod'lar aynı node'a zamanlandı. Yine tahliye edildi. Biri uyanana kadar tekrar.
Zaman çizelgesi:
- Saat 02:00: Node, kubelet'in varsayılan eviction eşiğini aşıyor (nodefs.available < 10%)
- Saat 02:05: Kubelet pod'ları tahliye ediyor; node, node.kubernetes.io/disk-pressure taint'ini alıyor
- Saat 02:10: Pod'lar (ve logları) gidince disk kullanımı eşiğin altına geri düşüyor
- Saat 02:15: eviction-pressure-transition-period (varsayılan 5 dakika) dolunca taint kalkıyor — ve scheduler pod'ları, artık en fazla boş kaynağı ilan eden aynı node'a geri koyuyor
- Saat 02:25: Loglar yeniden büyüyor, eşik yine aşılıyor, tahliyeler tekrarlanıyor
- Saat 02:50: Alarm (nihayet) çalıyor, iki tam döngü sonra
Kök neden:
- Uygulama container dosya sistemine log yazıyordu
- Log rotasyonu yapılandırılmamıştı
- ephemeral-storage limitleri ayarlanmamıştı
- DiskPressure taint'i, kullanım eşiğin altına düştüğünde kalkar — altta yatan log sorunu çözüldüğünde değil — bu yüzden aynı node aynı pod'ları kabul etmeye devam etti
Çözüm:
resources:
requests:
ephemeral-storage: "1Gi"
limits:
ephemeral-storage: "2Gi"
Ayrıca:
- stdout'a log yazın (Fluentd toplar)
- Container log rotasyonunu yapılandırın
- Node disk kullanımını %70'te alarm verecek şekilde izleyin — kubelet harekete geçmeden çok önce
ephemeral-storage limitleri yerindeyken kontrolden çıkan bir logger node'u düşürmek yerine yalnızca kendi pod'unun tahliye edilmesine yol açar. Node düzeyinde disk alarmları, her DevOps projesinde kurduğumuz temel izlemenin parçasıdır.
Ders: ephemeral-storage limitlerini ayarlayın. Her zaman.
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.