apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cron
spec:
schedule: "*/1 * * * *" # 매 1분마다 실행 (crontab 문법)
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- echo "Hello Kubernetes from CronJob!"
restartPolicy: OnFailure
항목 설명 apiVersion batch/v1 (잡 관련 리소스는 batchAPI 그룹에 속함)kind CronJob (주기적 Job 실행용 리소스) schedule 실행 주기 (crontab 형식: 분 시 일 월 요일) jobTemplate 실제 실행될 Job의 템플릿 정의 restartPolicy 실패 시만 재시작 ( OnFailure)
apiVersion
batch/v1 — 잡 관련 리소스는 batch API 그룹에 포함된다.
kind
리소스의 종류를 지정한다. 여기서는 CronJob.
metadata.name
리소스의 이름이다. (hello-cron)
spec.schedule
실행 주기를 지정한다. (crontab 문법)
jobTemplate
실제 실행될 Job의 템플릿을 정의한다.
containers
실행할 컨테이너를 정의한다.
restartPolicy
실패한 경우에만 재시작하도록 설정 (OnFailure)
kubectl apply -f cronjob.yaml # CronJob 생성
kubectl get cronjobs # CronJob 목록 확인
kubectl get jobs # 생성된 Job 확인
kubectl get pods # Job으로 실행된 Pod 확인
kubectl logs <pod-name> # 로그 확인
개념 설명 Job 한 번만 실행되는 작업 CronJob 일정 주기로 반복 실행되는 Job schedule 실행 주기를 crontab 문법으로 지정 restartPolicy 실패 시 재시작 여부 설정
vim cronjob.yaml
원하는 경로에 가서 yaml 파일을 만든 후 해당 내용을 복사붙여넣기 한다.
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cron # 크론잡 이름
spec:
schedule: "*/1 * * * *" # 매 1분마다 실행 (crontab 형식)
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- echo "Hello Kubernetes from CronJob!"
restartPolicy: OnFailure # 실패 시 재시작
저장하고 나가기 (ESC -> !wq + Enter)

cat cronjob.yaml 해서 확인한 모습이다.
이제 만든 yaml 파일을 클러스터에 반영한다.
kubectl apply -f cronjob.yaml

그리고 1분마다 자동으로 job이 생성돼서 파드가 잠깐 떴다가 사라진다.
확인하려면
kubectl get pods
명령어를 쳐서 확인하는데, 확인하면


위처럼 1분마다 새로운 파드가 자동 생성되는 것을 확인할 수 있다.
kubectl get cronjobs
하면 현재 크론잡의 목록을 확인할 수 있다.
그 다음, 크론잡을 삭제해본다.

하면 hello-cron 라는 크론잡이 삭제된 것을 확인할 수 있다.
크론잡 때문에 1분마다 파드가 남아있는 상태이다.
kubectl get jobs
kubectl delete jobs --all
kubectl get pods
kubectl delete pods --all
이렇게 하면 이번 실습으로 생겼던 모든 Job과 Pod이 정리된다.
CronJob은 파드를 직접 만드는 게 아니라,
YAML 파일을 만들어서 kubectl apply -f로 등록하면 쿠버네티스가 주기적으로 Job과 Pod을 자동 생성·삭제한다.
저작권 문제를 방지하기 위해 공식 문서 내용을 참고하였으며, 일부 설명은 ChatGPT를 활용해 재구성하였습니다.
본 포스트는 학습용 예시로 작성되었습니다.