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

Container Service for Kubernetes:ジョブの作成

最終更新日:Jul 09, 2025

ジョブは、タスク内のポッドが正常に終了することを保証するために、1 回限りのタスクを処理します。このトピックでは、ジョブについて紹介し、Container Service for Kubernetes (ACK) コンソールまたは kubectl を使用してジョブを作成する方法について説明します。

ジョブの概要

Deployment、StatefulSet、および DaemonSet は、アプリケーションに対して一定数のポッドが実行されていることを保証するように設計されています。ジョブはポッドを作成し、指定された数のポッドが正常に終了することを保証します。ジョブの spec.completions パラメーターを構成して、正常に完了したポッドの数を指定できます。ジョブの spec.parallelism パラメーターを構成して、ジョブの実行中に並行して実行できるポッドの数を指定できます。

シナリオ

completions

parallelism

ジョブの動作

データベースの初期化など、1 回限りのタスクを実行する場合。

1

1

ポッドが正常に終了するまで、一度に 1 つのポッドのみを実行します。

複数のポッドを並行して実行したいが、特定の数のポッドのみが正常に終了する必要がある場合。たとえば、複数のゾーンでタスクを実行して、高可用性を確保できます。ただし、1 つのタスクのみが出力を返す必要があります。

M (M < N)

N

M 個のポッドが正常に終了するまで、N 個のポッドを並行して実行します。

指定された数のポッドを並行して実行するには、計算リソースが不足しています。

N

M (M < N)

N 個のポッドが正常に終了するまで、M 個のポッドを並行して実行します。

データ処理タスクなどのタスクを並行して実行するには、計算リソースが十分にあります。

N

N

N 個のポッドが正常に終了するまで、N 個のポッドを並行して実行します。

重要

このトピックで使用されているサンプルイメージはパブリックイメージです。クラスターまたはノードは、それらをプルするためにパブリックネットワークアクセスが必要です。

ジョブの作成

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 を構成する] パラメーターのデフォルト値を保持すると、クラスターはインターネットにアクセスできます。既存のクラスターのインターネットアクセスを有効にする方法の詳細については、「既存の ACK クラスタがインターネットにアクセスできるようにする」をご参照ください。

    image.png

  6. [詳細設定] ステップでは、Completions パラメーターと Parallelism パラメーターを構成できます。この例では、[完了数] は 2 に設定されています。上記のパラメーターの詳細については、「ジョブの概要」をご参照ください。次に、ページの下部にある [作成] をクリックします。

    image.png

    セクション

    パラメーター

    説明

    [ジョブ設定]

    [完了数]

    正常に終了する必要があるポッドの数。このパラメーターは、ジョブ構成の spec.completions パラメーターに対応します。

    [並列処理]

    並行して実行できるポッドの数。このパラメーターは、ジョブ構成の spec.parallelism パラメーターに対応します。

    [タイムアウト]

    ジョブ実行のタイムアウト期間。このパラメーターは、ジョブ構成の spec.activeDeadlineSeconds パラメーターに対応します。ジョブの実行がタイムアウトした場合、正常に終了したポッドの数が指定された値に達したかどうかに関係なく、ジョブは終了します。このパラメーターは、時間に厳密なタスク、または無限ループ実行が発生する可能性のあるタスクに適しています。デフォルト値: 600。単位: 秒。

    [バックオフ制限]

    ポッドの障害時にジョブによって実行される最大再試行回数。このパラメーターは、ジョブ構成の spec.backoffLimit パラメーターに対応します。デフォルト値: 6

    [再起動]

    ポッドの再起動ポリシー。このパラメーターは、ジョブ構成の template.spec.restartPolicy パラメーターに対応します。有効な値:

    • [なし]: ポッド内のコンテナーが異常終了した場合、システムはポッドの再起動を試みます。この場合、システムは新しいポッドを作成しません。再起動は、spec.backoffLimit パラメーターで指定された再試行制限にはカウントされません。

    • [失敗時]: ポッドに障害が発生した場合、システムは障害が発生したポッドを置き換えるために新しいポッドを作成します。

    [ラベル、アノテーション]

    Pod ラベル

    ワークロードが属する各ポッドにラベルを追加します。ワークロードやサービスを含むクラスター内のすべてのリソースは、ラベルを使用してポッドと照合されます。デフォルトでは、ACK は app:(アプリケーション名) の形式のラベルをポッドに追加します。

    [ポッドアノテーション]

    ワークロードが属する各ポッドにアノテーションを追加します。ACK の一部の機能はアノテーションを使用します。これらの機能を使用するときに、アノテーションを構成できます。

  7. ジョブを作成した後、ACK コンソールでジョブのログを表示できます。ログは、ジョブによって作成された 2 つのポッドが同じ出力を返すことを示しています。

    image

kubectl

重要

ワークロードを作成する前に、kubectl を使用してクラスターに接続していることを確認してください。詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。

  1. job.yaml という名前のファイルを作成し、次の YAML テンプレートをファイルにコピーします。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: example-job
    spec:
      completions: 2 # 2 つのポッドが正常に終了した後、ジョブを停止します。
      parallelism: 1 # 一度に 1 つのポッドのみを実行します。
      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 // $COUNTER が 5 未満の間
                sleep 2;
                COUNTER=$((COUNTER+1));
                echo "${COUNTER}";
              done;
              echo "finished"; // 終了
              exit 0
          restartPolicy: Never # ポッドの再起動ポリシーに Never を使用します。
  2. 次のコマンドを実行して、ジョブを作成します。

    kubectl apply -f job.yaml

    予想される出力:

    job.batch/example-job created
  3. ジョブの作成後、15 秒待ってから次のコマンドを実行して、ジョブのステータスをクエリします。

    kubectl get job example-job

    次の出力は、1 つのポッドが正常に終了し、ジョブが Running 状態であることを示しています。

    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. 次のコマンドを実行して、ジョブのログをクエリします。

    kubectl logs -l job-name=example-job

    予想される出力:

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

関連情報

  • CronJob は、指定されたスケジュールに基づいてジョブを作成します。CronJob は、スケジュールされたタスクを実行するのに適しています。詳細については、「CronJob の作成」をご参照ください。

  • ワークロードの作成時に発生する問題の解決方法の詳細については、「ワークロードに関するよくある質問」をご参照ください。

  • ポッドの例外のトラブルシューティング方法の詳細については、「ポッドのトラブルシューティング」をご参照ください。