使用 Kubectl 除錯 Kubernetes 節點

本頁面介紹如何使用 kubectl debug 命令除錯 Kubernetes 叢集上執行的節點

準備工作

你需要擁有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個節點且這些節點不作為控制平面主機的叢集上執行本教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用這些 Kubernetes 遊樂場之一。

你的 Kubernetes 伺服器版本必須是 1.2 或更高。

要檢查版本,請輸入 kubectl version

你需要有建立 Pods 並將這些新 Pods 分配到任意節點的許可權。你還需要被授權建立可訪問主機檔案系統的 Pods。

使用 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:/#

除錯命令有助於收集資訊和排除問題。你可能會使用的命令包括 ipifconfigncpingps 等。你還可以從相應的包管理器安裝其他工具,例如 mtrtcpdumpcurl

除錯 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:新增除錯配置檔案說明 (0c8a63f4a2)