DevOps
CICD
K8s
Docker
到今天為止,我們已經練習了14題基本題了,也介紹了很多物件和觀念。接下來筆者想介紹一些進階的Trobleshooting問題。這類考題通常會提供一個 K8s
集群環境,在環境中有一些bug,例如 Pod
無法新增、kube-apiserver
故障或路徑問題等等,要求你解決這些問題。今天筆者想介紹一些Trobleshooting的技巧,包含常用指令和問題分析等等,之後幾天也會介紹一連串Trobleshooting的考題,會搭配前面學過的東東一起使用哦~ 所以前面介紹過的東西要把握住才行~
因為讀者們沒有這樣的"有bug的集群環境",可能沒辦法自己練習,會缺少一點帶入感,比較可惜。所以筆者會盡量講的詳細一點,讓大家能夠只用看的就能了解,希望大家包容><
為了追蹤和找出 K8s
集群中執行的容器應用出現的問題,經常透過以下這些查錯方法:
K8s
目前執行的階段資訊,特別是與物件連接的Event事件。這些事件紀錄了相關主題、發生時間、最近發生時間、發生次數及事件原因等,對於Trobleshooting很有幫助。此外,透過檢視物件的執行階段資料,我們還可以發現參數錯誤、連結錯誤、狀態例外等問題Pod
調度排程這類的問題,涉及到整個集群的節點,因此可能需要查找節點內的服務紀錄檔來debug。例如蒐集 Control Plane
上的kube-apiserver
、kube-schedule
、kube-controler-manager
,Node
上的 kubelet
及 kube-proxy
等等物件的log。透過綜合判斷各種資訊,就能找到問題所在了
$ kubectl get <resource-objects>
$ kubectl describe <resource-objects> <object-name>
通常kubectl describe
命令就可以看出物件有bug的地方,可以顯示出 Pod
的設定、狀態、最近的Event等,非常有用~
$ kubectl logs <Pod-name>
## -f 參數是讓log不停輸出最新的event
$ kubectl logs -f <pod-name>
## 若Pod內有兩個以上的container,要在指令後方加上 container name,否則會發生error
$ kubectl logs -f <pod-name> <container-name>
以上三個指令看起來非常簡單,而且像廢話,但是要確實把握做到,常常系統已經列出問題所在了,但筆者粗心沒看到,因此就浪費了很多時間debug,要特別注意喔~
查找問題的時候,建議一開始先 kubectl get all -A,找出無法運行的元件,比較快找出問題所在
systemd
系統管理 K8s 服務,那麼systemd
的journal系統會接管服務程式的輸出紀錄檔。在這種環境中,可以透過使用systemd status
或journalctl
工具來檢視系統服務的紀錄檔。例如:$ systemctl status kubelet
$ systemctl status kube-controller-manager -l
$ journalctl -u kube-controller-manager
$ journalctl -u kubelet
通常
Node
狀態是NotReady
,都是因為kubelet
發生問題,這時要先ssh到節點內,再透過journalctl -u kubelet
命令查找問題
$ kubectl cluster-info
筆者整理了一些常見的問題,還有可能的解決方法 (但不是一定,還是要視情況而定,畢竟每個集群環境不同)
Pod
無法調度、認證沒通過,找不到目標檔案等等。建議解決方法可透過:
kube-system
的物件static pod
路徑要如何確認 Pod 運行在哪個Node上,可以透過
kubectl get po -o wide
命令,或看 Pod 名子,名子後面有接 master 的,通常代表運行在Control Plane
上,可從Control Plane下手
Service
的Port mapping沒設定好,或是 Service
沒選取到Pod
,可以檢查 Pod
的 label 和 Service
的 SelectorNetworkPolicy
的ingress和egress IP是否設定正確要有耐心可以查文件
今天做了 Trobleshooting 的前導介紹,以及一些常見的問題,做這類的題目切記:要有耐心,耐心非常重要,一定要慢慢查找問題,不要著急,要記得考試時是可以查找官方文件的哦~ 好啦,今天就到這囉~ 謝謝大家~
kubectl Cheat Sheet
Troubleshoot Clusters
journalctl︰查詢 systemd 日誌
You can find me on