#作者:程宏斌
文章目錄
- 一、節點故障
- (一)節點 NotReady 狀態
- 排查步驟
- 解決方案
- 二、Pod 故障
- (一)Pod 一直處于 Pending 狀態
- 排查步驟
- 解決方案
- (二)Pod 頻繁重啟
- 故障現象
- 排查步驟
- 解決方案
- 三、控制器故障
- (一)Deployment 無法創建 Pod
- 故障現象
- 排查步驟
- 解決方案
- 四、網絡故障
- (一)Pod 之間無法通信
- 排查步驟
- 解決方案
- 五、存儲故障
- 排查步驟
- 解決方案
- 六、總結

在 Kubernetes(K8s)集群的日常運維中,各種故障時有發生。本文將針對 K8s 中常見的故障案例進行詳細分析,包括故障現象、排查步驟和解決方案,為運維人員提供參考。
一、節點故障
(一)節點 NotReady 狀態
故障現象
通過kubectl get nodes命令查看節點狀態時,發現某個節點處于 NotReady 狀態,導致該節點上的 Pod 無法正常運行。
排查步驟
- 登錄到該節點,檢查 Kubelet 服務狀態,執行systemctl status kubelet命令,查看是否存在服務未啟動或異常退出的情況。
- 檢查節點的網絡連接,使用ping命令測試與集群中其他節點及 API Server 的連通性。
- 查看節點的資源使用情況,執行top或free -m等命令,檢查 CPU、內存、磁盤等資源是否耗盡。
- 檢查 Kubelet 的日志,執行journalctl -u kubelet -f命令,查找可能的錯誤信息。
解決方案
- 如果 Kubelet 服務未啟動,執行systemctl start kubelet命令啟動服務;如果服務異常,根據日志信息排查問題,可能需要重啟服務或修復配置文件。
- 若網絡存在問題,檢查網絡配置,修復網絡連接,確保節點能夠正常與其他組件通信。
- 當資源耗盡時,清理節點上不必要的進程或服務,釋放資源;如果是長期資源不足,考慮擴容節點。
二、Pod 故障
(一)Pod 一直處于 Pending 狀態
故障現象
創建 Pod 后,通過kubectl get pods命令查看,發現 Pod 長時間處于 Pending 狀態,無法進入 Running 狀態。
排查步驟
- 執行kubectl describe pod <pod名稱>命令,查看事件信息,了解 Pod 調度失敗的原因,可能是節點資源不足、節點親和性不滿足等。
- 檢查集群中節點的資源情況,執行kubectl describe nodes命令,查看節點的可分配資源是否滿足 Pod 的需求。
- 查看 Pod 的親和性和反親和性配置,確認是否存在配置錯誤導致無法調度。
解決方案
- 若節點資源不足,可擴容節點或調整 Pod 的資源請求和限制;若存在節點親和性問題,修正親和性配置。
(二)Pod 頻繁重啟
故障現象
Pod 在運行過程中頻繁重啟,通過kubectl get pods命令可看到 RESTARTS 字段數值不斷增加。
排查步驟
- 執行kubectl logs <pod名稱> --previous命令,查看 Pod 重啟前的日志,尋找錯誤信息。
- 檢查 Pod 的健康檢查配置(livenessProbe 和 readinessProbe),確認是否因健康檢查失敗導致重啟。
- 查看容器的資源使用情況,是否因資源限制導致容器被 Kill。
解決方案
- 根據日志中的錯誤信息修復應用程序的問題;若健康檢查配置不合理,調整檢查參數;若資源限制過低,適當提高資源限制。
三、控制器故障
(一)Deployment 無法創建 Pod
故障現象
創建 Deployment 后,沒有 Pod 被創建,通過kubectl get deployments命令查看,發現 Deployment 的 replicas 數量未達到預期。
排查步驟
- 執行kubectl describe deployment <deployment名稱>命令,查看事件信息,了解無法創建 Pod 的原因,可能是鏡像拉取失敗、配置錯誤等。
- 檢查 Deployment 的配置文件,確認鏡像名稱、標簽選擇器等配置是否正確。
- 檢查集群的鏡像倉庫是否可達,以及鏡像是否存在。
解決方案
- 若鏡像拉取失敗,檢查鏡像倉庫地址和認證信息,確保能夠正常拉取鏡像;若配置錯誤,修正 Deployment 的配置文件。
四、網絡故障
(一)Pod 之間無法通信
故障現象
集群中的兩個 Pod 無法進行通信,如無法 ping 通或無法訪問對方的服務。
排查步驟
1.檢查 Pod 的網絡配置,確認 Pod 是否獲取到正確的 IP 地址,執行kubectl get pods -o wide命令查看。
2.檢查節點之間的網絡是否通暢,確保節點間的端口通信正常。
3.查看網絡插件的狀態,如 Calico、Flannel 等,確認網絡插件運行正常。
4.檢查網絡策略(NetworkPolicy)是否限制了 Pod 之間的通信。
解決方案
1.若 Pod 未獲取到正確的 IP 地址,重啟網絡插件或檢查網絡插件的配置;若節點網絡不通,修復節點網絡;若網絡策略限制了通信,調整網絡策略配置。
五、存儲故障
(一)PersistentVolume(PV)無法綁定 PersistentVolumeClaim(PVC)
故障現象
創建 PVC 后,長時間處于 Pending 狀態,無法與 PV 綁定。
排查步驟
- 執行kubectl describe pvc <pvc名稱>命令,查看事件信息,了解綁定失敗的原因,可能是沒有合適的 PV、PV 與 PVC 的存儲類不匹配等。
- 執行kubectl get pv命令,查看集群中可用的 PV,檢查 PV 的容量、訪問模式、存儲類等是否與 PVC 匹配。
解決方案
1.若沒有合適的 PV,創建符合要求的 PV;若存儲類不匹配,調整 PVC 或 PV 的存儲類配置。
六、總結
K8s 集群故障種類繁多,排查故障時需要結合日志、事件信息和相關命令進行綜合分析。在日常運維中,應加強對集群的監控,及時發現潛在問題,并做好備份和應急處理預案,以提高集群的穩定性和可靠性。同時,不斷積累故障排查經驗,提升解決問題的效率。