Kubernetes/Kubernetes Advanced

📌 [Job 심화편 #7] Job의 CronJob 전환 전략: 반복성 여부에 따른 리소스 선택 기준

ygtoken 2025. 3. 25. 16:05
728x90

 

1️⃣ 개요

 

Kubernetes에서는 일회성 작업Job,

주기적으로 반복 실행되는 작업CronJob 리소스를 통해 실행할 수 있습니다.

 

하지만 아래와 같은 상황에서 혼란이 생길 수 있습니다:

주기적 실행이 필요한데 Job을 계속 수동 생성하고 있음

반복성이 없는 작업인데 CronJob으로 구성됨

반복 실행 중 일부 작업이 누락되거나 중복 실행됨

 

이 글에서는 Job과 CronJob의 선택 기준과 함께,

Job을 CronJob으로 전환할 때 고려해야 할 전략을 설명합니다.

 


2️⃣ 리소스 선택 기준 비교

항목 Job CronJob
목적 한 번만 실행되는 작업 반복적으로 실행되는 작업
실행 방식 수동 생성 또는 자동화 도구로 실행 일정(schedule)에 따라 자동 실행
실패 시 대응 재시도 횟수 설정 필요 Job 내부 설정 또는 CronJob 컨트롤러에 의존
대표 예시 일회성 마이그레이션, DB 초기화 매시간 백업, 매일 리포트 생성

✅ 반복성이 명확하게 존재한다면 CronJob이 더 적합합니다.

 


3️⃣ 기존 Job을 CronJob으로 전환하는 기본 템플릿

apiVersion: batch/v1
kind: CronJob
metadata:
  name: scheduled-task                        # CronJob 이름
spec:
  schedule: "0 * * * *"                       # 매 시간 정각 실행
  jobTemplate:
    spec:
      backoffLimit: 3                         # 실패 시 최대 3회 재시도
      ttlSecondsAfterFinished: 600            # 완료된 Job 10분 후 삭제
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: hourly-job
              image: busybox
              command:
                - sh
                - -c
                - |
                  echo "⏰ 반복 작업 실행 중"; sleep 10

📌 설명 요약

schedule: Cron 형식으로 반복 주기를 정의

jobTemplate: CronJob이 생성하는 Job의 정의

실행 실패 시 재시도 가능하며, 작업 후 자동 삭제 설정도 가능

 


4️⃣ 주기 설정 예시 (Cron 형식)

스케줄 표현 설명
*/5 * * * * 5분마다 실행
0 0 * * * 매일 00:00 실행
0 3 * * 1 매주 월요일 오전 3시
30 22 * * * 매일 밤 10시 30분

📝 crontab guru 등을 사용하면 형식을 쉽게 검증할 수 있습니다.

 


5️⃣ 상태 확인 및 Job 생성 확인

kubectl get cronjob
kubectl get jobs --watch

📌 CronJob이 실행되면 해당 시점에 Job 리소스가 생성되고,

Job이 실행되며 Pod이 생성되어 작업을 수행합니다.

 


6️⃣ Job에서 CronJob으로 전환 시 고려 사항

항목 설명
반복 주기 주기 설정이 명확한가? (없다면 Job 유지)
작업 중복 허용 여부 concurrencyPolicy로 제어 가능
실패 대응 Job 템플릿의 backoffLimit, deadline 설정 필요
로그 수집 주기적 Job 로그를 누적 관리할 수 있는 구조 필요

예: concurrencyPolicy: Forbid를 설정하면 이전 실행이 끝나기 전에는 다음 실행을 건너뜀

 


7️⃣ Job → CronJob 전환 체크리스트

 

✅ 이 작업은 반복되어야 하는가?

✅ 실행 주기는 명확하게 정해져 있는가?

✅ 이전 작업이 끝나지 않았을 때의 정책은 무엇인가?

✅ 완료된 작업 로그는 어떻게 수집하고 보관할 것인가?

 


🔥 8️⃣ 결론

 

✔ Job은 단발성 작업에 적합하고, CronJob은 주기성을 가진 작업에 특화된 리소스입니다.

✔ 주기성이 확인되는 Job은 CronJob으로 전환하여 자동화와 관리 효율을 높이는 것이 좋습니다.

✔ 전환 시에는 반복 주기, 동시성 정책, 로그 관리 등의 요소를 함께 고려해야 합니다.

 

728x90