Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

第39章 Cron ジョブ

39.1. 概要

cron ジョブ は、ジョブの実行スケジュールを具体的に指定できるようにして、通常の「ジョブ」をベースにビルドします。Cron ジョブは Kubernetes API の一部であり、他の「オブジェクトタイプ」と同様に oc コマンドで管理できます。

警告

Cron ジョブはスケジュールの実行時間ごとに約 1 回ずつジョブオブジェクトを作成しますが、ジョブの作成に失敗したり、2 つのジョブが作成される可能性のある状況があります。そのためジョブはべき等である必要があり、履歴制限を設定する必要があります。

39.2. Cron ジョブの作成

Cron ジョブの設定は以下の主な部分で構成されます。

  • cron 形式で指定されるスケジュール。
  • 次のジョブの作成時に使用されるジョブテンプレート。
  • ジョブを開始するためのオプションの期限 (秒単位)(何らかの理由によりスケジュールされた時間が経過する場合)。ジョブの実行が行われない場合、ジョブの失敗としてカウントされます。これが指定されない場合は期間が設定されません。
  • ConcurrencyPolicy: オプションの同時実行ポリシー。Cron ジョブ内での同時実行ジョブを処理する方法を指定します。以下の同時実行ポリシーの 1 つのみを指定できます。これが指定されない場合、同時実行を許可するようにデフォルト設定されます。

    • Allow: Cron ジョブを同時に実行できます。
    • Forbid: 同時実行を禁止し、直前の実行が終了していない場合は次の実行を省略します。
    • Replace: 同時に実行されているジョブを取り消し、これを新規ジョブに置き換えます。
  • Cron ジョブの停止を許可するオプションのフラグ。これが true に設定されている場合、後続のすべての実行が停止されます。

以下は、CronJob リソースのサンプルです。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: pi
spec:
  schedule: "*/1 * * * *"  1
  jobTemplate:             2
    spec:
      template:
        metadata:
          labels:          3
            parent: "cronjobpi"
        spec:
          containers:
          - name: pi
            image: perl
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
          restartPolicy: OnFailure 4
  1. ジョブのスケジュールです。この例では、ジョブは 1 分ごとに実行されます。
  2. ジョブテンプレートです。これは、ジョブのサンプルに似ています。
  3. この Cron ジョブで生成されるジョブのラベルを設定します。
  4. Pod の再起動ポリシーです。これは、ジョブコントローラーには適用されません。詳細は、「既知の問題および制限」を参照してください。

oc run を使用して単一コマンドから cron ジョブを作成し、起動することもできます。以下のコマンドは直前の例で指定されている同じ cron ジョブを作成し、これを起動します。

$ oc run pi --image=perl --schedule='*/1 * * * *' \
    --restart=OnFailure --labels parent="cronjobpi" \
    --command -- perl -Mbignum=bpi -wle 'print bpi(2000)'

oc run で、--schedule オプションは cron 形式のスケジュールを受け入れます。

注記

Cron ジョブの作成時に、oc runNever または OnFailure 再起動ポリシー (--restart) のみをサポートします。

ヒント

必要なくなった Cron ジョブを削除します。

$ oc delete cronjob/<cron_job_name>

これを実行することで、不要なアーティファクトの生成を防げます。

39.3. Cron ジョブ後のクリーンアップ

.spec.successfulJobsHistoryLimit.spec.failedJobsHistoryLimit のフィールドはオプションです。これらのフィールドでは、完了したジョブと失敗したジョブのそれぞれを保存する数を指定します。デフォルトで、これらのジョブの保存数はそれぞれ 31 に設定されます。制限に 0 を設定すると、終了後に対応する種類のジョブのいずれも保持しません。

Cron ジョブはジョブや Pod などのアーティファクトリソースをそのままにすることがあります。ユーザーは履歴制限を設定して古いジョブとそれらの Pod が適切に消去されるようにすることが重要です。現時点で、これに対応する 2 つのフィールドが Cron ジョブ仕様にあります。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: pi
spec:
  successfulJobsHistoryLimit: 3 1
  failedJobsHistoryLimit: 1     2
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
  ...
1 1 1
保持する成功した終了済みジョブの数 (デフォルトは 3 に設定)。
2 2 2
保持する失敗した終了済みジョブの数 (デフォルトは 1 に設定)。