溫馨提示×

Ubuntu K8S故障排查指南

小樊
43
2025-10-14 07:48:41
欄目: 智能運維

Ubuntu環境下Kubernetes(K8s)故障排查指南

一、基礎狀態檢查(首要步驟)

1. 集群節點狀態

使用kubectl get nodes查看節點是否處于Ready狀態(若為NotReady,需進一步排查)。通過kubectl describe node <節點名>獲取節點詳細信息,重點關注Conditions字段(如DiskPressure磁盤壓力、MemoryPressure內存壓力、PIDPressure進程壓力等)。

2. 系統組件狀態

檢查Kubernetes核心組件(kube-apiserver、etcd、kube-controller-manager等)的Pod狀態:kubectl get pods -n kube-system。若組件Pod處于CrashLoopBackOff、PendingError狀態,需通過kubectl logs <Pod名> -n kube-system查看其日志。

3. 組件版本兼容性

確保kubeadm、kubelet、kubectl版本一致(建議使用同一小版本,如1.27.x):kubeadm version && kubelet --version && kubectl version。版本不兼容可能導致集群初始化或升級失敗。

二、節點級故障排查(聚焦單節點問題)

1. kubelet服務狀態

kubelet是節點與集群通信的核心組件,需確保其運行正常:

  • systemctl status kubelet:檢查服務是否啟動(若未啟動,執行systemctl start kubelet);
  • journalctl -u kubelet -f:實時查看kubelet日志,重點關注證書過期(如kubelet-client-current.pem)、容器運行時異常(如containerd連接失?。?、節點資源不足(如磁盤空間耗盡)等問題。

2. 容器運行時檢查

K8s默認使用containerd作為容器運行時,需確認其狀態:

  • systemctl status containerd:檢查服務是否運行;
  • ctr containers list:查看容器列表(確認容器是否正常啟動);
  • ctr images list:查看鏡像列表(確認鏡像是否拉取成功)。

3. 資源使用情況

節點資源不足(磁盤、內存、CPU)會導致Pod無法調度或節點NotReady

  • df -h /var/lib/kubelet:檢查kubelet數據目錄磁盤空間(建議保留至少10%空閑);
  • free -m:查看內存使用(若內存不足,K8s會觸發OOMKiller終止Pod);
  • top:監控系統進程資源占用(重點關注kubelet、containerd進程)。

三、網絡故障排查(常見通信問題)

1. 基礎網絡連通性

  • ping <目標IP>:測試節點間網絡連通性(如Master到Node、Node到Pod CIDR);
  • nc -zv <API-Server-IP> 6443:檢查API Server端口(默認6443)是否開放(若無法連接,可能是防火墻或網絡插件問題)。

2. CNI插件狀態

CNI插件(如Calico、Flannel)負責Pod網絡,需確認其運行正常:

  • kubectl get pods -n kube-system -l k8s-app=calico-node:查看CNI插件Pod狀態(應為Running);
  • kubectl logs <cni-pod-name> -n kube-system:查看插件日志(若日志中出現failed to establish network等錯誤,需重新配置CNI或修復網絡插件)。

3. DNS配置

Pod無法解析Service名稱通常是DNS問題:

  • cat /etc/resolv.conf:確認Pod內的DNS配置(默認指向集群DNS服務,如CoreDNS);
  • kubectl get pods -n kube-system -l k8s-app=kube-dns:檢查CoreDNS Pod狀態(若CoreDNS異常,需修復其配置或鏡像拉取問題)。

四、Pod與容器故障排查(最常見的問題場景)

1. Pod狀態檢查

  • kubectl get pods -A:查看所有命名空間的Pod狀態(重點關注Pending、CrashLoopBackOff、Error狀態的Pod);
  • kubectl describe pod <Pod名> -n <命名空間>:獲取Pod事件(如鏡像拉取失敗、資源不足、調度失?。┖蜖顟B詳情(如容器退出碼)。

2. 容器日志分析

  • kubectl logs <Pod名> -c <容器名> -n <命名空間>:查看容器日志(若Pod有多個容器,需指定-c參數);
  • kubectl logs -f <Pod名> -c <容器名>:實時查看日志(用于排查運行時錯誤,如應用崩潰、數據庫連接失?。?。

3. 常見Pod問題處理

  • 鏡像拉取失敗:檢查鏡像名稱、標簽是否正確(如nginx:latest是否存在),或配置私有倉庫憑證(imagePullSecrets);
  • CrashLoopBackOff:通過kubectl logs查看容器崩潰原因(如應用代碼錯誤、配置文件缺失),修復后重啟Pod;
  • Pending狀態:通過kubectl describe pod查看原因(如資源不足、節點選擇器不匹配),調整Pod資源請求或擴容節點。

五、存儲故障排查(持久化問題)

1. PVC與PV狀態

  • kubectl get pvc -A:查看持久化卷聲明(PVC)狀態(若為Pending,說明未綁定PV);
  • kubectl get pv:查看持久化卷(PV)狀態(若為Available,說明未被PVC綁定);
  • kubectl describe pvc <PVC名> -n <命名空間>:查看PVC綁定詳情(如存儲類storageClassName是否正確)。

2. 存儲卷掛載檢查

  • kubectl describe pod <Pod名> -n <命名空間>:查看Volumes部分(確認卷是否掛載成功,如MountPath是否正確);
  • kubectl exec -it <Pod名> -n <命名空間> -- df -h:進入Pod查看存儲卷掛載情況(若掛載失敗,可能是存儲類配置錯誤或后端存儲故障)。

六、證書與安全問題(影響集群通信)

1. 證書有效期檢查

  • openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates:檢查kubelet客戶端證書有效期(若過期,需通過kubeadm certs renew kubelet-client-current.pem續訂);
  • openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates:檢查API Server證書有效期(若過期,需重新初始化集群或續訂證書)。

2. Token過期問題

若Node無法加入集群,可能是kubeadm join使用的Token過期:

  • kubeadm token list:查看Token列表(若無輸出或Token已過期,需生成新Token:kubeadm token create);
  • 計算新的discovery-token-ca-cert-hashopenssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //',替換kubeadm join命令中的Token和Hash。

七、高級排查工具(復雜問題輔助)

1. kubectl debug

通過kubectl debug創建診斷容器,進入節點或Pod執行診斷命令(如ping、traceroute、nslookup):

  • kubectl debug node/<節點名> -it --image=nicolaka/netshoot --target=<容器名>:進入節點診斷(nicolaka/netshoot包含常用網絡工具);
  • kubectl debug -it <Pod名> --image=busybox --target=<容器名>:進入Pod診斷(適用于容器內進程問題)。

2. 集中監控與告警

部署Prometheus+Grafana監控集群狀態(如節點資源、Pod狀態、網絡流量),設置閾值告警(如節點磁盤空間超過80%、Pod內存使用超過90%),及時發現潛在問題。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女