[Kubernetes] 잡

Kubernetes 2025. 10. 4. 13:54

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 주소는 변경되지 않는다.

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,