Kubernetes/Kubernetes Advanced

📌 [CronJob 심화편 #1] CronJob의 시간 설정 전략: 정확한 스케줄링을 위한 Cron 표현식 가이드

ygtoken 2025. 3. 25. 17:09
728x90

 

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 필드를 활용하면 더욱 정확한 스케줄링이 가능합니다.

 

728x90