Kubernetes Pod'unda Backend Ayağa Kaldırma: Probe Tasarımı
Kubernetes'te bir Pod başladığında, sistem otomatik olarak uygulamanın gerçekten hazır olup olmadığını kontrol etmek zorunda. Eğer probe (sonda) doğru yapılandırılmazsa, trafik henüz başlamamış bir backend'e yönlendirilir ve kullanıcılar hata alır. probe tasarımının pratik bir örneği.
Üç tür probe vardır. Liveness Probe, uygulamanın çöküp çökmediğini kontrol eder; eğer başarısız olursa Pod yeniden başlatılır. Readiness Probe, uygulamanın trafik kabul etmeye hazır olup olmadığını belirler; başarısız olursa trafikten çıkarılır. Startup Probe ise yavaş başlayan uygulamalar için ilk başlangıç döneminde tolerans sağlar.
Aşağıda basit bir Go backend'i ve Kubernetes YAML yapılandırması var:
1package main23import (4"fmt"5"net/http"6"time"7)89var ready = false1011func main() {12http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {13if ready {14w.WriteHeader(http.StatusOK)15fmt.Fprintf(w, "healthy")16} else {17w.WriteHeader(http.StatusServiceUnavailable)18}19})2021go func() {22time.Sleep(3 * time.Second)23ready = true24}()2526http.ListenAndServe(":8080", nil)27}Bu kod 3 saniye sonra hazır hale gelir. Şimdi Kubernetes YAML'ı:
1apiVersion: v12kind: Pod3metadata:4name: backend-pod5spec:6containers:7- name: backend8image: mybackend:latest9ports:10- containerPort: 80801112startupProbe:13httpGet:14path: /health15port: 808016failureThreshold: 3017periodSeconds: 11819readinessProbe:20httpGet:21path: /health22port: 808023initialDelaySeconds: 524periodSeconds: 525failureThreshold: 32627livenessProbe:28httpGet:29path: /health30port: 808031initialDelaySeconds: 1032periodSeconds: 1033failureThreshold: 3Startup Probe 30 saniyeye kadar bekler (30 × 1 saniye), yavaş başlayan uygulamalar için zaman tanır. Readiness Probe 5 saniye sonra kontrol etmeye başlar ve 5 saniye aralıklarla çalışır. Liveness Probe 10 saniye sonra başlar ve çöküş durumunda Pod'u yeniden başlatır.
Beklenen çıktı: Pod başladığında ilk 3 saniye trafik almaz, sonra Readiness Probe başarılı olur ve Service trafiği yönlendirmeye başlar.
Sık hata: initialDelaySeconds'ü çok düşük ayarlamak. Uygulamanız 5 saniyede başlıyorsa probe 2 saniyede başlatmayın; başarısız olur ve Pod yeniden başlatılır.
0 yorum