由於Pending狀態的ECI執行個體(ECI Pod)是計費的,對於長時間處於Pending狀態的異常Pod,如果您沒有及時處理,會造成費用損失。預設情況下,ECI執行個體的最大Pending時間長度為4小時,您可以根據實際業務情況自訂設定最大Pending時間長度,系統會自動終止逾時的ECI執行個體,可以在一定程度上規避因沒有及時處理異常Pod而造成的費用損失。
功能說明
每個ECI執行個體相當於一個Pod。建立ECI Pod時,當對應的ECI執行個體從建立中(Scheduling)進入啟動中(Pending)狀態後,該ECI執行個體開始計費。在Pending階段,如果出現鏡像拉取失敗、Volume掛載失敗等問題,ECI執行個體會一直處於Pending狀態並持續計費,您需要及時處理這類異常的ECI執行個體來避免費用損失。預設情況下,對於Pending時間長度超出4小時的ECI執行個體,系統會自動終止並停止計費。如果您對於時間長度有要求,可以自訂設定最大Pending時間長度。
當ECI執行個體處於Scheduling、Pending、Restarting等狀態時,對應的Pod狀態(PodStatus.Phase)均為Pending。支援自訂設定的Pending時間長度指的是ECI執行個體處於Pending階段的時間長度,不包括Scheduling、Restarting等階段的時間長度。更多資訊,請參見ECI Pod生命週期。
配置說明
您可以在Pod metadata中添加k8s.aliyun.com/eci-max-pending-minute
的Annotation來自訂設定Pod對應ECI執行個體的最大Pending時間長度。該Annotation的相關說明如下:
該Annotation的取值範圍為10~1440的整數,單位為分鐘,即下限為10分鐘,上限為1天。
重要請根據實際業務情況合理設定最大Pending時間長度。如果鏡像過大且沒有鏡像緩衝的情況下,建立Pod時需要一定的時間長度來拉取鏡像,此時如果最大Pending時間長度設定過短,可能會導致Pod建立失敗。
未添加該Annotation的情況下,預設的最大Pending時間長度為4小時。
對於配置了initContainer,且initContainer在運行中的ECI Pod,不受該Annotation約束。
超出最大Pending時間長度後,系統會上報對應事件。此時,ECI執行個體的狀態會變更為運行失敗(Failed),對應的Pod狀態(PodStatus.Phase)由restartPolicy決定。
restartPolicy為Always或OnFailure時,PodStatus.Phase為Pending。
restartPolicy為Never時,則PodStatus.Phase為Failed。
配置樣本
建立一個設定了最大Pending時間長度的ECI Pod。
kubectl create -f pending-test.yaml
pending-test.yaml的內容樣本如下,用於類比鏡像拉取失敗導致Pod處於Pending狀態。
apiVersion: v1 kind: Pod metadata: name: pending-test labels: alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-max-pending-minute: "10" # 設定最大Pending時間長度為10分鐘 spec: containers: - image: test****-registry.example.com/eci_test/nginx:1.0 # 使用私人鏡像來類比鏡像拉取失敗,請根據實際替換鏡像 name: test-container restartPolicy: Never # 設定重啟策略為不自動重啟容器
確認ECI Pod的狀態。
kubectl get pod <pod-name> -o=jsonpath='{.status.phase}'
樣本如下:
等待一段時間,待超出設定的最大Pending時間長度後,確認ECI Pod的狀態和事件資訊。
由於restartPolicy為Never,因此逾時後,Pod會處於Failed狀態。
kubectl get pod <pod-name> -o=jsonpath='{.status.phase}'
樣本如下:
查看Pod事件,可以看到對應事件資訊。
kubectl get events --field-selector involvedObject.name=<pod-name>
樣本如下:
說明您也可以通過Elastic Container Instance控制台確認ECI執行個體是否為運行失敗(Failed)狀態,同時在執行個體詳情頁的事件頁簽下查看對應事件資訊。