kubectl get
으로 잡을 확인해보면 레플리카셋 등에서는 READY 상태의 컨테이너 수를 표시하지만, 잡에서는 정상 종료한 파드 수(COMPLETIONS)를 표시한다.apiVersion: batch/v1
kind: Job
metadata:
name: sample-job
spec:
completions: 1
parallelism: 1
backoffLimit: 10
template:
spec:
containers:
- name: tools-container
image: amsy810/tools:v2.0
command: ["sleep"]
args: ["60"]
restartPolicy: Never
spec.template.spec.restartPolicy
에 Onfailure
또는 Never
중 하나를 지정해야 한다.
Never
: 파드에 장애가 발생하면 신규 파드가 생성된다.
apiVersion: batch/v1
kind: Job
metadata:
name: sample-job-never-restart
spec:
completions: 1
parallelism: 1
backoffLimit: 10
template:
spec:
containers:
- name: tools-container
image: amsy810/tools:v2.0
command: ["sh", "-c"]
args: ["$(sleep 3600)"]
restartPolicy: Never
OnFailure
: 동일한 파드를 사용하여 잡을 다시 시작한다.
apiVersion: batch/v1
kind: Job
metadata:
name: sample-job-onfailure-restart
spec:
completions: 1
parallelism: 1
backoffLimit: 10
template:
spec:
containers:
- name: tools-container
image: amsy810/tools:v2.0
command: ["sh", "-c"]
args: ["$(sleep 3600)"]
restartPolicy: OnFailure
completions
/parallelism
/backoffLimit
는 아주 중요한 파라미터들이며 잡의 워크로드에 따라 적절히 설정하여 사용해야 한다.
completions
: 목표 성공 치
parallelism
: 병렬 처리 횟수backoffLimit
: 실패 허용 횟수1회만 실행하는 태스크 (One Shot Task)
completions
: 1parallelism
: 1backoffLimit
: 0N개 병렬로 실행시키는 태스크 (Multi Task)
parallelism
)를 성공 횟수(completions
) 이상으로 설정하더라도 성공 횟수만큼만 파드가 생성된다.completions
: Nparallelism
: MbackoffLimit
: P한 개씩 실행하는 작업 큐 (Single WorkQueue)
<aside>
💡 실행 중 parallelism을 변경하여 N개의 Multi WorkQueue로 변경할 수 있다.
Parallelism 변경은 kubectl patch
명령어를 사용하거나 매니페스트를 적용하여 변경할 수 있다.
</aside>
completions
: 미지정parallelism
: 1backoffLimit
: PN개 병렬로 실행하는 작업 큐 (Multi WorkQueue)
<aside> 💡 [ 동작원리 ]
completions
에 도달할 때까지 실행하는 것이 아닌, 큰 처리 전체가 정상 종료할 때까지 병렬 수로 계속 실행하고자 할 때 사용</aside>
<aside> 💡 - 작업 큐의 잡을 사용하려면 처리 전체의 진행을 관리하기 위한 메시지 큐를 사용해야 한다.
</aside>
completions
: 미지정parallelism
: NbackoffLimit
: PapiVersion: batch/v1
kind: Job
metadata:
name: sample-multi-workqueue-job
spec:
# completions: 1 지정하지 않는다.
parallelism: 3
backoffLimit: 1
template:
spec:
containers:
- name: tools-container
image: amsy810/tools:v2.0
command: ["sleep"]
args: ["30"]
restartPolicy: Never
completions: 5
, parallelism: 3
⇒ COMPLETIONS 3/5
로 표기parallelism: 3
⇒ COMPLETIONS 0/1 of 3
0/1 of 3
로 나타난다.spec.ttlSecondsAfterFinished
를 설정하여 잡이 종료한 후에 일정 기간 경과 후 삭제하도록 설정 가능apiVersion: batch/v1
kind: Job
metadata:
name: sample-job-ttl
spec:
ttlSecondsAfterFinished: 30
completions: 1
parallelism: 1
backoffLimit: 10
template:
spec:
containers:
- name: tools-container
image: amsy810/tools:v2.0
command: ["sleep"]
args: ["60"]
restartPolicy: Never