Kubernetes Pod Yaşam Döngüsü ve Hata Ayıklama (Troubleshooting)

müfettiş

Moderatör
Katılım
20 Ocak 2024
Mesajlar
325
Tepkime puanı
1
Puanları
18

images (1).png

Kubernetes Pod Yaşam Döngüsü ve Hata Ayıklama (Troubleshooting)​


Giriş: "It Works on My Machine" Devrinin Sonu​

Kubernetes (K8s) harikadır, ta ki bir şeyler bozulana kadar. K8s'te bir şeyler bozulduğunda genellikle sessizce bozulur. Uygulamanız çalışmaz, sayfa açılmaz ve elinizde sadece "CrashLoopBackOff" yazan şifreli bir hata mesajı kalır.

Bu makale, K8s dünyasında kaybolanlar için bir pusuladır. Pod'ların doğumundan ölümüne kadar olan süreci ve en sık karşılaşılan hataları nasıl çözeceğinizi (Debug) anlatacağız.

Pod Yaşam Döngüsü (Lifecycle)​

Bir Pod oluşturulduğunda şu evrelerden geçer:
  1. Pending (Beklemede): Pod kabul edildi ama henüz bir Node'a atanmadı (Scheduler çalışıyor).
  2. ContainerCreating: Node bulundu, Docker imajı indiriliyor.
  3. Running: Konteyner çalışıyor. (Dikkat: Running olması, uygulamanın düzgün çalıştığı anlamına gelmez, sadece sürecin başladığını gösterir).
  4. Succeeded / Failed: İşini bitirdi ve kapandı veya hatayla kapandı.

Hata Ayıklama Araç Çantası: 4 Sihirli Komut​

K8s'te sorunu çözmek için tarayıcıya değil, terminale ihtiyacınız var.
  1. kubectl get pods: Genel duruma bakış. (Hangi Pod kırmızı?)
  2. kubectl describe pod <pod-adı>: EN ÖNEMLİ KOMUT. Hatanın detayını (Events) gösterir. Neden bekliyor? Neden çöktü?
  3. kubectl logs <pod-adı>: Uygulamanın kendi çıktısını (Stdout) gösterir. (Python hatası mı verdi? Veritabanına mı bağlanamadı?)
  4. kubectl get events --sort-by=.metadata.creationTimestamp: Kümedeki son olayları kronolojik listeler.

Sık Karşılaşılan Hatalar ve Çözümleri​

1. ImagePullBackOff / ErrImagePull​

Anlamı: K8s, yazdığınız Docker imajını indiremiyor.

Nedenleri:
  • İmaj adında yazım hatası (Typo).
  • İmaj etiketi (Tag) yok (v1.0 yerine v1.1 yazdınız).
  • İmaj özel (Private) bir depoda ve kimlik doğrulama (ImagePullSecret) eksik.Çözüm: describe komutuna bakın, "not found" veya "access denied" mesajını arayın.

2. CrashLoopBackOff​

Anlamı: Konteyner başlıyor, hemen çöküyor, K8s yeniden başlatıyor, yine çöküyor... Bu bir döngü.Nedenleri:
  • Uygulama kodu hatalı (Exception fırlatıyor).
  • Eksik konfigürasyon (Veritabanı şifresi yanlış, çevresel değişken eksik).
  • Konteynerin çalışacak bir işlemi yok (Örneğin, sadece echo hello yapıp kapanan bir script).Çözüm: kubectl logs <pod-adı> --previous komutuyla, çöken bir önceki konteynerin son sözlerine bakın.

3. Pending (Sürekli Beklemede)​

Anlamı: Pod bir türlü "Running" durumuna geçmiyor.Nedenleri:
  • Kaynak Yetersizliği: Kümede yeterli RAM veya CPU yok. (Cluster Autoscaler gerekebilir).
  • Taint/Toleration: Node'lar üzerinde "Buraya Pod koyma" işareti (Taint) var ve Pod'un buna izni yok.
  • PVC Sorunu: Pod bir disk (Volume) istiyor ama o disk oluşturulamıyor.Çözüm: describe komutundaki "Events" kısmına bakın. "Insufficient cpu" gibi net bir mesaj göreceksiniz.

Sağlık Kontrolleri: Liveness ve Readiness Probes​

K8s'in kendi kendini iyileştirmesi için ona yardım etmelisiniz.
  • Liveness Probe: "Yaşıyor musun?" diye sorar. Cevap yoksa Pod'u öldürür ve yeniden başlatır (Restart). (CrashLoopBackOff'a neden olabilir eğer yanlış ayarlanırsa).
  • Readiness Probe: "Trafiği kabul etmeye hazır mısın?" diye sorar. Cevap yoksa Pod'u öldürmez ama ona trafik göndermeyi keser.

Sonuç​

Kubernetes'te hata ayıklamak dedektifliktir. describe ve logs komutları sizin büyütecinizdir. Hata mesajları korkutucu görünse de, aslında size tam olarak neyin yanlış gittiğini söylerler. Sadece onları okumayı öğrenmeniz gerekir.
 
Geri
Üst