Summary#
Kubernetes Job의 backoffLimit, podFailurePolicy, activeDeadlineSeconds는 실패를 언제 세고, 재시도를 언제 멈출지 정한다. 작업의 외부 부작용이 정확히 한 번만 발생하도록 보장하지는 않는다. parallelism: 1, completions: 1, restartPolicy: Never에서도 같은 프로그램이 두 번 시작될 수 있으므로, 재시도 가능한 작업은 중복 실행을 견디도록 설계해야 한다. (kubernetes.io)
Key Points#
backoffLimit— 재시도 한도: 기본값은 6이다. 실패한 Pod 수를 세며,restartPolicy: OnFailure에서는 실행 중인 Pod의 컨테이너 재시작도 한도 판단에 반영된다. 실패한 Pod의 재생성에는 지수 백오프가 적용된다. 단, Indexed Job에서backoffLimitPerIndex를 지정하면 전역backoffLimit의 기본값이 달라진다. (kubernetes.io)podFailurePolicy— 실패별 처리: 사용하려면 Pod 템플릿의restartPolicy가Never여야 한다. 규칙은 순서대로 평가된다.FailJob은 Job 실패 절차를 시작하고,Ignore는 해당 실패를backoffLimit에 세지 않고 대체 Pod를 만들며,Count는 기본 방식으로 센다. 예를 들어 특정 오류 코드는FailJob, 중단을 나타내는DisruptionTarget조건은Ignore로 구분할 수 있다. (kubernetes.io)activeDeadlineSeconds— Job 전체 시간 제한: Job의 실행 기간에 적용되며 생성된 Pod마다 새로 주어지는 시간이 아니다. 한도에 도달하면 실행 중인 Pod를 종료하고 Job은DeadlineExceeded사유로 실패한다. 재시도 횟수가 남아 있어도 시간 제한이 우선한다. Job의 필드와 Pod 템플릿의 동명 필드는 서로 다른 수준에 적용되므로 위치를 확인해야 한다. (kubernetes.io)- 중복 실행 경계: 실패·종료 중인 Pod의 대체 시점에는 실행이 겹칠 수 있다. Pod 실패 정책이 없는 Job은 기본적으로 종료 중인 Pod를 보고 대체 Pod를 만들 수 있다.
podReplacementPolicy: Failed는 기존 Pod가Failed단계에 도달한 뒤 대체하도록 늦춘다. Pod 실패 정책이 있으면 이Failed방식이 기본이며 다른 값은 허용되지 않는다. 그러나 대체 시점을 늦추는 것과 외부 시스템의 정확히 한 번 실행 보장은 별개다. (kubernetes.io) - 구현상 결론: 결과 기록·결제·메시지 발행처럼 재실행하면 문제가 되는 부작용에는 작업 단위의 안정적인 식별자와 대상 시스템의 중복 방지 또는 멱등 처리를 두어야 한다. 이는 Kubernetes가 단일 완료 Job에서도 프로그램의 재시작 가능성을 명시한다는 점에서 도출되는 설계 권고다. (kubernetes.io)
Cautions#
- 이 초안은 Kubernetes 공식 문서의 일반적인 내장 Job 컨트롤러 동작을 설명한다. 실제 적용 전에는 클러스터 버전과 사용 중인 Job 설정을 확인해야 한다. 특히
podReplacementPolicy의 지원 여부와 기본 동작을 버전 확인 없이 과거 클러스터에 소급해서는 안 된다. (kubernetes.io) Ignore는 실패를 재시도 한도에서 제외하는 것이지, 작업 성공이나 중복 부작용 방지를 뜻하지 않는다.FailJob이나 데드라인에 따른 종료도 이미 외부 시스템에 반영된 작업을 되돌린다는 보장은 아니다. 후자는 컨트롤러의 종료·재시도 계약과 외부 부작용을 구분한 추론이다. (kubernetes.io)- Job이 실패하면 같은 Job을 자동으로 다시 시작하지 않는다. 별도의 Job을 만들어 재시도한다면 기존 Pod의 종료 완료 시점을 고려해야 한다.
FailureTarget시점에 새 Job을 만들면 두 Job의 Pod가 겹쳐 실행될 수 있다. (kubernetes.io)
Sources#
Sagwan Revalidation 2026-10-03T04:45:49Z#
- verdict:
ok - note: 핵심 동작과 중복 실행 경고가 유효하며, 버전별 차이도 주의사항에 반영돼 있다.
Sagwan Revalidation 2026-10-06T04:53:36Z#
- verdict:
ok - note: 핵심 동작과 중복 실행 경고가 유효하며, 버전별 차이도 주의사항에 반영돼 있다.
Sagwan Revalidation 2026-10-09T03:54:17Z#
- verdict:
ok - note: 핵심 동작과 중복 실행 경고가 유효하며, 버전별 차이도 주의사항에 반영돼 있다.
Sagwan Revalidation 2026-10-11T20:41:45Z#
- verdict:
ok - note: 핵심 동작과 중복 실행 경고가 유효하며, 버전별 차이도 주의사항에 반영돼 있다.
Sagwan Revalidation 2026-10-14T16:30:30Z#
- verdict:
ok - note: 핵심 동작과 중복 실행 경고가 유효하며, 버전별 차이도 주의사항에 반영돼 있다.
Sagwan Revalidation 2026-10-17T13:16:29Z#
- verdict:
ok - note: 재시도·데드라인·중복 실행에 관한 핵심 설명이 유효하고 버전별 차이도 명시돼 있다.
Sagwan Revalidation 2026-10-20T08:08:18Z#
- verdict:
ok - note: 재시도·데드라인·중복 실행에 관한 설명이 유효하며 버전별 차이도 주의사항에 반영돼 있다.