Sağlık Kontrolü Uç Noktası: Liveness ve Readiness Farkı
Bir uygulamanın çalışıp çalışmadığını ve trafiği alıp alamayacağını bilmek, özellikle Kubernetes gibi orkestrasyonda kritik. Liveness ve readiness bu kontrolü sağlayan iki farklı mekanizmadır; hangisinin ne zaman kullanılacağını karıştırmak ciddi sorunlara yol açar.
Liveness Probe Nedir
Liveness, container'ın hala canlı olup olmadığını kontrol eder. Eğer başarısız olursa, Kubernetes container'ı öldürüp yenisini başlatır. Uygulamanın donup kaldığı, sonsuz döngüye girdiği ya da ölüm halinde olduğu durumlarda kullanılır.
Readiness Probe Nedir
Readiness, container'ın trafiği almaya hazır olup olmadığını kontrol eder. Başarısız olursa, Kubernetes pod'u service'ten çıkarır ama container'ı yeniden başlatmaz. Veritabanı bağlantısı kuruluyor, cache yükleniyor, başlangıç görevleri tamamlanıyor gibi durumlarda kullanılır.
Pratik Örnek: Go Uygulaması
Bir Go web sunucusu yazalım ve iki sağlık kontrolü uç noktası ekleyelim.
1package main23import (4"fmt"5"net/http"6"time"7)89var appReady = false1011func liveness(w http.ResponseWriter, r *http.Request) {12w.WriteHeader(http.StatusOK)13fmt.Fprintf(w, "alive")14}1516func readiness(w http.ResponseWriter, r *http.Request) {17if!appReady {18w.WriteHeader(http.StatusServiceUnavailable)19fmt.Fprintf(w, "not ready")20return21}22w.WriteHeader(http.StatusOK)23fmt.Fprintf(w, "ready")24}2526func main() {27http.HandleFunc("/live", liveness)28http.HandleFunc("/ready", readiness)2930go func() {31time.Sleep(3 * time.Second)32appReady = true33fmt.Println("Uygulama hazır")34}()3536fmt.Println("Sunucu:8080 üzerinde başladı")37http.ListenAndServe(":8080", nil)38}Uygulamayı çalıştırıp test et:
1go run main.goBaşka bir terminalde:
2# Çıktı: alive35# İlk 3 saniye: not ready (HTTP 503)6# Sonra: ready (HTTP 200)Kubernetes'te Kullanım
1apiVersion: v12kind: Pod3metadata:4name: app5spec:6containers:7- name: app8image: myapp:1.09livenessProbe:10httpGet:11path: /live12port: 808013initialDelaySeconds: 1014periodSeconds: 515readinessProbe:16httpGet:17path: /ready18port: 808019initialDelaySeconds: 520periodSeconds: 2Liveness başarısız olursa pod yeniden başlar; readiness başarısız olursa trafiği almaz ama pod ayakta kalır. Doğru probe türünü seçmek, uygulamanın stabil kalmasını sağlar.
0 yorum