第37章 ジョブ
37.1. 概要
ジョブは、「レプリケーションコントローラー」とは対照的に、Pod を任意の数のレプリカと共に完了するまで実行します。ジョブはタスクの全体的な進捗状況を追跡し、アクティブな Pod、成功および失敗した Pod についての情報でそのステータスを更新します。ジョブを削除すると、作成した Pod レプリカが削除されます。ジョブは Kubernetes API の一部であり、これは他の「オプジェクトタイプ」と同様に oc
コマンドで管理できます。
ジョブについての詳細は、Kubernetes のドキュメントを参照してください。
37.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
-
ジョブが並行して実行する Pod のレプリカ数のオプションの値です。デフォルトでは
completions
の値に設定されます。 - ジョブを完了としてマークするために必要な Pod の正常な完了数のオプションの値です。デフォルトは 1 に設定されます。
- コントローラーが作成する Pod のテンプレートです。
- Pod の再起動ポリシーです。これは、ジョブコントローラーには適用されません。詳細は、「既知の制限」を参照してください。
oc run
を使用して単一コマンドからジョブを作成し、起動することもできます。以下のコマンドは直前の例に指定されている同じジョブを作成し、これを起動します。
$ oc run pi --image=perl --replicas=1 --restart=OnFailure \ --command -- perl -Mbignum=bpi -wle 'print bpi(2000)'
37.2.1. 既知の制限
ジョブ仕様の再起動ポリシーは Pod にのみ適用され、ジョブコントローラー には適用されません。ただし、ジョブコントローラーはジョブを完了まで再試行するようハードコーディングされます。
そのため restartPolicy: Never
または --restart=Never
により、restartPolicy: OnFailure
または --restart=OnFailure
と同じ動作が実行されます。つまり、ジョブが失敗すると、成功するまで (または手動で破棄されるまで) 自動で再起動します。このポリシーは再起動するサブシステムのみを設定します。
Never
ポリシーでは、ジョブコントローラー が再起動を実行します。それぞれの再試行時に、ジョブコントローラーはジョブステータスの失敗数を増分し、新規 Pod を作成します。これは、それぞれの試行が失敗するたびに Pod の数が増えることを意味します。
OnFailure
ポリシーでは、kubelet が再起動を実行します。それぞれの試行によりジョブステータスでの失敗数が増分する訳ではありません。さらに、kubelet は同じノードで Pod の起動に失敗したジョブを再試行します。
37.3. ジョブのスケーリング
ジョブは oc scale
コマンドを --replicas
オプションと共に使用してスケールアップしたり、スケールダウンしたりすることができます。これはジョブの場合には spec.parallelism
パラメーターを変更します。これにより、並行して実行されている Pod のレプリカ数が変更され、ジョブが実行されます。
以下のコマンドは上記のジョブサンプルを使用し、parallelism
パラメーターを 3 に設定します。
$ oc scale job pi --replicas=3
レプリケーションコントローラーのスケーリングでは、oc scale
コマンドを --replicas
オプションと共に使用しますが、レプリケーションコントローラー設定の replicas
パラメーターを変更します。
37.4. 最長期間の設定
ジョブ
を定義する際に、activeDeadlineSeconds
フィールドを設定して最長期間を定義することができます。これが秒単位で指定され、デフォルトでは設定されません。設定されていない場合は、実施される最長期間はありません。
最長期間は、最初の Pod がスケジュールされた時点から計算され、ジョブが有効である期間を定義します。これは実行の全体の時間を追跡し、完了の数 (タスクを実行するために必要な Pod のレプリカ数) とは無関係に追跡されます。指定されたタイムアウトに達すると、ジョブは OpenShift Container Platform で終了されます。
以下の例は、activeDeadlineSeconds
フィールドを 30 分に指定する ジョブ
の一部を示しています。
spec: activeDeadlineSeconds: 1800
37.5. ジョブ失敗のバックオフポリシー
ジョブは、設定の論理的なエラーなどの理由により再試行の設定回数を超えた後に失敗とみなされる場合があります。ジョブの再試行回数を指定するには、.spec.backoffLimit
プロパティーを設定します。このフィールドはデフォルトで 6 に設定されます。ジョブに関連付けられた失敗した Pod は 6 分を上限として指数関数的バックオフ遅延値 (10s
、20s
、 40s
…) に基づいて再作成されます。この制限は、コントローラーのチェック間で失敗した Pod が新たに生じない場合に再設定されます。