Job은 일정 횟수의 배치작업 성공을 보장하기 위해 사용하는 리소스이다. 좀 더 자세히 말하면, n개의 파드에서 각각 컨테이너를 띄워 일련의 프로세스를 병렬로 수행하고, 프로세스가 종료되면 정상종료/비정상종료 여부에 따라서 성공 횟수를 집계하고, 원하는 성공 횟수가 될 때 까지 반복하는 것이다.
1. 잡 생성
apiVersion: batch/v1
kind: Job
metadata:
name: sample-job
spec:
completions: 1
parallelism: 1
backoffLimit: 10
template:
spec:
containers:
- name: sleep-container
image: centos:7
command: ["sleep"]
args: ["60"]
restartPolicy: Never
위의 매니페스트로 잡을 생성한다.
2. 잡 동작
아래 커맨드를 이용하여 job 이 관리하는 pod 를 관찰하면, 60 초 후 pod 가 정상 종료되면 job dml completions 가 1/1 로 변경되는 것을 볼 수 있다.
$ kubectl get jobs
NAME STATUS COMPLETIONS DURATION AGE
sample-job Running 0/1 4s 4s
$ kubectl get pods --watch
NAME READY STATUS RESTARTS AGE
sample-job-x5cp9 1/1 Running 0 10s
sample-job-x5cp9 0/1 Completed 0 62s # 60초 후
sample-job-x5cp9 0/1 Completed 0 63s
sample-job-x5cp9 0/1 Completed 0 64s
$ kubectl get jobs
NAME STATUS COMPLETIONS DURATION AGE
sample-job Complete 1/1 64s 86s
3. restartPolicy
restartPolicy 는 job 을 수행하는 컨테이너 내의 프로세스가 job 수행을 완료하지 못하고 정지되었을 때, 파드를 새로 띄워 다시 job 을 진행할지(Never), 아니면 기존 파드를 재사용할지(OnFailure) 명시하는 필드이다.
| restartPolicy | Job 실행이 중간에 정지되었을 시 동작 |
| Never | Pod 를 재기동하지 않는 정책으로, Job 을 다시 수행하기 위해 새로운 Pod 를 기동한다.(기본값) |
| OnFailure | 실패시 Pod 를 재기동하는 정책으로, Job 을 다시 수행하기 위해 기존 Pod 를 재기동한다. |
아래와 같은 커맨드로 restartPolicy: Never 의 동작을 확인할 수 있다.
$ kubectl apply -f job-never-restart.yaml
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
job-never-restart-gfnx7 1/1 Running 0 8s
# 파드 내 프로세스 kill
$ kubectl exec -it job-never-restart-gfnx7 -- sh -c 'kill -9 `pgrep sleep`'
$ kubectl get pods
# 새로운 job-never-restart-xpgqb 파드가 기동됨
NAME READY STATUS RESTARTS AGE
job-never-restart-gfnx7 0/1 Error 0 52s
job-never-restart-xpgqb 1/1 Running 0 3s
아래와 같은 커맨드로 restartPolicy: OnFailure 의 동작을 확인할 수 있다.
$ kubectl apply -f sample-job-onfailure-restart.yaml
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
job-onfailure-restart-5rhgb 1/1 Running 0 8s
# 파드 내 프로세스 kill
$ kubectl exec -it job-onfailure-restart-5rhgb -- sh -c 'kill -9 `pgrep sleep`'
$ kubectl get pods
# job-onfailure-restart-5rhgb 파드가 restart 됨(RESTARTS: 1)
NAME READY STATUS RESTARTS AGE
job-onfailure-restart-5rhgb 1/1 Running 1 (5s ago) 59s
파드가 기동하는 노드나 파드 IP 주소는 변경되지 않는다.
'Kubernetes' 카테고리의 다른 글
| [Kubernetes] 완료된 잡 정리(ttlSecondsAfterFinished) (0) | 2025.10.06 |
|---|---|
| [Kubernetes] 잡 병렬 실행 (0) | 2025.10.04 |
| [Kubernetes] 스테이트풀셋 삭제와 영구 볼륨 정리 (0) | 2025.09.07 |
| [Kubernetes] 스테이트풀셋 업데이트 전략 (0) | 2025.09.07 |
| [Kubernetes] 스테이트풀셋 (1) | 2025.09.07 |