backend/kubernetes in action

[kubernetes in action] 4-6. Scheduling Jobs to run periodically or once in the future

seul chan 2020. 5. 31. 21:34

ch4. Replication and other controllers: deploying managed pods

4.6. Scheduling Jobs to run periodically or once in the future

소챕터들

Job resource는 생성되자마자 즉시 pod를 실행시킨다. 하지만 이들을 미래 특정 시간에 실행시키거나 반복적으로 실행시킬 일이 있을 수 있다.

Kubernetes의 cron job은 CronJob resource로 생성 가능하다.

Creating a CronJob

15분마다 작동하는 batch job이 필요하다고 상상해보자.

cronjob.yaml을 만들고 CronJob resource를 만들어보자

apiVersion: batch/v1beta1                  1

kind: CronJob
metadata:
  name: batch-job-every-fifteen-minutes
spec:
  schedule: "0,15,30,45 * * * *"           2
  jobTemplate:
    spec:
      template:                            3
        metadata:                          3
          labels:                          3
            app: periodic-batch-job        3
        spec:                              3
          restartPolicy: OnFailure         3
          containers:                      3
          - name: main                     3
            image: luksa/batch-job         3
  • 2: spec.schedule로 일반 형태의 cron schedule을 추가하면 된다
    1. CronJob이 생성할 pod template
$ kubectl create -f cronjob.yaml
cronjob.batch/batch-job-every-fifteen-minutes created

$ kubectl get cj
NAME                              SCHEDULE             SUSPEND   ACTIVE   LAST SCHEDULE   AGE
batch-job-every-fifteen-minutes   0,15,30,45 * * * *   False     0        <none>          15s

Understanding how scheduled jobs are run

Job이나 pod가 생성되었지만 늦게 실행되는 경우가 있을 수 있다. 이런 경우를 위해서 startingDeadlineSeconds를 추가할 수 있다.

apiVersion: batch/v1beta1
kind: CronJob
spec:
  schedule: "0,15,30,45 * * * *"
  startingDeadlineSeconds: 15           1
  ...

이 경우 15초가 지날때 까지 실행이 되지 않으면 실패한 것으로 간주된다.

4.6. Scheduling Jobs to run periodically or once in the future

Job resource는 생성되자마자 즉시 pod를 실행시킨다. 하지만 이들을 미래 특정 시간에 실행시키거나 반복적으로 실행시킬 일이 있을 수 있다.

Kubernetes의 cron job은 CronJob resource로 생성 가능하다.

Creating a CronJob

15분마다 작동하는 batch job이 필요하다고 상상해보자.

cronjob.yaml을 만들고 CronJob resource를 만들어보자

apiVersion: batch/v1beta1                  1

kind: CronJob
metadata:
  name: batch-job-every-fifteen-minutes
spec:
  schedule: "0,15,30,45 * * * *"           2
  jobTemplate:
    spec:
      template:                            3
        metadata:                          3
          labels:                          3
            app: periodic-batch-job        3
        spec:                              3
          restartPolicy: OnFailure         3
          containers:                      3
          - name: main                     3
            image: luksa/batch-job         3
  • 2: spec.schedule로 일반 형태의 cron schedule을 추가하면 된다
    1. CronJob이 생성할 pod template
$ kubectl create -f cronjob.yaml
cronjob.batch/batch-job-every-fifteen-minutes created

$ kubectl get cj
NAME                              SCHEDULE             SUSPEND   ACTIVE   LAST SCHEDULE   AGE
batch-job-every-fifteen-minutes   0,15,30,45 * * * *   False     0        <none>          15s

Understanding how scheduled jobs are run

Job이나 pod가 생성되었지만 늦게 실행되는 경우가 있을 수 있다. 이런 경우를 위해서 startingDeadlineSeconds를 추가할 수 있다.

apiVersion: batch/v1beta1
kind: CronJob
spec:
  schedule: "0,15,30,45 * * * *"
  startingDeadlineSeconds: 15           1
  ...

이 경우 15초가 지날때 까지 실행이 되지 않으면 실패한 것으로 간주된다.