溫馨提示×

Ubuntu Kubernetes 故障如何排查

小樊
47
2025-09-25 10:29:55
欄目: 智能運維

Ubuntu Kubernetes故障排查指南

一、基礎環境檢查

在排查具體故障前,需先確認Ubuntu系統和Kubernetes基礎環境的穩定性:

  1. 系統更新:運行sudo apt update && sudo apt upgrade確保Ubuntu系統為最新版本,避免因系統漏洞或兼容性問題引發故障。
  2. Kubernetes組件版本兼容性:使用kubeadm version、kubelet --version、kubectl version檢查kubeadm、kubelet、kubectl的版本,確保三者兼容(如均支持同一Kubernetes版本)。
  3. Kubelet狀態:通過sudo systemctl status kubelet確認kubelet服務是否運行;若未運行,用sudo systemctl start kubelet啟動;若啟動失敗,用sudo journalctl -u kubelet查看日志定位具體錯誤(如證書過期、配置文件損壞)。
  4. Ubuntu節點特定配置:檢查kubelet配置文件(通常位于/etc/kubernetes/kubelet.conf/var/lib/kubelet/config.yaml),確認--image-pull-progress-deadline、--runtime-request-timeout等參數設置合理(如避免鏡像拉取超時);同時用df -h檢查磁盤空間(建議保留至少10%空閑空間),防止磁盤滿導致Pod無法啟動。

二、集群狀態驗證

確認Kubernetes集群整體運行狀態是否正常:

  1. 集群信息檢查:運行kubectl cluster-info,查看Master節點API Server地址(如https://<Master-IP>:6443)和DNS服務(如CoreDNS)狀態;若無法訪問API Server,需檢查Master節點網絡或防火墻設置。
  2. 節點狀態檢查:使用kubectl get nodes查看所有節點狀態,若節點顯示為NotReady,用kubectl describe node <node-name>查看詳細事件(如kubelet未注冊、CNI插件未就緒);常見原因包括kubelet服務未啟動、網絡插件故障、節點資源不足。

三、Pod故障排查

Pod是Kubernetes的核心運行單元,多數故障集中在Pod狀態異常(如Pending、CrashLoopBackOff、Error):

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

四、Service訪問故障排查

若Pod運行正常但無法通過Service訪問,需檢查Service及網絡配置:

  1. 檢查Service狀態與配置:用kubectl describe service <service-name>查看Service詳情,確認以下內容:
    • 端口配置spec.ports.port(Service端口)、targetPort(容器端口)、nodePort(NodePort類型端口)是否正確;
    • 選擇器spec.selector是否匹配目標Pod的標簽(如app: web);
    • 類型spec.type(如ClusterIP、NodePort、LoadBalancer)是否符合需求。
  2. 檢查Endpoints:用kubectl get endpoints <service-name>查看Service關聯的Pod IP和端口,若Endpoints為空,說明Service未正確選擇到Pod(需檢查選擇器與Pod標簽是否一致)。
  3. 測試DNS解析:若通過Service名稱訪問(如http://web-service),需測試DNS解析是否正常:
    • 創建臨時Pod:kubectl run -it --rm --image=busybox:1.28.4 -- sh;
    • 在Pod中執行nslookup <service-name>.<namespace>(如nslookup web-service.default),若解析失敗,需檢查CoreDNS服務(見下一步)。
  4. 檢查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會自動重建)。
  5. 檢查網絡策略與插件
    • kubectl get networkpolicies查看是否有網絡策略限制了Service訪問(如禁止某命名空間的流量);
    • 檢查CNI插件(如Calico、Flannel)是否正常運行(kubectl get pods -n kube-system | grep cni),若插件異常,需查看插件日志(kubectl logs <cni-pod-name> -n kube-system);
    • 測試網絡連通性:在集群內部創建臨時Pod,用kubectl run --rm -it --image=alpine ping <service-ip>測試到Service IP的連通性,用nslookup <service-name>測試DNS解析。

五、節點級故障排查

若多個Pod或Service出現故障,需檢查Ubuntu節點本身的狀態:

  1. 節點資源監控:使用kubectl top node查看節點CPU、內存使用情況,若資源使用率過高(如超過80%),需擴容節點(添加新節點)或優化Pod資源分配(調整resources.requestsresources.limits)。
  2. Kubelet日志分析:用sudo journalctl -u kubelet -f實時查看kubelet日志,重點關注以下錯誤:
    • 鏡像拉取失敗:如“Failed to pull image”(需檢查鏡像倉庫權限、網絡連接);
    • 卷掛載失敗:如“Volume mount failed”(需檢查存儲類、持久卷配置);
    • 證書問題:如“Certificate expired”(需更換證書)。
  3. 系統資源檢查:用free -h查看內存使用情況,df -h查看磁盤空間,top查看CPU負載;若磁盤空間不足,清理無用文件(如/var/log下的舊日志);若內存不足,需增加節點內存或優化應用內存使用。

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