반응형

 

 

 

 

잡(Job)

잡에서 하나 이상의 파드를 생성하고 지정된 수의 파드가 성공적으로 종료될 때까지 계속해서 파드의 실행을 재시도한다. 파드가 성공적으로 완료되면, 성공적으로 완료된 잡을 추적한다. 지정된 수의 성공 완료에 도달하면, 작업(즉, 잡)이 완료된다. 잡을 삭제하면 잡이 생성한 파드가 정리된다. 작업을 일시 중지하면 작업이 다시 재개될 때까지 활성 파드가 삭제된다.

 

간단한 사례는 잡 오브젝트를 하나 생성해서 파드 하나를 안정적으로 실행하고 완료하는 것이다. 첫 번째 파드가 실패 또는 삭제된 경우(예로는 노드 하드웨어의 실패 또는 노드 재부팅) 잡 오브젝트는 새로운 파드를 기동시킨다.

 

잡을 사용하면 여러 파드를 병렬로 실행할 수도 있다.

 

잡을 스케줄에 따라 구동하고 싶은 경우(단일 작업이든, 여러 작업의 병렬 수행이든), 크론잡(CronJob)을 참고한다.

 

- 1회성 배치작업(데이터수집, 분석, 기계학습)

 

 

 

잡(Job) 사용

# job 배포 YAML 파일 생성 (date 기능)
jinsu@jinsu:~$ cat job.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: myfirstjob
spec:
  template:
    spec:
      containers:
      - name: print-date
        image: busybox
        args: ["date"]
      restartPolicy: OnFailure
  backoffLimit: 2
jinsu@jinsu:~$ 

# job 배보
jinsu@jinsu:~$ kubectl apply -f job.yaml 
job.batch/myfirstjob created
jinsu@jinsu:~$ 
# job 상태 확인
jinsu@jinsu:~$ kubectl get job
NAME         COMPLETIONS   DURATION   AGE
myfirstjob   1/1           5s         5s
jinsu@jinsu:~$ 
# job pod 확인
jinsu@jinsu:~$ kubectl get pod
NAME               READY   STATUS      RESTARTS   AGE
myfirstjob-bl5w8   0/1     Completed   0          16s
jinsu@jinsu:~$

# job 상세정보 (restartPolicy: OnFailure) job 기능 상태확인
jinsu@jinsu:~$ kubectl get job myfirstjob -oyaml
apiVersion: batch/v1
kind: Job
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"batch/v1","kind":"Job","metadata":{"annotations":{},"name":"myfirstjob","namespace":"default"},"spec":{"backoffLimit":2,"template":{"spec":{"containers":[{"args":["date"],"image":"busybox","name":"print-date"}],"restartPolicy":"OnFailure"}}}}
  creationTimestamp: "2022-08-14T09:12:55Z"
  labels:
    controller-uid: 102804d2-35af-451e-8e52-b428b626a35d
    job-name: myfirstjob
  name: myfirstjob
  namespace: default
  resourceVersion: "18588"
  selfLink: /apis/batch/v1/namespaces/default/jobs/myfirstjob
  uid: 102804d2-35af-451e-8e52-b428b626a35d
spec:
  backoffLimit: 2
  completions: 1
  parallelism: 1
  selector:
    matchLabels:
      controller-uid: 102804d2-35af-451e-8e52-b428b626a35d
  template:
    metadata:
      creationTimestamp: null
      labels:
        controller-uid: 102804d2-35af-451e-8e52-b428b626a35d
        job-name: myfirstjob
    spec:
      containers:
      - args:
        - date
        image: busybox
        imagePullPolicy: Always
        name: print-date
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: OnFailure
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  completionTime: "2022-08-14T09:13:00Z"
  conditions:
  - lastProbeTime: "2022-08-14T09:13:00Z"
    lastTransitionTime: "2022-08-14T09:13:00Z"
    status: "True"
    type: Complete
  startTime: "2022-08-14T09:12:55Z"
  succeeded: 1
jinsu@jinsu:~$

# job으로 생성한 date 기능 확인 
jinsu@jinsu:~$ kubectl logs myfirstjob-bl5w8
Sun Aug 14 09:12:59 UTC 2022
jinsu@jinsu:~$ 

# job 생성할때 date2로 생성
jinsu@jinsu:~$ cat job.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: myfirstjob
spec:
  template:
    spec:
      containers:
      - name: print-date
        image: busybox
        args: ["date2"]
      restartPolicy: OnFailure
  backoffLimit: 2
jinsu@jinsu:~$

# job 생성 및 확인
jinsu@jinsu:~$ kubectl apply -f job.yaml 
job.batch/myfirstjob created
jinsu@jinsu:~$ 
jinsu@jinsu:~$ kubectl get job
NAME         COMPLETIONS   DURATION   AGE
myfirstjob   0/1           3s         3s
jinsu@jinsu:~$

# pod에 문제가 생겨 RESTARTS 카운트가 올라가 2회 발생시 Pod가 자동 삭제 확인
jinsu@jinsu:~$ kubectl get pod
NAME               READY   STATUS              RESTARTS   AGE
myfirstjob-bl2lb   0/1     RunContainerError   0          8s
jinsu@jinsu:~$ kubectl get pod
NAME               READY   STATUS        RESTARTS   AGE
myfirstjob-bl2lb   0/1     Terminating   2          36s
jinsu@jinsu:~$

 

잡(Job) 삭제

# 현재 job 상태
jinsu@jinsu:~$ kubectl get job
NAME         COMPLETIONS   DURATION   AGE
myfirstjob   0/1           4m40s      4m40s

# job 삭제
jinsu@jinsu:~$ kubectl delete job myfirstjob
job.batch "myfirstjob" deleted
jinsu@jinsu:~$ 

jinsu@jinsu:~$ kubectl get job              
No resources found in default namespace.
jinsu@jinsu:~$

 

 

 

 

 

참고자료

 https://kubernetes.io/ko/docs/concepts/workloads/controllers/job/

 

 

 

 

반응형

+ Recent posts