Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

36.2. ジョブの作成

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

  • Pod テンプレート: Pod が作成するアプリケーションを記述します。
  • オプションの parallelism パラメーター: ジョブの実行に使用する、並行して実行される Pod のレプリカ数を指定します。これが指定されていない場合、デフォルトは completions パラメーターの値に設定されます。
  • オプションの completions パラメーター: ジョブの実行に使用する、並行して実行される Pod の数を指定します。指定されていない場合、デフォルトで 1 の値に設定されます。

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

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  parallelism: 1    1
  completions: 1    2
  template:         3
    metadata:
      name: pi
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: OnFailure    4
  1. ジョブが並行して実行する Pod のレプリカ数のオプションの値です。 デフォルトでは completions の値に設定されます。
  2. ジョブを完了としてマークするために必要な Pod の正常な完了数のオプションの値です。 デフォルトは 1 に設定されます。
  3. コントローラーが作成する Pod のテンプレートです。
  4. Pod の再起動ポリシー。これは、ジョブコントローラーには適用されません。詳しくは、「既知の制限」 を参照してください。

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

$ oc run pi --image=perl --replicas=1  --restart=OnFailure \
    --command -- perl -Mbignum=bpi -wle 'print bpi(2000)'

36.2.1. 既知の制限

ジョブ仕様の再起動ポリシーは Pod にのみ適用され、ジョブコントローラー には適用されません。ただし、ジョブコントローラーはジョブを完了まで再試行するようハードコーディングされます。

そのため restartPolicy: Never または --restart=Never により、restartPolicy: OnFailure または --restart=OnFailure と同じ動作が実行されます。つまり、ジョブが失敗すると、成功するまで (または手動で破棄されるまで) 自動で再起動します。このポリシーは再起動するサブシステムのみを設定します。

Never ポリシーでは、ジョブコントローラー が再起動を実行します。それぞれの再試行時に、ジョブコントローラーはジョブステータスの失敗数を増分し、新規 Pod を作成します。これは、それぞれの試行が失敗するたびに Pod の数が増えることを意味します。

OnFailure ポリシーでは、kubelet が再起動を実行します。それぞれの試行によりジョブステータスでの失敗数が増分する訳ではありません。さらに、kubelet は同じノードで Pod の起動に失敗したジョブを再試行します。