首先確認集群的基礎狀態是否正常,這是排查故障的第一步:
kubectl get nodes
命令,確保所有節點顯示為Ready
(若為NotReady
,需進一步檢查kubelet服務)。kubectl get componentstatuses
檢查etcd、kube-apiserver、kube-controller-manager、kube-scheduler等核心組件的健康狀況(如kube-apiserver
顯示False
,需排查API Server是否啟動)。Pod是Kubernetes的核心工作單元,異常Pod是故障的常見表現:
kubectl get pods --all-namespaces
,關注STATUS
列(如Pending
、Error
、CrashLoopBackOff
)。kubectl describe pod <pod-name> -n <namespace>
,查看Events
部分(如鏡像拉取失敗、資源不足、探針超時等)。kubectl logs <pod-name> -n <namespace>
(若Pod有多個容器,需指定-c <container-name>
);若Pod已崩潰,可添加--previous
查看上一個實例的日志。組件日志是故障定位的關鍵線索,重點查看以下服務的日志:
journalctl -u kubelet -f
(實時查看kubelet日志,常見問題是節點無法注冊、容器運行時故障)。journalctl -u kube-proxy -f
(網絡代理問題,如Service無法訪問)。journalctl -u kube-apiserver -f
(集群控制平面問題,如認證失敗、請求超時)。journalctl -u kube-controller-manager -f
、journalctl -u kube-scheduler -f
(資源調度或控制器異常)。網絡問題是Kubernetes集群的高頻故障,需檢查以下方面:
ping <node-ip>
測試節點之間的網絡連通性(確保防火墻或安全組允許Kubernetes端口通信,如6443、10250等)。curl -k https://<master-ip>:6443/api/v1/namespaces/default/pods
,驗證是否能訪問API Server(若失敗,需檢查kubeconfig配置或防火墻規則)。kubectl get pods --all-namespaces | grep cni
查看CNI插件(如Flannel、Calico)的Pod狀態(若異常,需重啟插件或檢查配置)。kubectl exec -it <pod-name> -n <namespace> -- /bin/sh
,然后執行ping <other-pod-ip>
或wget http://<service-name>.<namespace>.svc.cluster.local
。資源不足會導致Pod無法調度或頻繁重啟:
top
、htop
或kubectl top nodes
、kubectl top pods
查看資源使用情況(若節點資源耗盡,需擴容或調整Pod的資源請求/限制)。df -h
檢查節點磁盤空間(尤其是/var/lib/docker
、/var/lib/kubelet
目錄,若磁盤空間不足,需清理舊鏡像或日志)。df -i
檢查inode使用率(若inode耗盡,即使磁盤空間充足也無法創建文件)。配置錯誤是導致故障的常見原因,需檢查以下配置:
cat ~/.kube/config
查看配置是否正確(重點檢查server
地址、certificate-authority-data
、user
的client-certificate-data
和client-key-data
)。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證書)。Kubernetes事件記錄了集群中的重要變化和故障信息:
kubectl get events --sort-by=.metadata.creationTimestamp
查看集群事件(按時間排序,重點關注Warning
類型的事件,如FailedScheduling
、Unhealthy
、NodeNotReady
)。借助工具快速定位問題:
kubectl describe node <node-name>
可查看節點的容量、分配情況、條件狀態)。kubectl debug -it <pod-name> -n <namespace> --image busybox --target <container-name>
),用于檢查容器內的文件系統、進程等。Kubernetes組件版本不兼容會導致故障:
kubectl version --short
查看客戶端和服務端的版本(確??蛻舳税姹九c服務端版本相差不超過1個小版本,如服務端為1.28.x,客戶端可為1.27.x-1.29.x)。若故障出現在最近的操作(如升級、配置修改)后,嘗試回滾:
kubeadm upgrade revert
回滾Kubernetes版本(需提前備份重要數據)。kubectl apply -f <old-config-file>.yaml
)。通過以上步驟,可以系統地排查CentOS下Kubernetes的常見故障。若問題仍未解決,建議查閱Kubernetes官方文檔或在社區(如Stack Overflow、Kubernetes Slack)尋求幫助,同時保留好故障發生時的日志和操作記錄,便于進一步分析。