[Kubernetes]CronJobの動作を確認する 1
はじめに
これまでJobの動作を確認してきましたが、今回からはCronJobの動作を確認してみたいと思います。
CronJobはその名の通り、スケジュールされた時間にJobを実行するリソースです。
CronJobはJobの上位概念で、Jobを管理します。DeploymentとReplicaSetの関係と同じですね。
CronJobの作成
yamlファイル
まずはyamlファイルを作成します。今回は以下のファイルを作成しました。
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: sample-cronjob
spec:
schedule: "*/1 * * * *" #cronと同じ書式で実行時間を指定
jobTemplate:
spec:
template:
spec:
containers:
- name: sample-cronjob
image: centos:latest
command:
- sh
- -c
args:
- date
restartPolicy: Never
「spec.schedule」にcronと同じ書式で「分、時、日、月、曜日」の順で実行時間を指定します。今回は毎分実行します。
「spec.jobTemplate.spec」配下は、Jobのマニフェストと同じです。今回は特に指定していませんが、completionsなどのパラメータも設定することができます。このことからもCronJobがJobを制御していることがわかりますね。
作成
yamlファイルをapplyします。
$ kubectl apply -f sampleCronJob.yaml
cronjob.batch/sample-cronjob created
動作の確認
applyした直後だと、まだJobは作られていません。
$ kubectl get cronjobs
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
sample-cronjob */1 * * * * False 0 <none> 6s
$ kubectl get job
No resources found in default namespace.
「kubectl get pod -w」と「kubectl get job -w」を別ターミナルで開きながら、1分待ちます。
$ kubectl get job -w
NAME COMPLETIONS DURATION AGE
sample-cronjob-1585228560 0/1 0s
sample-cronjob-1585228560 0/1 0s 0s
sample-cronjob-1585228560 1/1 5s 5s
sample-cronjob-1585228620 0/1 0s
sample-cronjob-1585228620 0/1 0s 0s
sample-cronjob-1585228620 1/1 5s 5s
sample-cronjob-1585228680 0/1 0s
sample-cronjob-1585228680 0/1 0s 0s
sample-cronjob-1585228680 1/1 6s 6s
$ kubectl get pod -w
NAME READY STATUS RESTARTS AGE
sample-cronjob-1585228560-qvttr 0/1 Pending 0 0s
sample-cronjob-1585228560-qvttr 0/1 Pending 0 0s
sample-cronjob-1585228560-qvttr 0/1 ContainerCreating 0 0s
sample-cronjob-1585228560-qvttr 0/1 ContainerCreating 0 1s
sample-cronjob-1585228560-qvttr 0/1 Completed 0 5s
sample-cronjob-1585228620-hcdbq 0/1 Pending 0 0s
sample-cronjob-1585228620-hcdbq 0/1 Pending 0 0s
sample-cronjob-1585228620-hcdbq 0/1 ContainerCreating 0 0s
sample-cronjob-1585228620-hcdbq 0/1 ContainerCreating 0 1s
sample-cronjob-1585228620-hcdbq 0/1 Completed 0 5s
sample-cronjob-1585228680-ghmz2 0/1 Pending 0 0s
sample-cronjob-1585228680-ghmz2 0/1 Pending 0 0s
sample-cronjob-1585228680-ghmz2 0/1 ContainerCreating 0 0s
sample-cronjob-1585228680-ghmz2 0/1 ContainerCreating 0 1s
sample-cronjob-1585228680-ghmz2 0/1 Completed 0 6s
1分おきに、JobとPodが作られるのが確認できます。
cronjobの詳細も確認しておきます。
$ kubectl describe cronjob sample-cronjob
Name: sample-cronjob
・・・
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 34m cronjob-controller Created job sample-cronjob-1585228560
Normal SawCompletedJob 34m cronjob-controller Saw completed job: sample-cronjob-1585228560, status: Complete
Normal SuccessfulCreate 33m cronjob-controller Created job sample-cronjob-1585228620
Normal SawCompletedJob 33m cronjob-controller Saw completed job: sample-cronjob-1585228620, status: Complete
Normal SuccessfulCreate 32m cronjob-controller Created job sample-cronjob-1585228680
Normal SawCompletedJob 32m cronjob-controller Saw completed job: sample-cronjob-1585228680, status: Complete
jobの実行時間を確認して、1分おきに実行されていたか確認しておきます。
$ kubectl describe jobs.batch sample-cronjob-1585228560
Name: sample-cronjob-1585228560
・・・
Start Time: Thu, 26 Mar 2020 22:16:00 +0900
・・・
$ kubectl describe jobs.batch sample-cronjob-1585228620
Name: sample-cronjob-1585228620
・・・
Start Time: Thu, 26 Mar 2020 22:17:00 +0900
・・・
1分おきになってますね。
CronJobの一時停止
このままですと、1分おきにJobが実行され続けてしまいます。もう使わないのであれば、deleteすればよいですが、メンテナンスなどで一時的に停止したい場合もあるでしょう。
この場合は、「spec.suspend」パラメータの値を「true」にすることにより、停止することができます。(デフォルトはfalse)
マニフェストを書き換えてapplyする方法と、kubectl patchコマンドで変更する方法があります。今回は後者の方法で停止してみます。
$ kubectl patch cronjob sample-cronjob -p '{"spec":{"suspend":true}}'
cronjob.batch/sample-cronjob patched
$ kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
sample-cronjob */1 * * * * True 0 47m 50m
SUSPENDの値が「True」になって、停止しました。
まとめ
今回はCronJobの基本的な動作を確認しました。
CronJobには他にも色々なパラメータがありますので、それらの動作も今後確認していきたいと思います。
Author And Source
この問題について([Kubernetes]CronJobの動作を確認する 1), 我々は、より多くの情報をここで見つけました https://qiita.com/dingtianhongjie/items/598d702fbbffa34ae0f7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .