這次建立獨立的 probe-demo Pod。它啟動時會建立一個就緒標記檔,再執行 Nginx。就緒探針檢查標記檔是否存在,存活探針則檢查網站首頁。兩者使用不同條件,可以避免實驗就緒失敗時,同時誤觸容器重新啟動。
把設定存成 probe-demo.yaml 並套用,等待 Pod 就緒後觀察狀態。接著刪除容器裡的標記檔,等待數次探測週期,就緒欄位應從一個就緒容器變成零個,但容器仍持續執行,重新啟動次數通常不會因此增加。
重新建立標記檔後,就緒探針會再次成功,Pod 恢復可接收一般服務流量的狀態。本例沒有另外建立 Service,所以主要驗證 Pod 的就緒變化;若要測試路由結果,還必須配置選取這個 Pod 的服務,不能把狀態變化當成完整網路測試。
這個練習刻意使用簡單檔案模擬應用狀態,正式程式應提供有意義的健康判斷。探測頻率、逾時與失敗門檻都需要配合啟動時間及負載,設定得太急可能放大短暫波動。觀察完成後可保留設定檔,作為日後調整探針的起點。
probe-demo.yamlapiVersion: v1
kind: Pod
metadata:
name: probe-demo
spec:
containers:
- name: nginx
image: nginx:1.28
command: ["/bin/sh", "-c"]
args:
- "touch /tmp/ready; exec nginx -g 'daemon off;'"
readinessProbe:
exec:
command: ["test", "-f", "/tmp/ready"]
periodSeconds: 3
failureThreshold: 1
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 10
periodSeconds: 10
kubectl apply -f probe-demo.yaml
kubectl wait --for=condition=Ready pod/probe-demo --timeout=120s
kubectl exec probe-demo -- rm /tmp/ready
kubectl get pod probe-demo -w
看到 0/1 後按 Ctrl+C 停止觀察,再執行:
kubectl exec probe-demo -- touch /tmp/ready
kubectl wait --for=condition=Ready pod/probe-demo --timeout=60s
kubectl get pod probe-demo