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 main
2
3import (
4"fmt"
5"net/http"
6"time"
7)
8
9var ready = false
10
11func 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})
20
21go func() {
22time.Sleep(3 * time.Second)
23ready = true
24}()
25
26http.ListenAndServe(":8080", nil)
27}

Bu kod 3 saniye sonra hazır hale gelir. Şimdi Kubernetes YAML'ı:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1apiVersion: v1
2kind: Pod
3metadata:
4name: backend-pod
5spec:
6containers:
7- name: backend
8image: mybackend:latest
9ports:
10- containerPort: 8080
11
12startupProbe:
13httpGet:
14path: /health
15port: 8080
16failureThreshold: 30
17periodSeconds: 1
18
19readinessProbe:
20httpGet:
21path: /health
22port: 8080
23initialDelaySeconds: 5
24periodSeconds: 5
25failureThreshold: 3
26
27livenessProbe:
28httpGet:
29path: /health
30port: 8080
31initialDelaySeconds: 10
32periodSeconds: 10
33failureThreshold: 3

Startup 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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz