部署在EDAS上的Kubernetes叢集應用在運行期間出現的問題一般為Pod問題。本文介紹常見的Pod問題及其解決方案。
常見Pod問題
ImagePullBackOff
當Kubernetes無法擷取Pod中某個容器的鏡像時,將出現此錯誤。
可能原因:
- 鏡像名稱無效,例如鏡像名稱拼字錯誤,或者鏡像不存在。
- 為鏡像指定了不存在的標籤。
- 鏡像在私人鏡像倉庫中,Kubernetes無法訪問。
解決方案:
- 對於前兩種情況,可以通過修改鏡像名稱和標籤來解決問題。
- 對於第三種情況,您需要以Secret的形式將私人鏡像倉庫的訪問憑證添加到Kubernetes中,並在Pod中引用該Secret。
CrashLoopBackOff
如果容器無法啟動,則Kubernetes將顯示此錯誤狀態。
可能原因:
- 應用程式中存在錯誤,導致應用無法啟動。
- 未正確配置容器。
- Liveness探針失敗次數太多。
解決方案:
您可以嘗試從該容器中檢索日誌以調查失敗原因。如果因為容器重新啟動太快而看不到日誌,則可以使用以下命令來查看日誌:
$ kubectl logs <pod-name> --previousRunContainerError
容器無法啟動時可能出現此錯誤。
可能原因:
- 掛載了不存在的卷,例如ConfigMap或Secrets。
- 唯讀卷被安裝為可讀寫卷。
解決方案:
請使用以下命令收集資訊和分析錯誤。
kubectl describe podPod處於Pending狀態
建立應用過程中,Pod一直處於Pending狀態。
可能原因:
- 叢集沒有足夠的資源(例如CPU和記憶體)來運行Pod。
- 當前命名空間具有ResourceQuota對象,建立Pod將使命名空間超過配額。
- 該Pod綁定了一個處於Pending狀態的PersistentVolumeClaim。
解決方案:
- 執行以下命令並查看輸出的“事件”部分的內容,或者在控制台查看應用事件,詳情請參見查看應用事件。
$ kubectl describe pod <pod name> - 對於因ResourceQuota導致的錯誤,可以執行以下命令來檢查叢集日誌。
$ kubectl get events --sort-by=.metadata.creationTimestamp
Pod處於未就緒狀態
如果Pod正在運行但未就緒(Not Ready),則表示就緒探針失敗。
可能原因:
當就緒探針失敗時,Pod未串連到服務,並且沒有流量轉寄到該執行個體。
解決方案:
就緒探針失敗是應用程式的特定錯誤,請執行以下命令並查看輸出的“事件”部分的內容,或者在控制台查看應用事件,詳情請參見查看應用事件。
$ kubectl describe pod <pod name>