為什麼 Pod 會反覆無法重新啟動,或是被意外移除?
針對反覆無法重新啟動、卡在「CrashLoopBackOff」迴圈中,或從叢集中意外移除的 Pod 進行疑難排解。
虛擬私有雲 傳統基礎設施
您的 Pod 性能良好,但非預期地被移除或停滯在重新啟動迴圈中。 有時容器會顯示 CrashLoopBackOff 狀態。
您的容器可能超出其資源限制,或您的 Pod 可能被取代為較高優先順序的 Pod。 當 Kubernetes 容器反覆無法啟動時,它會進入「CrashLoopBackOff」狀態,這表示該 Pod 內存在持續的重新啟動迴圈。 此錯誤經常因各種問題導致容器無法正常啟動而發生。 常見的原因可能包括記憶體不足、資源超載、部署錯誤、第三方服務問題 (例如 DNS 錯誤)、遺失依賴項目或因連接埠衝突而導致容器故障。
請參閱下列小節:
修正儲存器資源限制
- 取得 Pod 的名稱。 如果您已使用標籤,則可以包括它來過濾結果。
kubectl get pods --selector='app=wasliberty' - 說明 Pod,並尋找重新啟動計數。
kubectl describe pod - 如果 Pod 在短期間內重新啟動多次,則會提取其狀態。
kubectl get pod <pod_name> -n <namespace> -o go-template='{{range.status.containerStatuses}}{{"Container Name: "}}{{.name}}{{"\r\nLastState: "}}{{.lastState}}{{end}}' - 檢閱原因。 例如,
OOM Killed表示記憶體不足,這表示容器因資源限制而發生當機。 - 將容量新增至叢集,例如重新調整工作者節點儲存區的大小,以便可以履行資源。 如需相關資訊,請參閱 調整標準工作者節點儲存區的大小 或 調整 VPC 工作者節點儲存區的大小。
以較高優先順序 Pod 來修正 Pod 取代
若要查看是否將 Pod 取代為較高優先順序的 Pod,請執行下列動作:
-
取得 Pod 的名稱。
kubectl get pods -
說明 Pod YAML。
kubectl get pod <pod_name> -o yaml -
檢查
priorityClassName欄位。-
如果沒有
priorityClassName欄位值,則 Pod 會有globalDefault優先順序類別。 如果您的叢集管理者未設定globalDefault優先順序類別,則預設值為零 (0) 或最低優先順序。 任何具有較高優先順序類別的 Pod 都可以先占或移除您的 Pod。 -
如果有
priorityClassName欄位值,則請取得優先順序類別。
kubectl get priorityclass <priority_class_name> -o yaml ``` 3. 記下 `value` 欄位,以檢查您的 Pod 優先順序。 -
-
列出叢集裡的現有優先順序類別。
kubectl get priorityclasses -
對於每個優先順序類別,取得 YAML 檔案,並記下
value欄位。kubectl get priorityclass <priority_class_name> -o yaml -
將 Pod 的優先順序類別值與其他優先順序類別值比較,以查看其優先順序較高或較低。
-
對於叢集裡的其他 Pod 重複步驟 1 到 3,以檢查它們使用的優先順序類別。 如果這些其他 Pod 的優先順序類別高於您的 Pod,則未佈建您 Pod,除非您的 Pod 有足夠的資源而且每個 Pod 都有較高的優先順序。
-
請聯絡您的叢集管理員,為您的叢集增加更多容量,並確認已指派正確的優先級類別。