Kubernetes/Kubernetes Advanced

📌 [Job 심화편 #2] Job에서 BackoffLimit과 ActiveDeadlineSeconds의 차이점과 조합 전략

ygtoken 2025. 3. 22. 23:32
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