iT邦幫忙

2026 iThome 鐵人賽

DAY 27
0

昨天學會查指標了,但都是在正常狀態下查,看到的都是一片平靜。今天要故意製造一次事故,看它在指標上長什麼樣子

重做 Day 17 那個,讓 Container 一啟動就死。改 deployment.yaml,加回那行

          command: ["sh", "-c", "echo starting; sleep 2; exit 1"]

套用之前先把 Prometheus 的頁面開著,等一下要對照

kubectl apply -f manifests/base
kubectl get pods -n ithome-lab

https://ithelp.ithome.com.tw/upload/images/20261011/20176154RDpYAiAvzK.png

然後回到 Prometheus,等個幾分鐘讓資料累積

increase(kube_pod_container_status_restarts_total{namespace="ithome-lab"}[10m])

https://ithelp.ithome.com.tw/upload/images/20261011/20176154Vr61snId8T.png

有東西了。昨天查同一行的時候整排都是 0,現在有一列不是

點上面的 Graph 分頁可以看曲線,會看到它從 0 開始一路往上爬

順便查一下死因

kube_pod_container_status_last_terminated_reason{namespace="ithome-lab"}

https://ithelp.ithome.com.tw/upload/images/20261011/20176154fl47ZBp7mN.png

Error 代表非零的結束代碼,跟 Day 17 那個 Exit Code 1 對得上。如果做的是 Day 21 那個記憶體實驗,這裡會顯示 OOMKilled

前面的流程都是從 kubectl get pods 開始。但我已經知道要看 ithome-lab 這個 namespace。真實情況可能是叢集裡有幾十個 namespace、幾百個 Pod,而我收到的資訊只有使用者說某個功能怪怪的

指標的用途就在這裡。它可以一次涵蓋所有東西

increase(kube_pod_container_status_restarts_total[10m]) > 0

https://ithelp.ithome.com.tw/upload/images/20261011/20176154woBBkz44aH.png

這行沒有指定 namespace,最後那個大於 0 是過濾條件。它回答的問題是「整個叢集裡現在有什麼東西不對勁」,這是 kubectl 做不到的,kubectl 你得先知道要看哪裡

所以兩邊的分工大概是這樣。指標負責發現,它掃得廣,能在我還不知道哪裡壞的時候指出方向;kubectl 負責診斷,它挖得深,Events、log、Last State 這些細節指標裡面沒有

反過來也成立。光看指標我只知道某個 Pod 在重啟,永遠不會知道它為什麼重啟,答案還是得靠指令去挖

Events 預設只留一小時,昨天發生的事今天什麼都查不到。但指標是存下來的時間序列,可以往回看很久,這對「這個問題是什麼時候開始的」這種問題特別有用

實驗做完把 command 拿掉

kubectl apply -f manifests/base
kubectl rollout status deployment/web -n ithome-lab

ok明天見 :D


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

尚未有邦友留言

立即登入留言