1️⃣ 개요
CronJob은 Kubernetes에서 주기적으로 실행되는 작업을 자동화하기 위한 리소스입니다.
작업의 반복 주기를 정의할 때 사용하는 방식이 바로 Cron 표현식입니다.
하지만 표현식의 오해, 잘못된 설정, 타임존 미반영 등으로 인해 원하지 않는 시간에 작업이 실행되거나 누락되는 경우가 자주 발생합니다.
이 글에서는 CronJob의 시간 설정을 정확히 이해하고, 표현식 작성과 운영 시 주의할 점을 다룹니다.
2️⃣ Cron 표현식의 구조
# 형식: 분 시 일 월 요일
# 예시: "0 3 * * 1" → 매주 월요일 오전 3시
필드 순서 | 의미 | 범위 |
분 (Minute) | 작업 실행 시각 (분 단위) | 0~59 |
시 (Hour) | 작업 실행 시각 (시 단위, 24시간제) | 0~23 |
일 (Day of Month) | 매월 며칠에 실행할지 | 1~31 |
월 (Month) | 몇 월에 실행할지 | 1~12 |
요일 (Day of Week) | 무슨 요일에 실행할지 (0=일요일) | 0~6 |
✅ 기본은 리눅스 Cron 표현식과 동일하며, Kubernetes는 UTC 기준으로 해석됩니다.
3️⃣ 주요 스케줄 예시 정리
표현식 | 실행 주기 | 설명 |
*/5 * * * * | 5분마다 | 모든 시간대에서 5분 간격 |
0 0 * * * | 매일 자정 | 매일 00:00 실행 |
0 9 * * 1-5 | 평일 오전 9시 | 월~금 09:00 실행 |
15 14 1 * * | 매월 1일 14:15 | 매월 1일 오후 2시 15분 |
0 22 * * 1 | 매주 월요일 밤 10시 | 특정 요일, 특정 시간 실행 |
📝 참고 사이트: https://crontab.guru
4️⃣ 타임존 주의 사항
Kubernetes CronJob은 기본적으로 UTC를 기준으로 동작합니다.
구성 요소 | 적용 방법 |
클러스터 타임존 변경 | 컨트롤 플레인 또는 노드의 시간대 설정 변경 |
Job 내에서 타임존 설정 | TZ 환경 변수 사용 또는 이미지 내 처리 |
Kubernetes 1.24+ | timeZone 필드 지원 (예: "Asia/Seoul") |
spec:
schedule: "0 3 * * *"
timeZone: "Asia/Seoul"
✅ timeZone 필드는 Kubernetes 1.24 이상에서만 동작합니다.
5️⃣ Cron 표현식 오류 방지 팁
항목 | 체크 포인트 |
간격 계산 | 5분마다 = */5 * * * * vs 매일 5분 = 5 0 * * * |
시간대 확인 | 한국 시간 기준이면 timeZone 또는 TZ 설정 필요 |
중복 실행 방지 | concurrencyPolicy: Forbid 설정 고려 |
누락 방지 | startingDeadlineSeconds 설정으로 지연된 실행 보완 가능 |
6️⃣ 예제 CronJob: 매일 09:30에 실행 (KST 기준)
apiVersion: batch/v1
kind: CronJob
metadata:
name: morning-report
spec:
schedule: "30 0 * * *" # UTC 기준 00:30 → KST 기준 09:30
timeZone: "Asia/Seoul" # Kubernetes 1.24+에서 사용 가능
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: reporter
image: busybox
command:
- sh
- -c
- echo "📊 매일 아침 보고서 생성 중..."
📌 설명 요약
• schedule: UTC 기준 00:30
• timeZone: Asia/Seoul → 한국 시간으로 해석됨
• Job이 매일 아침 09:30에 실행됩니다.
🔥 7️⃣ 결론
✔ CronJob의 핵심은 정확한 시간 표현과 타임존 인식입니다.
✔ 표현식의 구조를 명확히 이해하고, 반복 주기에 따라 정확한 시간대 변환과 정책 설정이 필요합니다.
✔ Kubernetes 1.24 이상에서는 timeZone 필드를 활용하면 더욱 정확한 스케줄링이 가능합니다.
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [Job 심화편 #8] Job 리소스와 ConfigMap/Secret 연동 전략: 실행 환경 외부화 구성 (0) | 2025.03.25 |
---|---|
📌 [Job 심화편 #7] Job의 CronJob 전환 전략: 반복성 여부에 따른 리소스 선택 기준 (0) | 2025.03.25 |
📌 [Job 심화편 #6] Job 리소스의 컨트롤러 상태 분석: 완료되지 않은 Job의 정리 기준 (0) | 2025.03.25 |
📌 [Job 심화편 #5] Job 로그 수집 전략: 실행 완료 후 로그 유실 방지하기 (0) | 2025.03.25 |
📌 [Job 심화편 #4] Job의 completions, parallelism 조합을 통한 병렬 처리 패턴 구성 (0) | 2025.03.25 |