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

Container Service for Kubernetes:プリエンプティブルインスタンスでのジョブの実行

最終更新日:Mar 26, 2026

バッチジョブや耐障害性のあるワークロードをオンデマンドインスタンスで継続的に実行すると、コストが高くなる可能性があります。プリエンプティブルインスタンスを使用すると、これらのワークロードを Elastic Container Instance (ECI) ベースの Pod 上で大幅に低いコストで実行できます。ジョブが完了する前に Pod が解放された場合でも、Kubernetes ジョブコントローラーによって自動的に新しい Pod が作成され、置き換えられます。

適切なワークロード

中断を許容できるワークロードには、プリエンプティブルインスタンスを使用してください。

適切不適切
バッチジョブおよびワンオフタスクステートフルアプリケーション
スケーラブルな Web サービスなどのステートレスで耐障害性のあるアプリケーションタスクの途中で中断を処理できない長時間実行サービス
再起動が許容される短期的な計算タスク起動またはシャットダウン時間が 5 分間のリリース前ウィンドウを超えるワークロード

仕組み

プリエンプティブルインスタンスを作成する際、入札ポリシーを指定します。指定した入札価格がリアルタイムの市場価格を上回り、かつそのインスタンスタイプのリソース在庫が十分な場合にインスタンスが作成されます。

保護期間: 作成後、インスタンスは 1 時間の保護期間 (デフォルト) 実行され、購入時の市場価格で課金されます。

保護期間後: システムは 5 分ごとに市場価格と在庫を確認します。市場価格が指定した入札価格を上回るか、在庫がなくなると、インスタンスは解放されます。解放される約 5 分前に SpotToBeReleased イベントが Kubernetes イベントリストに送信されます。この時間枠を利用して、インバウンドトラフィックを停止したり、ワークロードをチェックポイントしたりしてください。

ジョブの継続性: ジョブが完了する前に Pod が解放された場合、Kubernetes ジョブコントローラーは自動的に新しい Pod を作成してジョブを続行します。元の Pod は BidFailed ステータスで保持されます。

制限事項

  • デフォルトでは、保護期間は 1 時間です。

  • 保護期間終了後、インスタンスの可用性は市場価格とリソース在庫に依存するため、稼働時間の保証はありません。

  • SpotToBeReleased イベントは、解放の約 5 分前に到着します。ワークロードのクリーンなシャットダウンに 5 分以上かかる場合、プリエンプティブルインスタンスは適していない可能性があります。

前提条件

開始する前に、以下を確認してください。

  • ACK Serverless クラスター

  • クラスターに接続するように設定された kubectl

プリエンプティブルインスタンスでのジョブの実行

ステップ 1: ジョブマニフェストの作成

次の内容で 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

k8s.aliyun.com/eci-spot-strategy アノテーションは入札ポリシーを設定します。

説明
SpotAsPriceGo購入時の市場価格を自動的に入札価格として使用します。
SpotWithPriceLimit設定した 1 時間あたりの最大価格を使用します。価格を指定するには、k8s.aliyun.com/eci-spot-price-limit アノテーションを追加します。

k8s.aliyun.com/eci-use-specs アノテーションは、複数のインスタンスタイプをリストします。複数のタイプを指定することで、あるタイプの在庫が少ない場合でもプリエンプティブルインスタンスが作成される可能性が高まります。

ステップ 2: ジョブの作成

kubectl create -f spot_job.yaml

ステップ 3: Pod ステータスの監視

kubectl get pod

Pod は次のステータスを遷移します。

実行中 — ジョブが進行中です。

NAME       READY   STATUS    RESTARTS   AGE
pi-frmr8   1/1     Running   0          35s

完了 — ジョブが正常に終了しました。

NAME       READY   STATUS      RESTARTS   AGE
pi-frmr8   0/1     Completed   0          2h

BidFailed — ジョブが完了する前に Pod が解放されました。ジョブコントローラーは、続行するためにすでに新しい Pod (pi-kp5zx) を作成しています。

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

SpotToBeReleased イベントは、Pod が BidFailed 状態に入る約 5 分前に発行されます。このイベントを表示するには、kubectl get events を実行します。プリエンプティブルインスタンスのリリースイベントの処理に関する詳細については、「プリエンプティブルインスタンスのリリース」をご参照ください。

次のステップ