Self-healing
- Docker & Kubernetes kursu
- Orta seviye
- Ders 35/82
- 4 dk
Pod silindiğinde ReplicaSet'in yeniden oluşturmasını öğrenirsin.
Self-healing
ReplicaSet denetleyicisi sürekli bir uzlaştırma döngüsü çalıştırır: gerçek pod sayısını gözlemler, istenenle karşılaştırır, farkı kapatır. Pod silinirse, node çökerse ya da pod tahliye edilirse (evicted) eksik pod yeniden oluşturulur:
$ kubectl delete pod web-7c5b9f6d8-abcde
$ kubectl get events --field-selector involvedObject.kind=ReplicaSet | tail -2
Normal SuccessfulDelete replicaset/web-7c5b9f6d8 Deleted pod: web-7c5b9f6d8-abcde
Normal SuccessfulCreate replicaset/web-7c5b9f6d8 Created pod: web-7c5b9f6d8-mnopqContainer yeniden başlatma
İki seviye onarım vardır. Container çökerse kubelet aynı pod içinde container'ı yeniden başlatır (restartPolicy: Always), RESTARTS sayacı artar. Pod'un kendisi yok olursa ReplicaSet yeni bir pod oluşturur. Bir önceki çöken container'ın log'u --previous ile görülür:
$ kubectl get pod api-5d8f7c9b4-qrstu
NAME READY STATUS RESTARTS AGE
api-5d8f7c9b4-qrstu 1/1 Running 3 (2m ago) 20m
$ kubectl logs api-5d8f7c9b4-qrstu --previousUygulama Onarımı gözle
Üç komut yaz: web-7c5b9f6d8-abcde pod'unu sil; app=web etiketli pod'ları listele; api-5d8f7c9b4-qrstu pod'unun önceki container log'unu göster.
Başlangıç kodu
# buraya yazÖrnek çözüm
kubectl delete pod web-7c5b9f6d8-abcde
kubectl get pods -l app=web
kubectl logs api-5d8f7c9b4-qrstu --previousBeklenen çıktı
pod "web-7c5b9f6d8-abcde" deleted NAME READY STATUS RESTARTS AGE web-7c5b9f6d8-fghij 1/1 Running 0 2h web-7c5b9f6d8-mnopq 1/1 Running 0 4s panic: runtime error: invalid memory address
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Kendini onarma neyi kapsamaz?
- Silinen pod'u
- Çöken node'daki pod'u
- Tahliye edilen pod'u
- Uygulamadaki bir hatayı; yeni pod da aynı hatayla çöker Doğru cevap
Açıklama: Sürekli çöken pod CrashLoopBackOff durumuna düşer.
2 Önceki (çöken) container'ın log'unu göster.
kubectl logs api-5d8f7c9b4-qrstu ____
kubectl logs api-5d8f7c9b4-qrstu --previous
Açıklama: --previous (-p) bir önceki container örneğinin log'udur.
3 Eşleştir.
| Kavram | Anlamı |
|---|---|
kubelet |
Container'ı yeniden başlatır |
ReplicaSet |
Pod'u yeniden oluşturur |
RESTARTS |
Container yeniden başlama sayısı |
--previous |
Çökenin log'u |