Job
- k8sでBatchの実行するためのAPIを提供する
- Batchを処理するPodは作業が完了になったら、終了する
- Batch処理で適切なコントローラでPodの完了を保証する
- Batch実行中にNGになったら、リランする
- 正常終了時に完了
job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never # 必須
backoffLimit: 4
- pi というJobがpiというコンテナをJobとして動く
-
restartPolicy
リランするかどうかを書いておく(必須)(初期値はNever
) -
backoffLimit
何回りランするのか書いておく(オプション) -
activeDeadlineSeconds
バッチの実行時間は何秒か設定する
実行結果
controlplane $ vi job.yaml
controlplane $ kubectl apply -f ./job.yaml
job.batch/pi created
controlplane $ kubectl get pods
NAME READY STATUS RESTARTS AGE
pi-v6pmv 0/1 ContainerCreating 0 13s
controlplane $ kubectl get pods
NAME READY STATUS RESTARTS AGE
pi-v6pmv 0/1 ContainerCreating 0 18s
controlplane $ kubectl get pods
NAME READY STATUS RESTARTS AGE
pi-v6pmv 0/1 ContainerCreating 0 19s
controlplane $ kubectl get pods
NAME READY STATUS RESTARTS AGE
pi-v6pmv 0/1 ContainerCreating 0 20s
controlplane $ kubectl get pods
NAME READY STATUS RESTARTS AGE
pi-v6pmv 0/1 ContainerCreating 0 21s
controlplane $ kubectl get pods
NAME READY STATUS RESTARTS AGE
pi-v6pmv 1/1 Running 0 22s
controlplane $ kubectl get pods
NAME READY STATUS RESTARTS AGE
pi-v6pmv 0/1 Completed 0 30s
controlplane $
- 実行が完了になったら、ステータスは
Completed
になるが実行後のログを確認するために残す - 必要なければ、手動で削除する
CronJob
- Jobコントローラで実行するApplications Podを周期的に繰り返しながら実行
- LinuxのCronjobのスケジューリング機能をJobコントローラに追加したAPI
- 次のような作業に適切
- Data backup
- データベースの更新
- メールの転送
- タスクの整理
- Cronjob の時間の設定はLinuxCronjobと構成が同様
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │ 7 is also Sunday on some systems)
# │ │ │ │ │ OR sun, mon, tue, wed, thu, fri, sat
# │ │ │ │ │
# * * * * *
- Jobを作成し、Jobの上にCronJobを追加、Jobを周期的に実行できる構成
(上記のJobをCronjobに修正)job.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: pi
spec:
schedule: "* * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never # 必須
backoffLimit: 4
実行結果
controlplane $ kubectl get pods
NAME READY STATUS RESTARTS AGE
pi-28211988-k45wc 0/1 Completed 0 73s
pi-28211989-gh5r4 0/1 ContainerCreating 0 13s
pi-v6pmv 0/1 Completed 0 19m
- 1分ごとにCronjobが実行されることを確認する
controlplane $ kubectl delete cronjobs.batch pi
cronjob.batch "pi" deleted
- cronjob piを削除する