반응형

 

 

 

 

잡(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