溫馨提示×

Kubernetes在Ubuntu上的故障排查有哪些方法

小樊
44
2025-10-20 23:57:30
欄目: 智能運維

Kubernetes在Ubuntu上的故障排查方法

一、基礎狀態檢查

  • 查看節點狀態:使用kubectl get nodes -o wide查看節點狀態、IP及Kubernetes版本,確認是否有節點處于NotReady狀態;若節點異常,用kubectl describe node <節點名>查看詳細事件(如kubelet未注冊、CNI插件未就緒)。
  • 檢查Kubernetes組件狀態:通過kubectl get pods -n kube-system查看系統組件Pod(如kube-apiserver、etcd、kube-controller-manager)是否運行正常(Running狀態),若有異常,用kubectl describe pod <組件-pod-name> -n kube-system查看組件具體故障。

二、節點級故障排查(Ubuntu特定)

  • kubelet服務狀態:使用systemctl status kubelet確認kubelet服務是否運行;若未運行,用systemctl start kubelet啟動;若啟動失敗,用journalctl -u kubelet -f查看日志,重點關注證書過期、容器運行時異常(如containerd未啟動)等問題。
  • 資源使用情況:用df -h /var/lib/kubelet檢查kubelet數據目錄磁盤空間(建議保留至少10%空閑),free -m查看內存使用(避免OOM導致Pod被殺死),top -p $(pgrep kubelet)監控kubelet進程CPU占用;若磁盤空間不足,清理舊日志或未使用的鏡像。
  • 容器運行時檢查:Ubuntu常用containerd作為容器運行時,用systemctl status containerd確認其運行狀態;用ctr containers list查看容器列表,ctr logs <容器ID>查看容器日志,排查容器運行時故障。

三、網絡故障排查

  • 基礎網絡連通性:在節點上用ping <API-Server-IP>測試到Kubernetes API Server的網絡連通性,用nc -zv <API-Server-IP> 6443檢查API Server端口(默認6443)是否開放;若不通,檢查節點防火墻(ufwiptables)規則或網絡配置。
  • CNI插件狀態:用kubectl get pods -n kube-system -l k8s-app=calico-node(以Calico為例)查看CNI插件Pod狀態,若為Error,用kubectl logs <cni-pod-name> -n kube-system查看插件日志,排查網絡插件配置錯誤或依賴問題(如kubelet網絡配置不正確)。
  • 網絡策略與配置:用kubectl get networkpolicies檢查是否有網絡策略限制了Pod或Service之間的通信;用cat /etc/resolv.conf確認節點DNS配置正確(如指向CoreDNS的ClusterIP),避免DNS解析失敗。

四、Pod故障排查(最常見場景)

  • 查看Pod狀態:用kubectl get pods --all-namespaces列出所有Pod,重點關注STATUS列(如Pending表示調度失敗,CrashLoopBackOff表示容器反復崩潰,Error表示容器啟動失?。?。
  • 查看Pod詳情與事件:用kubectl describe pod <pod-name> -n <namespace>獲取Pod詳細信息,包括事件列表(如“Insufficient CPU”表示節點資源不足、“Failed to pull image”表示鏡像拉取失敗、“Unhealthy”表示健康檢查未通過),事件會明確提示故障原因。
  • 查看容器日志:若Pod中有容器運行,用kubectl logs <pod-name> -c <container-name> -n <namespace>查看容器日志(若容器已崩潰,添加--previous查看前一次實例日志);日志中通常包含應用錯誤(如端口沖突、數據庫連接失?。?。
  • 進入容器調試:若日志無法定位問題,用kubectl exec -it <pod-name> -c <container-name> -n <namespace> -- /bin/sh(或/bin/bash)進入容器,手動執行命令(如ls查看文件、curl測試服務、env查看環境變量),排查應用層問題。
  • 檢查Pod配置:確認Pod的YAML配置文件是否正確,重點檢查:鏡像名稱與標簽(用docker pull <image>測試鏡像是否存在)、資源請求與限制(resources.requests不超過節點可用資源,避免OOMKilled)、環境變量(env字段中的變量是否正確)、卷掛載(volumeMountsvolumes配置是否匹配,持久卷是否存在)。

五、Service與訪問故障排查

  • 檢查Service狀態與配置:用kubectl describe service <service-name>查看Service詳情,確認端口配置(spec.ports.port為Service端口、targetPort為容器端口、nodePort為NodePort類型端口)是否正確,選擇器(spec.selector)是否匹配目標Pod的標簽(如app: web),類型(spec.type)是否符合需求(如ClusterIP用于內部訪問、NodePort用于外部訪問)。
  • 檢查Endpoints:用kubectl get endpoints <service-name>查看Service關聯的Pod IP和端口,若Endpoints為空,說明Service未正確選擇到Pod(需檢查選擇器與Pod標簽是否一致)。
  • 測試DNS解析:若通過Service名稱訪問(如http://web-service.default),需測試DNS解析是否正常:創建臨時Pod(kubectl run -it --rm --image=busybox:1.28.4 -- sh),在Pod中執行nslookup <service-name>.<namespace>(如nslookup web-service.default),若解析失敗,需檢查CoreDNS服務。
  • 檢查CoreDNS服務:用kubectl get pods -n kube-system查看CoreDNS Pod狀態(應為Running);若未運行,用kubectl logs <coredns-pod-name> -n kube-system查看日志(如鏡像拉取失敗、配置文件錯誤);必要時重啟CoreDNS(kubectl delete pod <coredns-pod-name> -n kube-system,Kubernetes會自動重建)。
  • 檢查網絡策略與插件:用kubectl get networkpolicies查看是否有網絡策略限制了Service訪問(如kubectl describe networkpolicy <policy-name>查看規則);檢查CNI插件(如Calico、Flannel)是否正常運行(kubectl get pods -n kube-system | grep cni),若插件異常,查看插件日志定位問題。

六、證書與系統日志排查

  • 證書有效性:Kubernetes組件間通信依賴證書,用openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates檢查kubelet客戶端證書有效期(若證書過期,需用kubeadm certs renew kubelet-client續訂);用openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates檢查API Server證書有效期。
  • 內核與系統日志:用dmesg -T | grep -i "oom\|error"檢查內核日志中的OOM(內存不足)或硬件錯誤(如磁盤壞道),這些日志能幫助定位系統級故障(如Pod因OOM被殺死)。

七、高級排查工具

  • 節點調試Pod:通過kubectl debug node/<節點名> -it --image=busybox進入節點調試Pod,執行診斷命令(如ls /var/lib/kubelet查看kubelet數據目錄、ps aux | grep kubelet查看kubelet進程狀態),無需修改節點本身即可排查問題。
  • 集群驗證工具:使用kubeadm check(kubeadm自帶工具)驗證集群配置是否正確(如證書、配置文件、組件狀態);或使用第三方工具(如sonobuoy)運行端到端測試,全面檢查集群功能。

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