L14 — K8s production: request/limit, probe, PDB, HPA#
D1'de Pod ayağa kalktı. Bu lab onu production'a hazır yapar: doğru request/limit, readiness/liveness probe, kesinti bütçesi (PDB) ve yük altında ölçeklenme (HPA). Bu ayarlar olmadan Pod "çalışıyor" görünür ama ilk yük dalgasında ya OOMKilled olur ya trafik alır almaz düşer — bunu K05'te bizzat yaşayacaksın.
Gerekenler#
- D1'deki kind cluster (
kind create cluster --name lab-d1),kubectl. - Yük üretmek için
kubectl run+ basit bir istek döngüsü (veyahey).
metrics-server'ı kind'a kur (HPA bunu ister)#
kind'ın kubelet sertifikası self-signed olduğu için --kubelet-insecure-tls gerekir:
# <VERSION> yerine resmi release sürümünü yaz (:latest kullanma)
kubectl apply -f "https://github.com/kubernetes-sigs/metrics-server/releases/download/<VERSION>/components.yaml"
kubectl -n kube-system patch deploy metrics-server --type=json \
-p='[{"op":"add","path":"/spec/template/spec/containers/0/args/-","value":"--kubelet-insecure-tls"}]'
kubectl -n kube-system rollout status deploy/metrics-server
kubectl top nodes # değer dönüyorsa metrics-server çalışıyor
Görev#
- request/limit ekle (SEN).
starter/deployment.yaml'daki TODO'ları doldur:requestsplanlama için,limitsüst sınır için. Bellek limitini gerçekçi ver — çok düşükse OOMKilled (K05), çok yüksekse düğüm israfı. - Probe ekle (SEN).
readinessProbe(trafiğe hazır mı) velivenessProbe(kilitlendi mi) — ikisi de/yolu, port 8080. Farkı bil: readiness başarısızsa Pod trafik almaz; liveness başarısızsa Pod yeniden başlatılır. - PDB ekle (SEN).
starter/pdb.yaml: node drain sırasında en az 1 replika ayakta kalsın. Kanıt: - HPA + yük.
starter/hpa.yaml: CPU %50 hedef, min 2 max 5. Yük bas, replika sayısının arttığını gör: - Raporla.
report.txt'e:describeçıktısından probe/limit satırları,get hpayük öncesi/sonrası replika sayısı, ve "request ile limit farkı + OOMKilled niçin olur" açıklaması.
Kabul kriterleri#
-
bash verify.shsıfır hatayla geçiyor. - Deployment
requests+limits+readinessProbe+livenessProbeiçeriyor. - Manifestler bir
HorizontalPodAutoscalerve birPodDisruptionBudgetiçeriyor. -
report.txtHPA'nın yük altında replika artırdığını (öncesi/sonrası sayı) gösteriyor. -
report.txtrequest↔limit farkını ve OOMKilled'ı kendi cümlelerinle anlatıyor.
İpucu (çözüm değil)#
requests= Pod'un garanti aldığı; scheduler buna göre yerleştirir.limits= aşamayacağı tavan; bellekte aşılırsa OOMKilled, CPU'da throttle.- Probe için doğru portu ver. Yanlış port → readiness hep fail → Pod hiç
Readyolmaz → ServiceEndpointsboş → "trafik almıyor" (K05'in ikinci yüzü). - HPA
metrics-serverolmadan<unknown>gösterir. Önce metrics-server'ın çalıştığını doğrula (kubectl top pods).
Takılırsan solution/'a bak — ama önce kendin dene.