全部產品
Search
文件中心

Elastic Container Instance:使用搶佔式ECI執行個體運行Job任務

更新時間:Jul 06, 2024

ECI支援搶佔式執行個體,對於短時間啟動並執行Job任務,以及部分擴充性和容錯率高的無狀態應用(例如可Auto Scaling的Web網站服務),使用搶佔式執行個體可以有效地節約執行個體使用成本。本文以Job任務為例,示範如何建立搶佔式執行個體類型的ECI Pod來運行Job任務。

背景資訊

使用搶佔式執行個體前,請瞭解以下相關資訊:

  • 計費方式

    搶佔式執行個體的市場價格隨供需變化而浮動,您需要在建立搶佔式執行個體時指定出價模式,當指定執行個體規格的即時市場價格低於出價且庫存充足時,就能成功建立搶佔式執行個體。建立成功後,在保護期(預設1小時)內按照成交時的市場價格計費。超過保護期後,按照即時的市場價格計費。

  • 回收機制

    超過保護期後,系統每隔5分鐘將自動檢測一次執行個體規格的市場價格和庫存。如果某一時刻的市場價格高於出價或執行個體規格庫存不足,搶佔式執行個體會被釋放。在釋放前約5分鐘,ECI會通過Kubernetes Events事件通知的方式告知您。在此期間,您可以做一定的處理來確保業務不受執行個體釋放所影響(如切斷該執行個體的業務入口流量)。

  • 建立方式

    支援指定ECS規格,或者指定vCPU和記憶體來建立搶佔式ECI執行個體。

  • 配置方法

    您可以在Pod metadata中添加k8s.aliyun.com/eci-spot-strategy的Annotation來建立搶佔式執行個體。該Annotation用於設定搶佔式執行個體的出價策略,

    取值如下:

    • SpotAsPriceGo:系統自動出價,跟隨當前市場實際價格。

    • SpotWithPriceLimit:自訂設定搶佔執行個體價格上限。如果選擇該策略,需添加k8s.aliyun.com/eci-spot-price-limit的Annotation來設定搶佔式執行個體的每小時價格上限。

更多資訊,請參見建立搶佔式執行個體

操作步驟

在Kubernetes中,Job負責批量處理短暫的一次性任務。使用搶佔式執行個體運行Job任務的配置樣本如下:

  1. 準備Job的設定檔,命名為spot_job.yaml。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
    spec:
      template:
        metadata:
          annotations:
            k8s.aliyun.com/eci-use-specs: ecs.c5.large,2-4Gi # 指定多個規格,提升執行個體建立成功率
            k8s.aliyun.com/eci-spot-strategy: SpotAsPriceGo    # 系統自動出價,跟隨當前市場實際價格
        spec:
          containers:
          - name: pi
            image: registry-vpc.cn-beijing.aliyuncs.com/ostest/perl
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
          restartPolicy: Never
  2. 建立Job。

    kubectl create -f spot_job.yaml
  3. 查看Pod運行情況。

    kubectl get pod
    • 如果Job任務正在運行,對應Pod狀態為Running。

      NAME       READY   STATUS      RESTARTS   AGE
      pi-frmr8   1/1     Running     0          35s
    • 如果Job任務正常運行完成,對應Pod狀態會變更為Completed。

      NAME       READY   STATUS      RESTARTS   AGE
      pi-frmr8   0/1     Completed   0          2h
    • 如果Job任務還未運行完成,對應Pod由於搶佔式執行個體的回收機制被釋放了,Kubernetes中的Job Controller會自動建立新的Pod來繼續運行任務。

      此時仍會保留舊的Pod,該Pod狀態會變更為BidFailed。

      說明

      搶佔式執行個體建立成功後,在保護期內可以正常運行。超出保護期後,如果市場價格高於出價或者資產庫存不足,搶佔式執行個體會被釋放。搶佔式執行個體在釋放前約5分鐘,會產生預釋放事件(SpotToBeReleased),您可以查看事件資訊擷取。更多資訊,請參見釋放說明

      NAME       READY   STATUS      RESTARTS   AGE
      pi-frmr8   1/1     BidFailed   0          4h53m
      pi-kp5zx   1/1     Running     0          3h45m