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.


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