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

Container Service for Kubernetes:スケジュールされたタスクの CronJob ワークロードを作成する

最終更新日:Jun 27, 2025

CronJob は、ポッドを直接管理しない特殊なタイプのワークロードです。代わりに、指定されたポリシーに基づいて定期的に複数の独立したジョブを作成し、それらのステータスを監視します。 CronJob は、バックアップ操作の実行やメールの送信など、定期的で反復的な操作に適しています。このトピックでは、コンソールまたは kubectl を使用して CronJob を作成する方法について説明します。

重要

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

Cronjob を作成する

コンソールの使用

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

  2. [クラスタ] ページで、目的のクラスタを見つけて名前をクリックします。左側のペインで、[ワークロード] > [CronJob] を選択します。

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

  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"] を入力し、[パラメータ] ボックスに ["-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. [詳細設定] ウィザードページでは、CronJob のスケジューリングとジョブ設定を構成できます。この例では、スケジューリングルールを 2 分ごとに実行するように設定し、その他のオプションはデフォルトのままにします。次に、ページ下部にある [作成] をクリックします。

    image.png

    カテゴリ

    パラメータ

    説明

    CronJob

    スケジュール

    時間単位、日単位、週単位、または月単位でスケジュールを指定できます。 cron 式を指定することもできます。

    Cron 式の詳細については、Cron 式 を参照してください。

    同時実行ポリシー

    現在のジョブが完了していないときに新しいジョブを作成できるかどうかを指定します。

    • 禁止:新しいジョブの作成をスキップします。このオプションは、ジョブを特定の順序で実行する必要がある場合や、ジョブが相互に依存している場合に適しています。

    • 許可:同時実行を許可し、新しいジョブを直接作成します。このオプションは、ジョブが相互に影響を与えない場合に適しています。

    • 置換:現在のジョブを終了し、新しいジョブを作成します。このオプションは、最新の実行結果が必要な場合に適しています。

    ジョブ履歴

    CronJob が保持する成功および失敗したジョブの数。過剰な履歴レコードがリソースを占有するのを防ぎます。

    • 成功ジョブ履歴制限:保持する最新の成功ジョブの数。

    • 失敗ジョブ履歴制限:保持する最新の失敗ジョブの数。

    ジョブ設定

    完了

    jobTemplate.spec.completions。完了状態に入ったポッドの数を指定します。

    並列処理

    jobTemplate.spec.parallelism。同時実行できるポッドの数を指定します。

    タイムアウト

    jobTemplate.spec.activeDeadlineSeconds。単一ジョブの最大実行時間を指定します。ジョブが完了したかどうかに関係なく、実行時間がこの値を超えるとすぐにジョブは停止されます。このオプションは、時間制限が厳しいジョブや無限ループに入る可能性のあるジョブに適しています。デフォルト値は 600 秒です。

    バックオフ制限

    jobTemplate.spec.backoffLimit:ポッドが失敗した後の最大再試行回数。これはすべてのポッドの障害の総数です。デフォルト値は 6 です。

    再起動

    jobTemplate.spec.template.spec.restartPolicy。ポッドが失敗した後の再起動ポリシーを指定します。

    • なし:ポッド内のコンテナが異常終了した後、システムはポッドをその場で再起動しようとします(新しいポッドを作成せずに)。再起動は spec.backoffLimit にカウントされません。

    • 失敗時:ポッドが失敗した後、システムはそれを置き換える新しいポッドを作成します。

    ラベル、アノテーション

    ポッドラベル

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

    ポッドアノテーション

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

  7. CronJob が作成されると、コンソールで 2 分間隔で作成されたジョブを確認できます。

    image.png

kubectl の使用

重要

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

  1. 次の YAML ファイルをコピーして cronjob.yaml として保存します。 CronJob の jobTemplate.spec セクションは、ジョブの spec セクションと同じ形式です。次の例では、ジョブを作成する のジョブ例を使用しています。

apiVersion: batch/v1
kind: CronJob
metadata:
  name: example-cronjob
  labels:
    app: cronjob
spec:
  schedule: "*/2 * * * *" # 2分ごとに実行
  concurrencyPolicy: Forbid # 同時実行を禁止
  successfulJobsHistoryLimit: 3 # 最新の3つの成功ジョブを保持
  failedJobsHistoryLimit: 2     # 最新の2つの失敗ジョブを保持
  jobTemplate:
    spec:
      completions: 1 # 2つのポッドが完了したらジョブを停止
      parallelism: 1 # 一度に1つのポッドのみを実行
      template:
        spec:
          containers:
          - name: counter
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            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 # ポッドを再起動しない
  1. 次のコマンドを実行して CronJob を作成します。

    kubectl apply -f cronjob.yaml

    予想される出力:

    cronjob.batch/example-cronjob created
  2. 約 10 分待ってから、次のコマンドを実行してジョブの実行ステータスを確認します。

    kubectl get job

    予想される出力:

    NAME                       STATUS     COMPLETIONS   DURATION   AGE
    example-cronjob-2901**22   Complete   2/2           31s        5m13s
    example-cronjob-2901**23   Complete   2/2           31s        3m13s
    example-cronjob-2901**24   Complete   2/2           26s        73s

参照