Kubernetes/Kubernetes Advanced

📌 [Job 심화편 #1] Job 리소스의 실행 보장 방식: Pod 실패 대비 전략과 재시도 설정

ygtoken 2025. 3. 22. 21:20
728x90

1️⃣ 개요

Kubernetes에서 Job 리소스는 일회성 작업 또는 반복 불필요한 처리 작업을 위해 사용됩니다.
하지만 Pod이 중간에 실패하거나, 예외 상황이 발생했을 때 Job이 실패로 끝나지 않도록 구성하는 전략이 중요합니다.

이번 글에서는 Job 리소스가 Pod 실패 상황에서 어떻게 반응하는지, 그리고
성공 보장을 위한 재시도 설정 방법에 대해 자세히 살펴보겠습니다.


2️⃣ Job 기본 개념 요약

항목 설명
목적 1회성 또는 완료 시 종료되는 작업 실행
기본 Pod 수 1개
완료 기준 지정된 수의 completions 도달 시
실패 대응 기본적으로 실패한 Pod은 자동 재시도되지 않음 (명시 필요)

✅ 즉, Job을 신뢰성 있게 구성하려면 명시적으로 재시도 조건을 설정해야 합니다.


3️⃣ 재시도 전략 설정 항목들

설정 항목 설명 기본값
backoffLimit 실패 시 재시도 가능한 횟수 6
restartPolicy 실패한 Pod을 재시작할지 여부 (Never, OnFailure) Never
activeDeadlineSeconds 최대 실행 시간 제한 (초) 없음
ttlSecondsAfterFinished 완료된 Job 리소스를 자동으로 정리할 시간 없음

4️⃣ 예제: 실패 시 재시도 설정이 적용된 Job

apiVersion: batch/v1
kind: Job
metadata:
  name: retry-job                        # Job 이름 지정
spec:
  backoffLimit: 4                        # 최대 4번까지 재시도 허용
  activeDeadlineSeconds: 300            # 전체 실행 시간이 5분을 초과하면 종료
  template:
    spec:
      restartPolicy: OnFailure          # 실패 시 재시작
      containers:
        - name: fail-job
          image: busybox
          command:
            - sh
            - -c
            - |
              echo "🧪 테스트 실행 중";
              exit 1                    # 일부러 실패하여 재시도 조건을 테스트

📌 설명 요약

  • exit 1로 인해 Pod은 실패 상태가 되며, 최대 4번까지 재시도됩니다.
  • 5분 내에 Job이 성공하지 않으면 activeDeadlineSeconds에 의해 강제 종료됩니다.

5️⃣ 재시도 동작 흐름

[Job 생성]
   ↓
[Pod 실행 → 실패 (exit 1)]
   ↓
[1회 재시도] → 실패
   ↓
[2회 재시도] → 실패
   ↓
[최대 4회까지 반복]
   ↓
[모두 실패 시 Job 상태: Failed]

✅ backoffLimit을 넘기면 Job은 완전 실패(Failed) 상태가 됩니다.


6️⃣ 이벤트 확인 및 상태 점검

kubectl describe job retry-job

출력 예시 (일부):

Events:
  Warning  BackoffLimitExceeded  ...  Job has reached the specified backoff limit

✅ BackoffLimitExceeded 이벤트는 Job이 최대 재시도 횟수를 초과했음을 의미합니다.


7️⃣ 운영 시 고려사항

고려 항목 전략
너무 낮은 backoffLimit 일시적인 실패에도 Job 전체가 실패 처리됨
너무 높은 backoffLimit 영구적인 실패 Job이 오래 실행됨
실행 시간 제한 activeDeadlineSeconds로 전체 실행 시간 제한 가능
실패 로그 확인 kubectl logs <pod> 로 각 시도에 대한 로그 확인 필요

🔥 8️⃣ 결론

✔ Job은 기본적으로 실패한 Pod을 자동 재시도하지 않기 때문에, **재시도 설정(backoffLimit, restartPolicy)**이 중요합니다.
✔ Pod 실패를 감지하여 안정적으로 재시도하고, 너무 오래 실행되지 않도록 실행 시간 제한을 함께 설정하는 것이 바람직합니다.
✔ 설정된 값은 작업 특성에 따라 조절하여, Job 실패로 인한 업무 누락을 최소화할 수 있습니다.

 

728x90