使用 Kubectl 除錯 Kubernetes 節點
此頁面說明如何使用 kubectl debug
命令除錯在 Kubernetes 叢集上執行的節點。
準備開始
您需要有一個 Kubernetes 叢集,並且必須設定 kubectl 命令列工具以與您的叢集通訊。建議在至少有兩個節點且未充當控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個叢集,或者您可以使用這些 Kubernetes 體驗環境之一
您的 Kubernetes 伺服器必須是 1.2 或更新版本。若要檢查版本,請輸入kubectl version
。您需要有權限建立 Pod,並將這些新 Pod 指派給任意節點。您也需要獲得授權才能建立可存取主機檔案系統的 Pod。
使用 kubectl debug node
除錯節點
使用 kubectl debug node
命令將 Pod 部署到您要疑難排解的節點。當您無法使用 SSH 連線存取節點時,此命令很有用。建立 Pod 後,Pod 會在節點上開啟互動式 Shell。若要在名為「mynode」的節點上建立互動式 Shell,請執行
kubectl debug node/mynode -it --image=ubuntu
Creating debugging pod node-debugger-mynode-pdx84 with container debugger on node mynode.
If you don't see a command prompt, try pressing enter.
root@mynode:/#
debug 命令有助於收集資訊和疑難排解問題。您可能會使用的命令包括 ip
、ifconfig
、nc
、ping
和 ps
等等。您也可以從各自的套件管理器安裝其他工具,例如 mtr
、tcpdump
和 curl
。
注意
除錯命令可能會因除錯 Pod 使用的映像檔而異,並且可能需要安裝這些命令。除錯 Pod 可以存取節點的根檔案系統,該檔案系統掛載在 Pod 中的 /host
。如果您在檔案系統命名空間中執行 kubelet,則除錯 Pod 會看到該命名空間的根目錄,而不是整個節點的根目錄。對於典型的 Linux 節點,您可以查看以下路徑以尋找相關日誌
/host/var/log/kubelet.log
- 來自
kubelet
的日誌,負責在節點上執行容器。 /host/var/log/kube-proxy.log
- 來自
kube-proxy
的日誌,負責將流量導向服務端點。 /host/var/log/containerd.log
- 來自節點上執行的
containerd
程序的日誌。 /host/var/log/syslog
- 顯示有關系統的一般訊息和資訊。
/host/var/log/kern.log
- 顯示核心日誌。
在節點上建立除錯會話時,請記住
kubectl debug
會根據節點名稱自動產生新 Pod 的名稱。- 節點的根檔案系統將掛載在
/host
。 - 雖然容器在主機 IPC、網路和 PID 命名空間中執行,但 Pod 沒有特權。這表示讀取某些程序資訊可能會失敗,因為對該資訊的存取權限僅限於超級使用者。例如,
chroot /host
將會失敗。如果您需要特權 Pod,請手動建立它或使用--profile=sysadmin
標誌。 - 透過套用除錯設定檔,您可以為除錯 Pod 設定特定的屬性,例如 securityContext。
清理
當您完成使用除錯 Pod 時,請刪除它
kubectl get pods
NAME READY STATUS RESTARTS AGE
node-debugger-mynode-pdx84 0/1 Completed 0 8m1s
# Change the pod name accordingly
kubectl delete pod node-debugger-mynode-pdx84 --now
pod "node-debugger-mynode-pdx84" deleted
上次修改時間:2024 年 6 月 27 日上午 8:48 PST:add description about debugging profile (0c8a63f4a2)