すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:エラスティックコンテナインスタンスを使用して Job を実行する

最終更新日:Nov 09, 2025

エラスティックコンテナインスタンスは数秒で起動し、必要に応じてスケールアウトします。短時間実行される Job の場合、エラスティックコンテナインスタンスを使用すると、リソースの無駄を防ぎ、ビジネス要件を満たしながらコストを削減し、クラスターの弾力性とリソース使用率を向上させることができます。

シナリオ

クラスターノードの計算リソースが不足している場合、Pod は正常に実行できません。しかし、多くのノードを作成すると、リソースの無駄が生じる可能性があります。ワークロードに明確なピーク時とオフピーク時がある場合は、エラスティックコンテナインスタンスをエラスティックリソースプールとして使用することをお勧めします。これらのインスタンスは数秒で起動し、必要に応じてスケールアウトするため、クラスターの弾力性が大幅に向上します。エラスティックコンテナインスタンスを使用してトラフィックの急増を処理し、Job を実行する場合、事前にサービストラフィックを見積もったり、アイドルリソースを予約したりする必要はありません。これにより、ビジネス要件を満たしながら、使用コストとメンテナンスコストを効果的に削減できます。

Kuberntes集群

前提条件

クラスターに ack-virtual-node コンポーネントがインストールされています。詳細については、「ack-virtual-node コンポーネントをデプロイする」をご参照ください。

  1. テスト用の名前空間を作成し、その名前空間に alibabacloud.com/eci=true ラベルを追加します。

    説明

    このラベルを名前空間に追加すると、その名前空間内のすべての Pod が仮想ノードにスケジュールされ、エラスティックコンテナインスタンスとして実行されます。この例では、このメソッドを使用します。Pod をエラスティックコンテナインスタンスにスケジュールする方法の詳細については、「Pod を仮想ノードにスケジュールする」をご参照ください。

    kubectl create ns vk
    kubectl label namespace vk alibabacloud.com/eci=true
  2. テスト用の名前空間に Job を作成します。

    1. 次の YAML ファイルを編集して、job.yaml として保存します。

      apiVersion: batch/v1
      kind: Job
      metadata:
        name: pi
        namespace: vk     # Pod をエラスティックコンテナインスタンスにスケジュールするために、特定のラベルを持つ名前空間を指定します
      spec:
        template:
          spec:
            containers:
            - name: pi
              image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5.32  
              command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
              resources:
                requests:
                  cpu: 16
                  memory: 32Gi
            restartPolicy: Never
        backoffLimit: 4
    2. ジョブを作成します。

      kubectl -n vk apply -f job.yaml
  3. Job に対応する Pod の実行ステータスを確認します。

    kubectl -n vk get pod -o wide

    期待される出力: Job が完了し (ステータスは Completed)、仮想ノードで実行されています (ノード名には virtual-kubelet プレフィックスが付いています)。

    NAME       READY   STATUS      RESTARTS   AGE   IP              NODE                            NOMINATED NODE   READINESS GATES
    pi-zw2lc   0/1     Completed   0          15m   192.168.XX.XX   virtual-kubelet-cn-shanghai-b   <none>           <none>
  4. Job に対応する Pod の詳細を表示します。

    kubectl -n vk describe pod <pod-name>

    返されたイベントでは、StopCharge イベントは、エラスティックコンテナインスタンス Pod の実行が完了し、課金が停止したことを示します。

    説明

    エラスティックコンテナインスタンス Pod は、使用されたリソースの量に基づいて課金されます。Pod が完了すると、システムは課金を停止します。詳細については、「エラスティックコンテナインスタンスの課金」および「エラスティックコンテナインスタンス Pod のライフサイクル」をご参照ください。

    Events:
      Type     Reason            Age   From        Message
      ----     ------            ----  ----        -------
      Warning  ImageCacheMissed  16m   EciService  [eci.imagecache]イメージキャッシュが見つかりませんでした。
      Normal   Pulling           16m   kubelet     イメージ "registry.cn--shanghai.aliyuncs.com/eci_open/perl:5.32" をプルしています
      Normal   Pulled            15m   kubelet     12.951s (待機時間を含む 12.951s) でイメージ "registry.cn-shanghai.aliyuncs.com/eci_open/perl:5.32" のプルに成功しました。イメージサイズ: 336066994 バイト。
      Normal   Created           15m   kubelet     コンテナーを作成しました: pi
      Normal   Started           15m   kubelet     コンテナー pi を開始しました
      Normal   StopCharge        15m   EciService  [eci.containergroup]現在の ECI インスタンスの課金は停止しましたが、関連リソースはまだクリーンアップ中です。

    したがって、エラスティックコンテナインスタンスで Job を実行すると、コンピューティングコストと運用ワークロードを削減できます。クラスターに十分な計算リソースがあるかどうか、またはノード数をスケールする必要があるかどうかを心配する必要はありません。

参考資料

プリエンプティブルエラスティックコンテナインスタンスを使用して、インスタンスのコストを削減することもできます。詳細については、「プリエンプティブルエラスティックコンテナインスタンスを使用して Job を実行する」をご参照ください。