목차
- CronJob이란?
- CronJob이 필요한 이유
- 기본 구조와 동작 방식
- Job vs CronJob 비교
- 기본 YAML 구성 예제
- 스케줄 표현식(Cron 식) 이해하기
- 실행 이력 관리(JobHistoryLimit)
- ConcurrencyPolicy & RestartPolicy
- 실전 사용 시나리오
- 운영 시 주의사항 및 팁
- 자주 묻는 질문 (FAQ)
- 요약 정리
1. CronJob이란?
Kubernetes CronJob은 정해진 일정에 따라 Job을 자동으로 실행하도록 설계된 컨트롤러입니다.
리눅스 crontab처럼, 특정 작업을 주기적으로 자동 실행하며 백업, 로그 정리, 데이터 수집 등에 활용됩니다.
2. 왜 CronJob이 필요한가?
일회성 실행 이후 자동으로 종료되는 Job과 달리, 반복적인 작업을 자동으로 수행해야 하는 경우에 유용합니다:
- 매일 자정 DB 백업
- 매시간 로그 압축 및 업로드
- 정리 작업, 통계 집계, 알림 발송 등
표준 Job을 매번 수동 실행하면 번거롭고 실수 가능성이 높으며 자동 관리도 어렵습니다.
3. CronJob의 주요 구성과 동작
CronJob은 다음 단계를 자동으로 수행합니다:
schedule
에 정의된 시간에 Job 생성- 정의된 Job이 실행되고 완료되면 삭제 여부 결정
- 과거 실행 이력을
successfulJobsHistoryLimit
,failedJobsHistoryLimit
필드로 관리
4. Job vs CronJob 비교
항목 | Job | CronJob |
---|---|---|
실행 종류 | 단발성 작업 | 정기 반복 작업 |
실행 조건 | 수동 실행 | schedule(스케줄)에 따라 자동 생성 |
이력 관리 | 별도 설정 없음 | 성공/실패 이력 자동 관리 |
사용자 시나리오 | 마이그레이션, 수동 처리 | 백업, 로그 정리, 스케줄링된 배치 처리 |
5. CronJob 기본 YAML 예제
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-backup
spec:
schedule: "0 0 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: my-backup-image:latest
command: ["/bin/sh", "-c", "echo Backup started; sleep 30; echo Backup completed"]
restartPolicy: OnFailure
successfulJobsHistoryLimit: 7
failedJobsHistoryLimit: 3
concurrencyPolicy: "Forbid"
6. Cron 식 (schedule) 표현 이해
* * * * *
: 분, 시, 일, 월, 요일 순서로 표현0 0 * * *
: 매일 자정 실행*/15 * * * *
: 15분 단위로 실행0 6 * * MON
: 매주 월요일 오전 6시 실행
중요: 리눅스 cron 형식과 동일하므로 관리 도구 없이 바로 이해 가능
7. 실행 이력 관리
successfulJobsHistoryLimit
: 성공한 Job의 이력 보존 수failedJobsHistoryLimit
: 실패한 Job의 이력 보존 수
이력관리는 디스크 과부하 방지 및 상황 추적에 매우 중요합니다.
8. ConcurrencyPolicy & RestartPolicy
concurrencyPolicy
:"Allow" | "Forbid" | "Replace"
"Allow"
: 이전 Job이 실행 중이더라도 동시에 실행 가능"Forbid"
: 이전 Job이 실행 중일 경우 새로운 Job 생성 금지"Replace"
: 이전 Job 중단 후 새로운 Job 시작
restartPolicy
:"OnFailure"
또는"Never"
적용 예시:
concurrencyPolicy: "Forbid"
restartPolicy: OnFailure
9. 실전 사용 시나리오
- 일일 DB 스냅샷: 백업 파일 및 S3 업로드
- 로그 압축 & 전송: 자동 압축 후 로그 서버 전송
- 데이터 통계 집계: 배치 방식으로 통계 계산
- 자동 리소스 정리: 오래된 로그/오브젝트 삭제
각 스크립트는 컨테이너 내부에서 실행되며 CronJob이 자동 트리거합니다.
10. 운영 중 주의사항 및 팁
- 시간대(Timezone)에 주의: 클러스터 노드가 UTC 기반일 수 있음
- 로깅:
kubectl logs <pod>
로 실행 결과 확인 - 리소스 조절: Job 실행 시 CPU/메모리 리소스 지정 권장
- 장애 대응: CronJob 실패 시 관리자 알림 설정
11. 자주 묻는 질문 (FAQ)
Q1. CronJob이 실패하면 자동으로 재시작되나요?
→ RestartPolicy와 concurrencyPolicy에 따라 자동 재실행 또는 무시 가능
Q2. CronJob에서 Job이 중첩 실행되면 어떻게 되나요?
→ Forbid
: 겹치는 Job 생성 금지, Replace
: 중단하고 다시 시작, Allow
: 겹침 허용
Q3. CronJob의 Job 이력을 모두 지우려면?
→ successfulJobsHistoryLimit
, failedJobsHistoryLimit
값을 0으로 설정하거나, kubectl delete jobs --all
.
12. 요약 정리
항목 | 설명 |
---|---|
목적 | 정해진 스케줄에 따라 자동 Job 실행 |
설정 필수 항목 | schedule , jobTemplate , 정책 관련 필드 |
운영 팁 | 시간대, 리소스 명시, 이력 관리 등 |
장애 대응 전략 | 실패 이력 확인, 컨커런시 정책 활용 |
'개발 창고 > Server' 카테고리의 다른 글
Kubernetes Secret: 민감 정보 안전하게 관리하기 (2) | 2025.08.09 |
---|---|
Kubernetes Job: 완전 종료 보장형 일회성 작업 관리 (3) | 2025.08.08 |
Kubernetes Secret 완전 정복 : 민감한 데이터를 안전하게 저장하고 관리하는 방법 (2) | 2025.08.06 |
Kubernetes Job 완전 정복 (1) | 2025.08.05 |
Kubernetes DaemonSet 완전 정복: 모든 노드에 Pod를 자동 배포하는 방법 (6) | 2025.08.04 |