0
0

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 1 year has passed since last update.

CronJobで決まった時間のみにJob実行させたいときにはstartingDeadlineSecondsが必要

Posted at

まとめ

  • CronJobがJobが生成出来ない場合(Masterがdownしていた,suspend=trueなど)にしていた場合、デフォルトではJobが生成出来るようになったときに再実行されてしまう。
  • しかし、深夜・早朝バッチなど実行してもよい時間帯が限定されているときにJobが実行されてしまうと困る。
  • Jobを実行が出来る時間帯の範囲指定が必要な場合にはstartingDeadlineSecondsを設定して、Jobを生成してもよい時間を限定する必要がある

実験

  • KubernetesのCronJobのサンプルを利用して実験します。

    • 環境はminikube v1.8.2,kubernetes v1.14を利用
  • application/job/cronjob.yaml


apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
  • 一分毎にechoをするCronJobです。

  • まずはapply

kubectl get cronjob
NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        <none>          24s
  • JobとPodの実行状況を確認する
  • Job
kubectl get job
NAME               COMPLETIONS   DURATION   AGE
hello-1585028460   1/1           5s         70s
hello-1585028520   1/1           4s         10s
  • Pod
kubectl get po
NAME                     READY   STATUS      RESTARTS   AGE
hello-1585028460-kw8lh   0/1     Completed   0          84s
hello-1585028520-wqqc9   0/1     Completed   0          24s
  • 無事一分毎に実行されています。

  • Jobのsuspendをする。

  • CronJobではsuspendというパラメーターをfalseにすることで、CronJobの実行を一時止めることが出来ます。suspendを利用することでCronJobがJobを生成出来ない状態を再現します。

kubectl patch cronjob hello -p '{"spec":{"suspend":true}}'
cronjob.batch/hello patched
  • ここから待ってからsuspendをfalseに戻して、Jobが実行出来る状況に変更します。
  • 数分経過
kubectl get cronjob
NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   True      0        4m              13m
  • suspend=falseにする。
kubectl patch cronjob hello -p '{"spec":{"suspend":false}}'
cronjob.batch/hello patched
  • jobの実行状況を確認
k get job
NAME               COMPLETIONS   DURATION   AGE
hello-1585108380   1/1           9s         70m # suspend=true前に作ったやつ
hello-1585112580   1/1           6s         6s  # suspend=falseにしたらすぐ実行される
  • startingDeadlineSeconds: 300 を追記します。

参考資料

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?