-
쿠버네티스 잡(job) 이란?
잡은 하나 이상의 파드를 지정하고 지정된 수의 파드를 성공적으로 실행하도록 하는 설정 입니다. 노드의 H/W 장애나 재부팅 등으로 인해 파드가 정상 실행이 되지 않았을 경우 job은 새로운 파드를 시작하도록 할 수 있습니다.
즉, 백업이나 특정 배치 파일들처럼 한번 실행하고 종료되는 성격의 작업에 사용될 수 있습니다.
-
잡 생성 및 확인
아래 코드는 원주율은 2000 자리까지 계산 후 출력해주는 코드 입니다.
저는 경로를 "/root/kubespray/inventory/test/job/"에 test-job.yaml 로 저장 하였습니다.
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
- apiVersion batch/v1 → 쿠버네티스의 batch/v1 API를 사용 합니다.
- kind: Job → Job의 작업으로 명시 합니다.
- metadata.name → Job 이름을 설정 합니다.
- spec.template.spec.containers → 실행할 컨테이너의 t설정을 저장 합니다.
- spec.template.spec.containers.restartPolicy → 파드의 재시작 정책을 설정 합니다. Never는 재시작을 하지 않는 설정 입니다.
kubectl apply -f test-job.yaml 을 실행 후 kubectl get job 으로 잡 이름을 확인 후 kubectl describe job [잡 이름] 을 입력하면 아래와 같이 성공적으로 실행 했으며 약 11초가 걸렸다는 내용을 확인할 수 있습니다.
추가적으로 해당 실행 값을 확인할 땐 kubectl get pods 로 파드의 이름을 확인한 뒤 kubectl logs [파드 이름] 을 입력하면 아래와 같이 실행 값을 확인할 수 있습니다.
-
restartPolicy, backoffLimit 필드 옵션
restartPolicy 필드 옵션에는 아래와 같이 3가지가 있으며 상황에 따른 재시작 유무는 쿠버네티스 docs 문서에서 확인할 수 있습니다. 아래 docs 문서 링크에서 Ctrl+F로 Example states 를 검색하면 확인 가능 합니다.
- Always → 항상 재시작 합니다.
- OnFailure → 비정상 종료 발생 시 컨테이너를 재시작 합니다.
- Never → 재시작을 하지 않습니다.
restartPolicy 필드 상황별 재시작 유무 : https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/
backoffLimit 은 백오프 정책이라고 하며 잡에 실패할 경우 다시 실행시킬 재시도 횟수를 지정 합니다. 기본적으로 6이 설정 되어 있으며 재시작 실패 후 10초, 20초, 40초와 같이 실행을 재시도 합니다.
-
여러개의 컨테이너 처리
아래 코드와 같이 하나의 파드에 여러개의 컨테이너를 처리할수도 있습니다. pi 라는 파드 이름을 가진 작업에 pi1, pi2 컨테이너를 생성하고 pi1은 원주율의 100자리 계산 후 출력, pi2는 원주율의 200자리 계산 후 출력 입니다.
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi1
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(100)"]
- name: pi2
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(200)"]
restartPolicy: Never
backoffLimit: 4
kubectl apply -f [yaml파일명] 이후 파드 이름으로 logs를 출력하려고 하면 입력했던 2개의 컨테이름(pi1, pi2)이 출력되면서 하나를 선택하라고 합니다.
kubectl logs [파드명] pi1 과 같이 입력하면 각각의 컨테이너 출력값을 확인할 수 있습니다.
-
병렬 잡 (Parallel Jobs)
바로 위에서는 하나의 잡과 하나의 파드에 컨테이너를 여러개 실행 시켰다면, 병렬 잡은 하나의 잡에 여러개의 파드를 실행시켜 작업하는것을 말합니다. 이 작업을 할땐 비정렬 작업, 완료 횟수가 고정되어있는 병렬 작업, 작업간 대기열이 존재하는 병렬 작업이 대표적인 예 입니다.
위의 3가지 상황에 따른 옵션 선택은 아래 링크에서 Ctrl + F로 Parallel Jobs 를 검색하면 찾을 수 있습니다.
3가지 상황에 따른 옵션 선택 : https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
아래 코드는 3개의 파드를 실행 시키며 파드가 3개 이상 정상 종료 될 경우 잡을 성공 처리 하는 코드 입니다. completions과 parallelism은 둘 다 기본값은 1 입니다.
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
completions: 3
parallelism: 3
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(100)"]
restartPolicy: Never
backoffLimit: 4
- spec.completions: 3 → 파드가 3개 이상 정상 종료 될 경우 잡을 성공 처리 합니다.
- spec.parallelism: 3 → 한번에 3개의 파드를 실행 합니다.
위의 코드를 실행하면 아래와 같이 3개의 파드가 실행 된것을 확인할 수 있습니다.
'Container > Kubernetes' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 Docker Hub-Private Image 가져오는 방법 (0) | 2020.02.27 |
---|---|
[Kubernetes] 쿠버네티스 크론잡(cronjob) 개념 (2) | 2020.02.21 |
[Kubernetes] 쿠버네티스 데몬셋(Daemonset) 개념 (생성, 확인, 실행중인 파드의 노드 확인, 업데이트) (1) | 2020.02.18 |
[Kubernetes] 쿠버네티스 디플로이먼트(Deployment) 개념 (생성, 확인, 업데이트, 롤백, 롤아웃 기록 조회, 일시 중지, 시작, 재시작) (1) | 2020.02.17 |
[Kubernetes] 쿠버네티스 레플리카셋(replicaset) 개념 (파드 개수 유지, 파드 독립, 레플리카셋만 삭제) (1) | 2020.02.17 |