😄

kubernetesのjobの設定

2021/03/08に公開

はじめに

くーばねてすを倒すために今回は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のマニュフェストの設定

Job.yml
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