🛠️ CronJob이란?
CronJob은 지정한 스케줄에 따라 Job을 생성하여 실행하는 컨트롤러입니다. 우리는 반복 주기만 설정해두면, CronJob이 정해진 시간이 될 때마다 새로운 Job 인스턴스를 자동으로 생성하여 실행해 줍니다.
✅ 핵심 개념: “정해진 시간마다 자동으로 실행되는 Job”
즉, CronJob은 스케줄 관리자이고, 실제 작업 수행은 내부적으로 생성되는 Job이 담당하는 구조입니다.
CronJob (스케줄 관리)
↓ (정해진 시간에 생성)
Job (단일 작업 실행 및 재시도)
↓ (실행)
Pod (실제 컨테이너 실행)
🧠 사용 사례
CronJob은 자동화된 운영 및 유지보수 작업에 매우 유용하게 사용됩니다.
- 정기적인 백업: 매일 자정 데이터베이스 스냅샷 생성
- 로그 정리 및 아카이빙: 매주 오래된 로그 파일 정리
- 캐시 초기화: 매시간 특정 캐시 데이터 무효화
- 리포트 생성 및 발송: 매일 아침 통계 리포트를 생성하여 이메일로 발송
- 상태 점검 및 알림: 매분 시스템 상태를 점검하고 이상 시 알림 전송
🧪 CronJob YAML 예시
매 5분마다 “Hello from CronJob” 메시지를 출력하는 Job을 생성하는 CronJob 예시입니다.
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cron
spec:
# 이 부분이 핵심: CRON 스케줄 정의
schedule: "*/5 * * * *"
# 이 아래는 Job의 템플릿
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo", "Hello from CronJob"]
restartPolicy: OnFailure
📌 위 CronJob YAML의 포인트:
schedule: "*/5 * * * *"
: Cron 표현식으로, “매 5분마다” 작업을 실행하라고 정의합니다.jobTemplate
: CronJob이 정해진 시간이 되었을 때 생성할 Job의 명세서입니다. 이 템플릿의 내용은 우리가 이전에 배운 Job의spec
과 동일합니다.
🧮 schedule
필드 (CRON 문법)
CronJob의 핵심인 schedule
필드는 표준 CRON 문법을 따릅니다.
* * * * *
| | | | |
| | | | └─ 요일 (0-6, 일요일=0 또는 7)
| | | └─── 월 (1-12)
| | └───── 일 (1-31)
| └─────── 시 (0-23)
└───────── 분 (0-59)
📌 몇 가지 유용한 예시:
"0 0 * * *"
: 매일 자정 (0시 0분)"0 */6 * * *"
: 6시간마다 (0시, 6시, 12시, 18시)"30 9 * * 1"
: 매주 월요일 오전 9시 30분
⚙️ 주요 설정 옵션
CronJob의 동작을 세밀하게 제어할 수 있는 유용한 옵션들입니다.
startingDeadlineSeconds
: 정해진 시간에 어떤 이유로든 Job이 시작되지 못했을 때, 이 시간(초)을 초과하면 해당 작업을 건너뛰고 실패 처리합니다. (예: 100)concurrencyPolicy
: 이전 작업이 아직 끝나지 않았을 때 다음 작업 시간이 되면 어떻게 할지 결정합니다.Allow
(기본값): 상관없이 새 Job을 실행합니다. (동시 실행 가능)Forbid
: 이전 Job이 끝나지 않았으면 새 Job을 실행하지 않고 건너뜁니다.Replace
: 실행 중인 이전 Job을 중단시키고 새 Job으로 대체합니다.
successfulJobsHistoryLimit
: 성공한 Job 기록을 몇 개까지 보존할지 정합니다. (기본값: 3)failedJobsHistoryLimit
: 실패한 Job 기록을 몇 개까지 보존할지 정합니다. (기본값: 1)
히스토리 제한 설정은 오래된 Job과 Pod가 클러스터에 불필요하게 쌓이는 것을 방지하여 깔끔한 환경을 유지하는 데 중요합니다.
✅ 개발자 관점 요약
• CronJob은 시간 기반으로 반복 실행이 필요한 작업을 위한 컨트롤러입니다.
• 반복 주기를 표준 CRON 문법으로 선언하여 스케줄을 관리합니다.
• 내부적으로 Job을 생성하여 작업을 수행하므로, Job의 안정적인 실행 및 재시도 기능을 그대로 활용할 수 있습니다.
• 정기적인 로그 정리, 데이터 백업, 통계 리포트 생성 등 자동화된 운영 작업에 매우 적합합니다.