728x90
1️⃣ 개요
Job 리소스를 구성할 때 많이 사용되는 두 가지 설정이 있습니다:
- backoffLimit: 실패 시 재시도 횟수
- activeDeadlineSeconds: Job 전체 실행의 최대 허용 시간
이 두 옵션은 비슷해 보이지만 완전히 다른 기준으로 Job의 생존을 제어합니다.
이 글에서는 두 항목의 차이점과 함께, 실제 운영 환경에서 어떻게 조합하는 것이 효과적인지 전략적으로 설명합니다.
2️⃣ 두 설정의 차이 정리
항목 | backoffLimit | activeDeadlineSeconds |
기준 | 실패 횟수 | 실행 시간 |
작동 대상 | 실패한 Pod 기준 | Job 전체 기준 |
목적 | 최대 재시도 횟수 제한 | 무한 실행 방지 (타임아웃) |
기본값 | 6 | 없음 (무제한) |
제어 방법 | 실패마다 1회 증가 | Job 생성 시부터 시간 카운트 |
✅ 두 설정은 병렬로 작동하며, 먼저 도달한 조건이 Job을 종료시킵니다.
3️⃣ 예제: 둘 다 설정된 Job
apiVersion: batch/v1
kind: Job
metadata:
name: retry-time-limit-job
spec:
backoffLimit: 3 # 최대 재시도 횟수는 3번
activeDeadlineSeconds: 120 # Job 전체 실행 제한은 120초
template:
spec:
restartPolicy: OnFailure # 실패한 Pod은 재시작
containers:
- name: fail-always
image: busybox
command:
- sh
- -c
- |
echo "🚨 실패 유도 중..."; exit 1 # 강제 실패
📌 설명
- Pod은 항상 실패하며, 최대 3회까지만 재시도됩니다.
- 단, 120초 안에 모든 재시도가 끝나지 않으면 시간 제한으로 종료됩니다.
4️⃣ 동작 흐름 정리
[Job 시작 (T0)]
↓
[1회 실패 → 재시도 1]
↓
[2회 실패 → 재시도 2]
↓
[3회 실패 → 재시도 3]
↓
[backoffLimit 도달 → Job 상태: Failed]
또는 아래 상황도 가능:
[Job 시작]
↓
[반복 재시도 중 시간이 초과됨]
↓
[activeDeadlineSeconds 도달 → Job 상태: Failed]
✅ 어떤 조건이 먼저 만족되었느냐에 따라 Job은 종료 방식이 달라집니다.
5️⃣ 운영에서의 조합 전략
목적 | 추천 조합 |
단기 작업 실패 허용 + 과도한 실행 방지 | backoffLimit: 3, activeDeadlineSeconds: 180 |
외부 시스템 불안정에 따른 반복 시도 허용 | backoffLimit: 6~10, activeDeadlineSeconds는 상황에 따라 |
배치성 작업 제한 (자원 점유 방지) | 낮은 activeDeadlineSeconds (예: 300) |
6️⃣ 상태 확인 명령어
kubectl describe job retry-time-limit-job
출력 예시:
Warning BackoffLimitExceeded Job has reached the specified backoff limit
또는
Warning DeadlineExceeded Job was active longer than specified deadline
📌 메시지를 통해 어떤 조건이 Job을 종료시켰는지 알 수 있습니다.
7️⃣ 종료 후 로그 확인
kubectl get pods --selector=job-name=retry-time-limit-job
kubectl logs <pod-name>
✅ Job이 실패한 경우에도 관련 Pod 로그를 통해 원인을 분석할 수 있습니다.
단, ttlSecondsAfterFinished 값이 설정되어 있으면 일정 시간 후 Pod이 사라질 수 있으니 주의해야 합니다.
🔥 8️⃣ 결론
✔ backoffLimit은 실패 회수 제한, activeDeadlineSeconds는 전체 실행 시간 제한이라는 차이를 갖습니다.
✔ 두 설정은 병행 적용할 수 있으며, 상황에 따라 적절히 조합하는 것이 중요합니다.
✔ 특히 장기 실행 Job이나 외부 연동 실패 가능성이 있는 작업에 대해 신중한 설정이 필요합니다.
728x90
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [Job 심화편 #4] Job의 completions, parallelism 조합을 통한 병렬 처리 패턴 구성 (0) | 2025.03.25 |
---|---|
📌 [Job 심화편 #3] Job 실행 중 Node 장애 시 복구 시나리오 분석 (0) | 2025.03.25 |
📌 [Job 심화편 #1] Job 리소스의 실행 보장 방식: Pod 실패 대비 전략과 재시도 설정 (0) | 2025.03.22 |
📌 [DaemonSet 심화편 #24] DaemonSet의 ReplicaSet과의 차이점 분석: 운영 구조와 스케줄링 비교 (0) | 2025.03.22 |
📌 [DaemonSet 심화편 #23] DaemonSet과 Metrics Server 연동을 통한 노드 리소스 수집 방식 (0) | 2025.03.22 |