Cronjob 사용하기

이 페이지는 Kubernetes 상에서 CronJob을 사용하는 방법에 대해 설명합니다.
Unix 계열의 서버 환경에서 Cron을 사용해 정기적인 배치 작업을 수행하는데 활용합니다.
하지만 Kubernetes 환경에서는 서버(Pod)가 언제든지 삭제되고 다시 생성 될 수 있습니다. 이 경우 설정한 Cron 설정도 초기화됩니다.
Kubernetes 상에서는 CronJob을 활용하여 정기적인 배치 작업에 활용할 수 있습니다. CronJob은 실행 시점에만 Pod를 생성해 자원을 사용하므로 매우 효율적입니다.
CronJob 배포하기
샘플 CronJob을 Kubernetes 클러스터에 배포합니다.
$ vi cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: sample-cron
spec:
schedule: '*/35 * * * *'
jobTemplate:
spec:
template:
spec:
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
args:
- /bin/sh
- -c
- date; echo "CronJob has been excuted successfully."
restartPolicy: OnFailure
$ kubectl apply -f cronjob.yaml
cronjob "sample-cron" created
CronJob에서는 Job을 생성하기 위한 jobTemplate spec 정의가 필요합니다. 또한 Job에는 Pod를 생성하기 위한 Pod spec 정의가 필요합니다.
CronJob에서는 Unix standard crontab format으로 schedule을 정의합니다.
- 첫 번째 값은 분을 의미합니다.(0~59 사이)
- 두 번째 값은 시간을 의미합니다.(0~23 사이)
- 세 번째 값은 일을 의미합니다.(1~31 사이)
- 네 번째 값은 월을 의미합니다.(1~12 사이)
- 다섯 번째 값은 주를 의미합니다.(0~6 사이)
스케줄에는 *
wildcard를 사용할 수 있습니다.
*/35 * * * *
는 매달, 매일 35분에 반복적으로 CronJob을 실행한다는 의미입니다.
CronJob 확인하기
아래 명령어를 실행하여 등록한 CronJob을 확인할 수 있습니다.
$ kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
sample-cron */35 * * * * False 0 <none> 4s
Schedule에 설정한 시간이 되면 아래와 같이 Job이 실행됩니다.
$ kubectl get jobs
NAME DESIRED SUCCESSFUL AGE
sample-cron-1529850900 1 1 24s
Job이 실행되면 Pod를 생성하고 정해진 작업을 수행합니다. Job이 생성한 Pod는 아래와 같이 조회할 수 있습니다.
$ kubectl get po -a
NAME READY STATUS RESTARTS AGE
sample-cron-1529850900-5hfzn 0/1 Completed 0 41s
Pod의 로그를 조회해 수행한 작업 내용을 확인할 수 있습니다.
$ kubectl logs -f sample-cron-1529850900-5hfzn
Sun Jun 24 14:35:06 UTC 2018
CronJob has been excuted successfully.