5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Kubernetes]CronJobの動作を確認する 1

Last updated at Posted at 2020-03-26

はじめに

これまでJobの動作を確認してきましたが、今回からはCronJobの動作を確認してみたいと思います。
CronJobはその名の通り、スケジュールされた時間にJobを実行するリソースです。

CronJobはJobの上位概念で、Jobを管理します。DeploymentとReplicaSetの関係と同じですね。
image.png

CronJobの作成

yamlファイル

まずはyamlファイルを作成します。今回は以下のファイルを作成しました。

sampleCronJob.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には他にも色々なパラメータがありますので、それらの動作も今後確認していきたいと思います。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?