全部產品
Search
文件中心

Elastic Container Instance:自訂設定ECI Pod的最大Pending時間長度

更新時間:Jul 06, 2024

由於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。

配置樣本

  1. 建立一個設定了最大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  # 設定重啟策略為不自動重啟容器
  2. 確認ECI Pod的狀態。

    kubectl get pod <pod-name> -o=jsonpath='{.status.phase}'

    樣本如下:

    pending時間長度1.png

  3. 等待一段時間,待超出設定的最大Pending時間長度後,確認ECI Pod的狀態和事件資訊。

    • 由於restartPolicy為Never,因此逾時後,Pod會處於Failed狀態。

      kubectl get pod <pod-name> -o=jsonpath='{.status.phase}'

      樣本如下:

      pending時間長度2.png

    • 查看Pod事件,可以看到對應事件資訊。

      kubectl get events --field-selector involvedObject.name=<pod-name>

      樣本如下:

      pending時間長度3.png

    說明

    您也可以通過Elastic Container Instance控制台確認ECI執行個體是否為運行失敗(Failed)狀態,同時在執行個體詳情頁的事件頁簽下查看對應事件資訊。