[MacOS 환경 #5] 쿠버네티스 CronJob으로 자동 작업 스케줄링하기

도람·2025년 11월 12일

크론잡(CronJob)

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

코드 해설

항목설명
apiVersionbatch/v1 (잡 관련 리소스는 batch API 그룹에 속함)
kindCronJob (주기적 Job 실행용 리소스)
schedule실행 주기 (crontab 형식: 분 시 일 월 요일)
jobTemplate실제 실행될 Job의 템플릿 정의
restartPolicy실패 시만 재시작 (OnFailure)
  • apiVersion
    batch/v1 — 잡 관련 리소스는 batch API 그룹에 포함된다.

  • kind
    리소스의 종류를 지정한다. 여기서는 CronJob.

  • metadata.name
    리소스의 이름이다. (hello-cron)

  • spec.schedule
    실행 주기를 지정한다. (crontab 문법)

    • "/1 * * *" → 매 1분마다 실행
    • "0 3 * * *" → 매일 새벽 3시 실행
  • jobTemplate
    실제 실행될 Job의 템플릿을 정의한다.

  • containers
    실행할 컨테이너를 정의한다.

    • 여기서는 busybox 이미지 사용
    • /bin/sh -c "echo ..." 명령어를 실행
  • 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실패 시 재시작 여부 설정

실습

yaml 파일 만들기

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 라는 크론잡이 삭제된 것을 확인할 수 있다.


(선택) 남아 있는 Job과 Pod도 깔끔히 정리

크론잡 때문에 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를 활용해 재구성하였습니다.
본 포스트는 학습용 예시로 작성되었습니다.

profile
정도를 걷는 엔지니어

0개의 댓글