在上一篇中,我們談到了 資源限制與 QoS (Quality of Service),學會了如何透過 Requests 與 Limits 控制 Pod 的資源使用。但就算資源配置再完美,應用程式依然可能「掛掉」。
例如:
這時,Kubernetes 的 健康檢查 (Health Check) 與 自動修復 (Self-healing) 機制就派上用場了 🚑。
Kubernetes 的強大之處,不只在於能讓應用程式「跑起來」,而是能在它「壞掉時自動修好」。
透過 Health Check (Probe),Kubernetes 能自動偵測出哪些容器:
然後根據情況進行不同的動作:
1️⃣ LivenessProbe — 「還活著嗎?」
用途:判斷容器是否卡死或失去功能。
若連續檢查失敗,Kubelet 會自動重啟容器。
常見例子
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
這代表:
常見用法
2️⃣ ReadinessProbe — 「能服務嗎?」
用途:判斷容器是否準備好接受流量。
若失敗 → 該 Pod 會被從 Service 的 endpoint list 中移除,不再接流量。
常見例子
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 3
periodSeconds: 5
與 LivenessProbe 不同,ReadinessProbe 不會重啟容器。
這非常適合用在:
Tip:
ReadinessProbe 是實現「零中斷部署」的重要基礎。
有些應用程式(例如 Java、AI 模型服務)啟動時間很長,若沒有 StartupProbe,Liveness 可能會太早判斷失敗而重啟。
常見例子
startupProbe:
httpGet:
path: /
port: 80
failureThreshold: 30
periodSeconds: 10
這表示:
整體流程如下:
進一步搭配:
Kubernetes 就像一個保母,持續檢查每個小孩(Pod)是否醒著、有沒有吃飯、能不能去上課 🧸。
Step 1. 建立範例 Pod
apiVersion: v1
kind: Pod
metadata:
name: nginx-probe-demo
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 3
periodSeconds: 5
startupProbe:
httpGet:
path: /
port: 80
failureThreshold: 30
periodSeconds: 10
建立:
kubectl apply -f nginx-probe-demo.yaml
Step 2. 檢查 Probe 狀態
kubectl describe pod nginx-probe-demo
你會看到類似:
Liveness: http-get http://:80/healthz delay=5s timeout=1s period=10s #success=1 #failure=3
Readiness: http-get http://:80/ delay=3s timeout=1s period=5s #success=1 #failure=3
Startup: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=30
Step 3. 模擬容器「掛掉」
kubectl exec -it nginx-probe-demo -- /bin/bash
rm /usr/share/nginx/html/healthz
kubectl get pods -w
你會看到:
nginx-probe-demo 1/1 Running
nginx-probe-demo 0/1 CrashLoopBackOff
nginx-probe-demo 1/1 Running
✅ LivenessProbe 偵測失敗 → 自動重啟 → 應用恢復正常。
類型 用途 建議設定
LivenessProbe 偵測程式卡死 periodSeconds: 10–30
ReadinessProbe 控制流量 適度延遲初次檢查
StartupProbe 慢啟動服務 設定高 failureThreshold
Tips
Probe 是 自我修復 (Self-healing) 的起點。
透過正確設計健康檢查,你的系統可以在沒有人介入的情況下自動恢復運作。
在下一篇 Day 24,我們將進一步探討如何讓 Kubernetes 不只「能修好自己」,還能「根據負載自動伸縮」——也就是 HPA (水平自動伸縮) 與 VPA (垂直自動伸縮),讓整個系統具備智慧化的自我調節能力。