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

Container Service for Kubernetes:ジョブの作成

最終更新日:Jun 25, 2026

ジョブは、1 回限りのタスクを実行し、必要な数の Pod が正常に完了することを保証します。このトピックでは、ジョブの仕組みと、Container Service for Kubernetes (ACK) でコンソールまたは kubectl を使用してジョブを作成する方法について説明します。

ジョブの仕組み

Deployment、StatefulSet、DaemonSet は、ターゲット数の Pod を継続的に実行し続けますが、ジョブはそれらとは異なり、正常に完了した Pod の数を追跡します。必要な成功完了数を spec.completions で、最大同時実行数を spec.parallelism で設定します。

実行タイプ

実行タイプを選択します。

非並列 (シーケンシャル)

一度に 1 つの Pod を実行します。Pod が正常に終了すると、ジョブは完了です。

spec.completions spec.parallelism
1 1

データベース移行などの 1 回限りの初期化タスクに使用します。

固定完了数での並列実行

複数の Pod を並列で実行します。spec.completions で指定した数の Pod が成功すると、ジョブは完了します。

spec.completions spec.parallelism
N M (M ≤ N)
  • M = N の場合:すべての N 個の Pod が並列で実行され、すべてが成功する必要があります。計算リソースが十分な場合に使用します。

  • M < N の場合:N 個の Pod が正常に完了するまで、最大 M 個の Pod が同時に実行されます。冗長性のために使用します。例えば、複数のゾーンにまたがるタスクで、1 つの結果のみが必要な場合などです。

リソース制約のある並列実行

N 個の Pod を並列で実行するリソースが不足している場合、spec.parallelism で同時実行数を制限します。

spec.completions spec.parallelism
N M (M < N)

一度に M 個の Pod が実行されます。各 Pod が正常に完了するたびに、N 個が成功するまで新しい Pod が開始されます。

前提条件

以下が準備できていることを確認してください。

  • パブリックネットワークアクセスが可能な ACK クラスター (サンプルイメージをプルするため)

  • クラスターに接続された kubectl (kubectl メソッドのみ)

パブリックネットワークアクセスを有効にするには:

ジョブの作成

ACK コンソールを使用したジョブの作成

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、対象のクラスター名をクリックします。左側のペインで、[ワークロード] > [ジョブ] を選択します。

  3. [ジョブ] ページで、[イメージから作成] をクリックします。

  4. [基本情報] ステップで、基本設定を行い、[次へ] をクリックします。

  5. [一般] セクションで、[イメージ名] フィールドに registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest と入力します。[ライフサイクル] セクションの [開始] 部分で、[コマンド] フィールドに /bin/sh と入力し、[パラメーター] フィールドに ["-c", "echo 'starting...'; COUNTER=0; while [ $COUNTER -lt 5 ]; do sleep 2; COUNTER=$((COUNTER+1)); echo $COUNTER; done; echo 'finished'; exit 0"] と入力します。次に、[次へ] をクリックします。

    重要

    registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest イメージをプルするには、インターネットアクセスが必要です。 クラスターの作成時に [VPC の SNAT を設定]を有効にした場合、クラスターはすでにインターネットにアクセスできます。 既存のクラスターの場合は、インターネットアクセスを有効にする必要があります。

    image.png

  6. [詳細設定] ステップで、[ジョブ設定] を構成します。この例では、[完了回数]2 に設定し、[作成] をクリックします。

    パラメーター 説明
    補完 正常に完了する必要がある Pod の数。spec.completions にマッピングされます。
    並列度 同時に実行される Pod の最大数。spec.parallelism にマッピングされます。
    タイムアウト ジョブの最大持続時間 (秒単位)。spec.activeDeadlineSeconds にマッピングされます。デフォルト:600。この時間を超えると、成功した Pod の数に関係なくジョブは終了します。
    バックオフ制限 ジョブが失敗するまでの Pod の最大失敗回数。spec.backoffLimit にマッピングされます。デフォルト:6
    再起動 Pod の再起動ポリシー。template.spec.restartPolicy にマッピングされます。オプション:[Never] (既存の Pod を再起動し、spec.backoffLimit にはカウントされません) または [OnFailure] (失敗した Pod を置き換えるために新しい Pod を作成します)。
    [Pod ラベル] Pod のラベル。ACK はデフォルトで app:<application-name> を追加します。
    Pod アノテーション Pod のアノテーション。一部の ACK 機能は、構成にアノテーションを使用します。

    image.png

  7. ACK コンソールでジョブのログを表示します。両方の Pod は同じ出力を生成します。

    image

kubectl を使用したジョブの作成

重要

続行する前に、kubectl を使用してクラスターに接続します。 「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。

  1. job.yaml ファイルを作成します。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: example-job
    spec:
      completions: 2      # 2 つの Pod が正常に終了した後にジョブを停止します。
      parallelism: 1      # 一度に 1 つの Pod のみ実行します。
      template:
        spec:
          containers:
          - name: counter
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            command:
            - /bin/sh
            - -c
            - |
              echo "starting...";
              COUNTER=0;
              while [ $COUNTER -lt 5 ]; do
                sleep 2;
                COUNTER=$((COUNTER+1));
                echo "${COUNTER}";
              done;
              echo "finished";
              exit 0
          restartPolicy: Never
  2. マニフェストを適用します。

    kubectl apply -f job.yaml

    想定される出力:

    job.batch/example-job created
  3. 約 15 秒後、ジョブのステータスを確認します。

    kubectl get job example-job

    1 つの Pod が成功し、ジョブはまだ実行中です。

    NAME          STATUS    COMPLETIONS   DURATION   AGE
    example-job   Running   1/2           16s        16s
  4. 約 40 秒後、再度確認します。

    kubectl get job example-job

    ジョブは完了しています。

    NAME          STATUS     COMPLETIONS   DURATION   AGE
    example-job   Complete   2/2           27s        37s
  5. すべての Pod からログを表示します。

    kubectl logs -l job-name=example-job

    出力 (Pod ごとに 1 つ、合計 2 つの同じセット):

    starting...
    1
    2
    3
    4
    5
    finished
    starting...
    1
    2
    3
    4
    5
    finished

次のステップ