排錯概覽
Kubernetes 集群以及應用排錯的一般方法,主要包括
你可以使用 kube-copilot 藉助 OpenAI 來幫你自動排查集群中的問題並通過自然語言的方式與集群進行交互。
在排錯過程中,kubectl
是最重要的工具,通常也是定位錯誤的起點。這裏也列出一些常用的命令,在後續的各種排錯過程中都會經常用到。
查看 Pod 狀態以及運行節點
查看 Pod 事件
查看 Node 狀態
kube-apiserver 日誌
以上命令操作假設控制平面以 Kubernetes 靜態 Pod 的形式來運行。如果 kube-apiserver 是用 systemd 管理的,則需要登錄到 master 節點上,然後使用 journalctl -u kube-apiserver 查看其日誌。
kube-controller-manager 日誌
以上命令操作假設控制平面以 Kubernetes 靜態 Pod 的形式來運行。如果 kube-controller-manager 是用 systemd 管理的,則需要登錄到 master 節點上,然後使用 journalctl -u kube-controller-manager 查看其日誌。
kube-scheduler 日誌
以上命令操作假設控制平面以 Kubernetes 靜態 Pod 的形式來運行。如果 kube-scheduler 是用 systemd 管理的,則需要登錄到 master 節點上,然後使用 journalctl -u kube-scheduler 查看其日誌。
kube-dns 日誌
kube-dns 通常以 Addon 的方式部署,每個 Pod 包含三個容器,最關鍵的是 kubedns 容器的日誌:
Kubelet 日誌
Kubelet 通常以 systemd 管理。查看 Kubelet 日誌需要首先 SSH 登錄到 Node 上,推薦使用 kubectl-node-shell 插件而不是爲每個節點分配公網 IP 地址。比如:
Kube-proxy 日誌
Kube-proxy 通常以 DaemonSet 的方式部署,可以直接用 kubectl 查詢其日誌
參考文檔
hjacobs/kubernetes-failure-stories 整理了一些公開的 Kubernetes 異常案例。
https://docs.microsoft.com/en-us/azure/aks/troubleshooting 包含了 AKS 中排錯的一般思路
https://cloud.google.com/kubernetes-engine/docs/troubleshooting 包含了 GKE 中問題排查的一般思路
Last updated