Kubernetes bir container’ın ne zaman yeniden başlatılacağını, hazır olduğunu ve başlatılacağını bilmek için Probe’ları kullanır. Temel olarak Probe’lar containerların sağlığını kontrol eder ve yanıt vermeyen uygulamanın yeniden başlatılmasını sağlar. Liveness, Readless ve Startup probe’ları bulunmaktadır.
Liveness : Container’ın ne zaman yeniden başlatılacağını bilmek için kullanılır.
Readless : Container’ın işlem kabul etmeye ne zaman hazır olduğunu bilmek için kullanılır.
Startup : Container uygulamasının ne zaman başladığını bilmek için kullanılır.
Çalışmamız Liveness Probe üzerine olacak. Liveness’dan biraz daha bahsedecek olursak; oluşturulan container’lar yazılımsal veya donanımsal nedenlerle isteklere yanıt vermeyi bıraktığında manuel olarak müdahale ile problem çözülebilir ancak liveness ile uygulamanın sağlığını kontrol altında tutup herhangi bir olumsuz durumda container’ın otomatik olarak yeniden başlatılmasını sağlayabiliriz.
Liveness Probe’ları Liveness Command, Liveness HTTP Request ve TCP Liveness olarak tanımlanabilir.
Çalışmamızı, önceki makalelerde kurduğumuz Minikube Cluster üzerinde yapacağız. Örneğimiz Liveness Command üzerine olacak.
Liveness.yaml isimli bir yaml dosyası hazırlayalım.
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: k8s.gcr.io/busybox
args:
- /bin/sh
- -c
- touch /tmp/healty; sleep 30; rm -rf /tmp/healty; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healty
initialDelaySeconds: 3
failureThreshold: 1
periodSeconds: 5
Hazırladığımız YAML dosyasını inceleyelim. Standart bir container için oluşturulan yaml dosyasından farklı olarak touch argümanında , container’ımız başladığında /tmp/healthy isim bir dosya oluşturacağını, 30 saniye uyuyacağını ve oluşturulan dosyayı kaldıracağını belirttik.
LivenessProbe alanı altında periodSeconds alanı probe’un her 5 saniyede bir çalıştırılacağı, initialDelaySeconds alanı ilk probe çalıştırılmadan önce 3 saniye bekleyeceği, failureThreshold ise 1 denemeden sonra başarısız olan container’ı sağlıksız olarak bildirmesi ve yeniden başlatılması talimatını veriyoruz. FailureThreshold değeri varsayılan olarak 3’tür.
minikube kubectl create — -f liveness.yaml komutuyla pod’umuzu oluşturuyoruz.
minikube kubectl get pod liveness-exec — -w ile container’ın her restart ettiğinde çıktı üretmesini sağlıyoruz.
minikube kubectl describe pod liveness-exec komutuyla liveness probe’unun /tmp/healty dosyasını kontrol ettiği ve bulamayarak unhealty olarak tanımladığını görebiliriz.
Faydalı olması dileğiyle,