•
CronJob은 주기적으로 특정 동작을 수행하고 종료하는 작업(배치 작업)을 정의하기 위한 리소스이다.
•
리눅스 크론(Cron) 스케쥴링 방법을 그대로 사용한다.
•
내부적으로 Job을 생성하여 작업을 수행한다. (그리고 Job은 내부적으로 Pod를 만든다.)
•
주기적으로 데이터를 백업하거나 데이터 점검 및 알림 전송 등의 목적으로 사용한다.
•
cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-every-minute
spec:
schedule: "*/1 * * * *"
successfulJobsHistoryLimit: 5
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: hello
image: ubuntu:focal
command: ["sh", "-c", "echo Hello $(date)!"]
Shell
복사
•
jobTemplate이 template을 감싸고 있음을 알 수 있다. CronJob은 바로 Pod를 감쌀 수 없다는 것이다. 즉, CronJob은 Job을 감싸야하고 Job이 Pod를 감싸는 형태여야한다.
◦
Deployment가 ReplicasSet을 wrapping하고 ReplicaSet이 Pod를 wrapping하는 것처럼, CronJob이 Job을 wrapping하고 Job이 Pod를 wrapping하는 방식을 비슷한 원리로 볼 수 있다.
•
schedule은 cron 표현식이 들어가게 된다. "/1 * *" 는 매 1분마다 CronJob을 실행시키라는 의미이다.
•
successfulJobsHistoryLimit 옵션도 주었는데, 성공한 Job 기록을 최대 5개 남기라는 의미이다.


