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으로 전환하여 자동화와 관리 효율을 높이는 것이 좋습니다.
✔ 전환 시에는 반복 주기, 동시성 정책, 로그 관리 등의 요소를 함께 고려해야 합니다.
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [CronJob 심화편 #1] CronJob의 시간 설정 전략: 정확한 스케줄링을 위한 Cron 표현식 가이드 (0) | 2025.03.25 |
---|---|
📌 [Job 심화편 #8] Job 리소스와 ConfigMap/Secret 연동 전략: 실행 환경 외부화 구성 (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 |