一、pod處於pending狀態
原因:
如果 Pod 被卡在 Pending 狀態,就意味着它不能調度在某個節點上。一般來說,這是因為某種類型的資源不足而導致無法調度。
排查方法:
1、查看pod詳細信息,event中會顯示具體無法調度的原因
kubectl describe pods ${POD_NAME} -n ${NAMESPACE_NAME}
存在的問題:當前沒有滿足調度條件的節點:
1、節點資源不足
2、HostPort被占用
3、節點不存在對應的標簽
4、節點存在污點
建議解決方案
- 節點資源不足:
建議解決方案:集群新增節點。
緊急解決方案:縮減非核心業務pod數量。 - HostPort被占用
建議解決方案:檢查端口沖突,修改對端;建議采用service方式暴露服務 - 節點不存在對應的標簽
建議解決方案:檢查標簽是否正確;給對應節點添加對應標簽。 - 節點存在污點:
建議解決方案:添加對應的容忍度
二、pod處於Waiting/ImagePullBackOff狀態
原因:
如果 Pod 被卡在Waiting 狀態,那么它已被調度在某個工作節點,但它不能在該機器上運行。一般來說,這是因為鏡像拉去失敗導致。
排查方法:
1、查看pod詳細信息,event中會顯示具體無法啟動的原因
kubectl describe pods ${POD_NAME} -n ${NAMESPACE_NAME}
2、在對應的node節點執行鏡像拉去命令
docker pull <image>
3、檢查網絡組件狀態
kubectl -n kube-system get pod -owide | grep calico
4、查看網絡組件日志
kubectl logs -f ${POD_NAME} -n ${NAMESPACE_NAME}
存在的問題:
1、鏡像拉去失敗:鏡像配置錯誤、kubelet無法訪問鏡像、秘鑰配置錯誤、鏡像太大拉取超時
2、CNI網絡錯誤:網絡組件異常,無法為pod分配IP地址
3、容器無法啟動:鏡像參數配置異常
建議解決方案
- 鏡像拉去失敗:
建議解決方案:檢查鏡像名稱,檢查kubelet配置文件,嘗試在節點直接拉取鏡像 - CNI網絡錯誤:
建議解決方案:檢查網絡組件狀態,查看網絡組件日志。 - 容器無法啟動:
建議解決方案:確認鏡像參數是否正確,確認開發本地相同tag的鏡像是否可以正常運行
三、pod處於ContainerCreating狀態
原因:
如果 Pod 被卡在ContainerCreating狀態,那么它已被調度在某個工作節點,但是在啟動過程中發送了錯誤。一般來說,這是因為依賴資源不存在導致。
排查方法:
1、查看pod詳細信息,event中會顯示具體啟動失敗的原因
kubectl describe pods ${POD_NAME} -n ${NAMESPACE_NAME}
存在的問題:
1、依賴資源不存在:pv、cm、secret等
建議解決方案
- 依賴資源不存在:
建議解決方案:檢查資源名稱是否正確,對應資源是否已創建
四、pod處於Failed/CrashLoopBackOff狀態
原因:
如果 Pod 被卡在CrashLoopBackOff狀態,那么它已被調度在某個工作節點,且可以正常啟動但是又異常退出了。一般來說,這是因為健康檢查未通過或應用程序運行異常導致。
排查方法:
1、查看pod詳細信息,event中會顯示具體啟動失敗的原因
kubectl describe pods ${POD_NAME} -n ${NAMESPACE_NAME}
2、查看對應pod的日志信息
kubectl logs -f ${POD_NAME} -n ${NAMESPACE_NAME}
存在的問題:
1、健康檢查失敗
2、應用程序運行異常
建議解決方案
- 健康檢查失敗:
建議解決方案:檢查健康檢查的內容是否正確。 - 應用程序運行異常:
建議解決方案:反饋對應開發聯合排查,確認問題。
四、pod處於Unknown狀態
原因:
如果 Pod 處於Unknown 狀態,表示集群無法獲取 Pod 的狀態,通常是因為與 Pod 所在主機通信失敗導致。
排查方法:
1、查看kubelet服務狀態
systemctl status kubelet -l
2、檢查與apiserver通信狀態
telnet ${APISERVER_IP:PORT}
存在的問題:kubelet服務與apiserver失聯
1、kubelet未啟動
2、kubelet節點與apiserver通信異常
建議解決方案
- kubelet未啟動:
建議解決方案:啟動kubelet服務,排查kubelet服務異常停止的原因。 - kubelet節點與apiserver通信異常:
建議解決方案:檢查kubelet節點與apiserver節點間的網絡狀態
五、pod處於Evicted狀態
原因:
如果 Pod 處於Evicted狀態,通常是因為與 Pod 所在主機系統內存或硬盤資源不足導致。
排查方法:
1、查看系統磁盤資源使用率
df -h
2、查看系統內存資源使用率
free -h
存在的問題:kubelet服務與apiserver失聯
1、系統磁盤不足
2、系統內存不足
建議解決方案
- 系統磁盤不足:
建議解決方案:進行磁盤清理或擴容磁盤。 - 系統內存不足:
建議解決方案:集群新增節點
緊急解決方案:縮減非核心業務pod數量。
六、pod處於terminating狀態
原因:
如果 Pod 處於terminating 狀態,通常是因為pod未被正確回收導致。
排查方法:
1、查看kubelet服務狀態
systemctl status kubelet -l
2、查看docker服務狀態
systemctl status kubelet -l
3、強制刪除pod指令(謹慎執行)
kubectl delete pods ${POD_NAME} --grace-period=0 --force
存在的問題:
1、kubelet未執行回收操作/執行回收失敗
2、docker未執行回收操作/執行回收失敗
建議解決方案
- kubelet未正確回收:
建議解決方案:查看kubelet服務日志,進一步判斷排查。
緊急解決方案:強制刪除該pod(注意:該指令僅在確認該pod的刪除對環境無影響的前提下執行) - docker未正確回收:
建議解決方案:檢查docker服務日志,進一步判斷排查
