pod常見問題及解決方法整理


一、pod處於pending狀態

原因:

如果 Pod 被卡在 Pending 狀態,就意味着它不能調度在某個節點上。一般來說,這是因為某種類型的資源不足而導致無法調度。

排查方法:
1、查看pod詳細信息,event中會顯示具體無法調度的原因
kubectl describe pods ${POD_NAME} -n ${NAMESPACE_NAME}

存在的問題:當前沒有滿足調度條件的節點:

1、節點資源不足
2、HostPort被占用
3、節點不存在對應的標簽
4、節點存在污點

建議解決方案
  1. 節點資源不足:
    建議解決方案:集群新增節點。
    緊急解決方案:縮減非核心業務pod數量。
  2. HostPort被占用
    建議解決方案:檢查端口沖突,修改對端;建議采用service方式暴露服務
  3. 節點不存在對應的標簽
    建議解決方案:檢查標簽是否正確;給對應節點添加對應標簽。
  4. 節點存在污點:
    建議解決方案:添加對應的容忍度

二、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、容器無法啟動:鏡像參數配置異常

建議解決方案
  1. 鏡像拉去失敗:
    建議解決方案:檢查鏡像名稱,檢查kubelet配置文件,嘗試在節點直接拉取鏡像
  2. CNI網絡錯誤:
    建議解決方案:檢查網絡組件狀態,查看網絡組件日志。
  3. 容器無法啟動:
    建議解決方案:確認鏡像參數是否正確,確認開發本地相同tag的鏡像是否可以正常運行

三、pod處於ContainerCreating狀態

原因:

如果 Pod 被卡在ContainerCreating狀態,那么它已被調度在某個工作節點,但是在啟動過程中發送了錯誤。一般來說,這是因為依賴資源不存在導致。

排查方法:
1、查看pod詳細信息,event中會顯示具體啟動失敗的原因
kubectl describe pods ${POD_NAME} -n ${NAMESPACE_NAME}

存在的問題:

1、依賴資源不存在:pv、cm、secret等

建議解決方案
  1. 依賴資源不存在:
    建議解決方案:檢查資源名稱是否正確,對應資源是否已創建

四、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、應用程序運行異常

建議解決方案
  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通信異常

建議解決方案
  1. kubelet未啟動:
    建議解決方案:啟動kubelet服務,排查kubelet服務異常停止的原因。
  2. kubelet節點與apiserver通信異常:
    建議解決方案:檢查kubelet節點與apiserver節點間的網絡狀態

五、pod處於Evicted狀態

原因:

如果 Pod 處於Evicted狀態,通常是因為與 Pod 所在主機系統內存或硬盤資源不足導致。

排查方法:
1、查看系統磁盤資源使用率
df -h

2、查看系統內存資源使用率
free -h
存在的問題:kubelet服務與apiserver失聯

1、系統磁盤不足
2、系統內存不足

建議解決方案
  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未執行回收操作/執行回收失敗

建議解決方案
  1. kubelet未正確回收:
    建議解決方案:查看kubelet服務日志,進一步判斷排查。
    緊急解決方案:強制刪除該pod(注意:該指令僅在確認該pod的刪除對環境無影響的前提下執行)
  2. docker未正確回收:
    建議解決方案:檢查docker服務日志,進一步判斷排查


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM