들어가며
- 우리는 일정한 시간에 반복 적인 작업이 수행되길 원할 수 있습니다.
- 이러한 작업을 지원하는 것이 cronjob입니다.
- cronjob에 대한 사용 방법을 알아보겠습니다.
cronjob에 대해 알아보자
cronjob은 사용자가 원하는 시간에 job이 실행되도록 하는 작업 예약을 지원합니다.
1분마다 현재 시간과 Hello fron the Kubernetes cluster 메시지를 출력해 보겠습니다.
apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: schedule: "* * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox imagePullPolicy: IfNotPresent command: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster volumeMounts: - mountPath: /etc/localtime:ro name: time restartPolicy: OnFailure volumes: - hostPath: path: /etc/localtime name: time
위 내용을 cronjob.yaml로 저장합니다.
그 후 yaml파일을 apply하면, cronjob이 생성됩니다.
kubectl apply -f cronjob.yaml cronjob.batch/hello created kubectl get cj NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE hello * * * * * False 1 8s 9s
1분마다 job이 실행되는 것을 확인할 수 있습니다.
kubectl get jobs NAME COMPLETIONS DURATION AGE hello-1663566840 1/1 2s 64s hello-1663566900 1/1 2s 4s
job에게 명시한 작업이 정상적으로 수행되고 있는지 확인해보겠습니다.
kubectl get po | grep hello hello-1663566840-2hprg 0/1 Completed 0 100s hello-1663566900-wvfwq 0/1 Completed 0 40s
kubectl logs <pod name> kubectl logs hello-1663566900-wvfwq Mon Sep 19 14:55:08 KST 2022 Hello from the Kubernetes cluster
실제 pod의 로그를 보니, 현재 시간과 메시지가 잘 출력 되고 있습니다.
그렇다면, cronjob에 일정을 설정하는 방법에 대해 알아보겠습니다.
# ┌───────────── minute (0 - 59) # │ ┌───────────── hour (0 - 23) # │ │ ┌───────────── day of the month (1 - 31) # │ │ │ ┌───────────── month (1 - 12) # │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday; # │ │ │ │ │ 7 is also Sunday on some systems) # │ │ │ │ │ OR sun, mon, tue, wed, thu, fri, sat # │ │ │ │ │ # * * * * * |
위와 같이 cronjob에 일정을 설정할 때에는, 분 시 일 월 요일 순서로 설정합니다.
예를 들어, 하루에 한번 자정에 실행되도록 하려면 spec.schedule에 0 0 * * * 으로 작성할 수 있습니다.
마무리
- cronjob은 scheduling되는 시점에 job을 생성합니다.
- job은 그 job이 대표하는 pod를 관리하게 됩니다.
- cronjob 실행시간 설정은 여기를 확인해주세요.
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.