iT邦幫忙

2026 iThome 鐵人賽

DAY 14
0

Container 的主行程還在就算活著。但實際上一個程式可能行程沒死、卻已經卡住不回應了,這種狀況 K8s 完全看不出來,還是會把流量送過去

  • Readiness Probe :確認現在能不能接流量,失敗的話 Pod 不會被砍,只是會從 Service 的 EndpointSlice 裡面被拿掉,等它好了再放回去
  • Liveness Probe:確認還有沒有救。失敗的話 K8s 會重啟這個 Container,RESTARTS 數字加一
  • Startup Probe:確認啟動,有些程式啟動要一兩分鐘,如果沒有它,Liveness 會在程式還在暖機的時候就判定失敗,然後就一直重啟。Startup 成功之前,另外兩個 Probe 都不會作用

改 deployment.yaml,在 container 底下加

          readinessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 3
            periodSeconds: 5
          livenessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 10
            periodSeconds: 10
            failureThreshold: 3
  • initialDelaySeconds:第一次檢查之前先等幾秒
  • periodSeconds:每隔幾秒檢查一次
  • failureThreshold:連續失敗幾次才算真的失敗。另外還有 timeoutSeconds,預設只有 1 秒,如果你的健康檢查端點會查資料庫,這個值會需要要調大

除了 httpGet,還有 tcpSocket 跟 exec 兩種方式

  • tcpSocket 只確認連得上那個埠
  • exec 是在 Container 裡面跑指令、看結束代碼是不是 0
kubectl apply -f manifests/base
kubectl rollout status deployment/web -n ithome-lab
kubectl get pods -n ithome-lab

https://ithelp.ithome.com.tw/upload/images/20260928/20176154jbe0EY9dq4.png

READY 前面那個 1 是通過 Readiness 檢查的 Container 數,後面是總數。之前沒設 Probe 的時候它永遠是 1/1,現在代表通過檢查

describe 也看得到設定

kubectl describe pod -n ithome-lab -l app=web

https://ithelp.ithome.com.tw/upload/images/20260928/20176154dJiQeqdMn8.png

先這樣,明天見 :D


上一篇
Day 13 resources
下一篇
Day 15 Troubleshooting
系列文
讓Claude Code當我的 K8s 助教:部署、故障排查與入門可觀測性 共 15 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
justin_log
iT邦新手 4 級 ‧ 2026-09-28 20:07:14

學長今天偏

喔

我要留言

立即登入留言