반응형
잡(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/
반응형
'Kubernetes' 카테고리의 다른 글
[K8S] 쿠버네티스 - 시크릿(Secret) 기능 (0) | 2022.08.14 |
---|---|
[K8S] 쿠버네티스 - 크론잡(CronJob) 기능 (0) | 2022.08.14 |
[K8S] 쿠버네티스 - 데몬셋(DaemonSet) 기능 (0) | 2022.08.14 |
[K8S] 쿠버네티스 - 배포(Deployment) 기능 (0) | 2022.08.14 |
[K8S] 쿠버네티스 - 레플리카셋(replicaset) 기능 (0) | 2022.08.14 |