溫馨提示×

CentOS下Kubernetes故障如何排查

小樊
37
2025-10-13 11:37:16
欄目: 智能運維

CentOS下Kubernetes故障排查指南

1. 檢查集群整體狀態

首先確認集群的基礎狀態是否正常,這是排查故障的第一步:

  • 查看節點狀態:使用kubectl get nodes命令,確保所有節點顯示為Ready(若為NotReady,需進一步檢查kubelet服務)。
  • 查看組件健康狀態:通過kubectl get componentstatuses檢查etcd、kube-apiserver、kube-controller-manager、kube-scheduler等核心組件的健康狀況(如kube-apiserver顯示False,需排查API Server是否啟動)。

2. 查看Pod運行狀態

Pod是Kubernetes的核心工作單元,異常Pod是故障的常見表現:

  • 列出所有Pod:使用kubectl get pods --all-namespaces,關注STATUS列(如Pending、Error、CrashLoopBackOff)。
  • 查看Pod詳情:對異常Pod執行kubectl describe pod <pod-name> -n <namespace>,查看Events部分(如鏡像拉取失敗、資源不足、探針超時等)。
  • 查看Pod日志:使用kubectl logs <pod-name> -n <namespace>(若Pod有多個容器,需指定-c <container-name>);若Pod已崩潰,可添加--previous查看上一個實例的日志。

3. 檢查Kubernetes組件日志

組件日志是故障定位的關鍵線索,重點查看以下服務的日志:

  • kubeletjournalctl -u kubelet -f(實時查看kubelet日志,常見問題是節點無法注冊、容器運行時故障)。
  • kube-proxyjournalctl -u kube-proxy -f(網絡代理問題,如Service無法訪問)。
  • API Serverjournalctl -u kube-apiserver -f(集群控制平面問題,如認證失敗、請求超時)。
  • Controller Manager/Schedulerjournalctl -u kube-controller-manager -f、journalctl -u kube-scheduler -f(資源調度或控制器異常)。

4. 排查網絡問題

網絡問題是Kubernetes集群的高頻故障,需檢查以下方面:

  • 節點間連通性:使用ping <node-ip>測試節點之間的網絡連通性(確保防火墻或安全組允許Kubernetes端口通信,如6443、10250等)。
  • API Server可達性:在工作節點上執行curl -k https://<master-ip>:6443/api/v1/namespaces/default/pods,驗證是否能訪問API Server(若失敗,需檢查kubeconfig配置或防火墻規則)。
  • CNI插件狀態:使用kubectl get pods --all-namespaces | grep cni查看CNI插件(如Flannel、Calico)的Pod狀態(若異常,需重啟插件或檢查配置)。
  • Pod網絡連通性:進入Pod內部測試與其他Pod或Service的通信,如kubectl exec -it <pod-name> -n <namespace> -- /bin/sh,然后執行ping <other-pod-ip>wget http://<service-name>.<namespace>.svc.cluster.local。

5. 檢查系統資源使用情況

資源不足會導致Pod無法調度或頻繁重啟:

  • CPU/內存使用:使用top、htopkubectl top nodes、kubectl top pods查看資源使用情況(若節點資源耗盡,需擴容或調整Pod的資源請求/限制)。
  • 磁盤空間:使用df -h檢查節點磁盤空間(尤其是/var/lib/docker、/var/lib/kubelet目錄,若磁盤空間不足,需清理舊鏡像或日志)。
  • inode使用:使用df -i檢查inode使用率(若inode耗盡,即使磁盤空間充足也無法創建文件)。

6. 驗證配置文件的正確性

配置錯誤是導致故障的常見原因,需檢查以下配置:

  • kubeconfig文件:使用cat ~/.kube/config查看配置是否正確(重點檢查server地址、certificate-authority-data、userclient-certificate-dataclient-key-data)。
  • Deployment/Service配置:使用kubectl apply -f <config-file>.yaml前,先執行kubectl apply --dry-run=client -f <config-file>.yaml驗證配置語法(避免語法錯誤導致配置無法生效)。
  • 證書有效性:使用openssl x509 -in /path/to/certificate.crt -text -noout檢查證書是否過期(如kube-apiserver證書、kubelet證書)。

7. 查看集群事件

Kubernetes事件記錄了集群中的重要變化和故障信息:

  • 使用kubectl get events --sort-by=.metadata.creationTimestamp查看集群事件(按時間排序,重點關注Warning類型的事件,如FailedScheduling、Unhealthy、NodeNotReady)。

8. 使用診斷工具

借助工具快速定位問題:

  • kubectl describe:查看Pod、節點、Service等資源的詳細信息(如kubectl describe node <node-name>可查看節點的容量、分配情況、條件狀態)。
  • kubectl debug:在運行中的Pod中啟動臨時調試容器(如kubectl debug -it <pod-name> -n <namespace> --image busybox --target <container-name>),用于檢查容器內的文件系統、進程等。
  • 監控工具:使用Prometheus+Grafana監控集群性能(如CPU、內存、網絡流量、Pod重啟次數),通過可視化數據快速發現異常。

9. 檢查版本兼容性

Kubernetes組件版本不兼容會導致故障:

  • 使用kubectl version --short查看客戶端和服務端的版本(確??蛻舳税姹九c服務端版本相差不超過1個小版本,如服務端為1.28.x,客戶端可為1.27.x-1.29.x)。

10. 回滾變更

若故障出現在最近的操作(如升級、配置修改)后,嘗試回滾:

  • 升級回滾:使用kubeadm upgrade revert回滾Kubernetes版本(需提前備份重要數據)。
  • 配置回滾:恢復之前的配置文件(如kubectl apply -f <old-config-file>.yaml)。

通過以上步驟,可以系統地排查CentOS下Kubernetes的常見故障。若問題仍未解決,建議查閱Kubernetes官方文檔或在社區(如Stack Overflow、Kubernetes Slack)尋求幫助,同時保留好故障發生時的日志和操作記錄,便于進一步分析。

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