kubernetesのjobの設定
はじめに
くーばねてすを倒すために今回はkubernetesのjobの動きとマニフェストの書き方をちょっとまとめた!(^^)!
概要
■jobとは
■jobの機能
■jobのユースケース
■jobのマニュフェストの設定
をまとめた(^^)/
■jobとは
「job」とはpod内の全てのコンテナが正常終了するまでpodの再試行を繰り返すコントローラーだ。また「クローンジョブ」というものもあり、cronと同じでjobの実行時刻を設定することができる。
■jobの機能
jobの機能は以下の通り。
・jobは実行回数と平行回数を設定して1つ以上のpodを実行することができる。
・jobはpodに含まれるコンテナがすべて正常終了したときにpodが正常終了したとみなす。pod内の複数のコンテナのうち、一つでも異常終了すればそのpodは異常終了したとみなす。
・jobに記述した実行回数が全て正常終了するとjobは完了する。
・jobはpodの異常終了の再試行回数を上回ると中断される。
・障害などにより、jobのpodが失われた場合はjobは他のNodeでpodを再スタートする。
・jobによって実行されたpod内はjobが削除するまで保持される。
・jobを削除するとjobで起動されたpodも削除される。
■jobのユースケース
同時実行と随時実行
個々の処理に順番がなく、個々が独立して実行できるバッチ処理を高速にしたいとき。
jobは複数のNode上で複数のpodを同時に実行することで処理が早く
できるようにコントロールする。
podの実行回数を増やしてしまうとかえって処理能力がおちることもあるので、同時に処理
する実行回数を減らしpodを随時実行する設定をすることもできる。
Nodeごとに機能性を持たせ実行Nodeを選択する
Nodeごとに機能性をもたせ、バッチ処理を行うとき。
バッチ処理のマニュフェストの設定項目として、CPUアーキテクチャ、CPUコア数、メモリ、selectorなどが設定できる。
様々な処理にあわせNodeを設定しpodを割り当てて処理を実行することができる。
定時実行バッチ処理
設定時刻に実行するクローンジョブを利用してデータのバックアップをとったり、夜間バッチ処理を実行する。
■jobのマニュフェストの設定
apiVersion: batch/v1
kind: Job
metadata:
name: test-job
labels:
app: test-job
spec:
template:
metadata:
labels:
app: test-job
spec:
containers:
- name: busybox
image: busybox:latest
command:["sh","-c","sleep 5; exit 0"]
restartPolicy: Never
completions: 6
parallelism:2
jobの設定項目
|設定項目|意味|
| --- | --- | --- |
|completions|正常終了する回数を指定する|
|parallelism|Jobで同時にPodを実行できる並列数を指定する。[completions]より少ない回数で設定する|
|activeDeadlineSeconds|Job自体の有効時間を設けることが出来る。この有効時間は backoffLimit で指定した値よりも優先して処理される。リトライ中でもこの時間を超えるとJobはErrorとして扱われる。|
|backoffLimit|Jobが失敗して再起動処理を無限に続けないように、制限回数を設けることが出来る。デフォルトは6回|
|ttlSecondsAfterFinished|Jobが完了してからの生存時間を秒数で指定する|
|restartPolicy|コンテナが失敗した際、再起動のポリシーを選択できる.OnFailure : 失敗時のみコンテナを再起動,Never : コンテナを再起動しない,Always はJobの特性上使用することが出来ない|
マニュフェストを実行する。
$ kubectl apply -f Job.yml
job.batch/test-job created
jobの詳細確認
$ kubectl describe job test-job
Name: test-job
Namespace: default
Selector: controller-uid=030e7845-59cf-4cce-9327-be3ef51b223b
Labels: app=test-job
Annotations: <none>
Parallelism: 2
Completions: 6
Pods Statuses: 0 Running / 0 Succeeded / 0 Failed
Pod Template:
Labels: app=test-job
controller-uid=030e7845-59cf-4cce-9327-be3ef51b223b
job-name=test-job
Containers:
perl:
Image: perl:latest
Port: <none>
Host Port: <none>
Command:
perl
-Mbignum=bpi
-wle
print bpi(2000)
Environment: <none>
Mounts: <none>
Volumes: <none>
略
まとめ
ジョブ!
Discussion