728x90
컨트롤러
Job Controller
잡 컨트롤러란?
- 파드(컨테이너)의 애플리케이션(잡) 실행이 완료/종료되는 것에 초점을 맞춘 컨트롤러
- 애플리케이션이 실행되고 실행이 완료되면 파드의 할 일이 끝난 것으로 간주하고 파드를 종료함
- 임시( Ad-hoc ) 작업 및 배치( Batch ) 작업에 유용하게 사용됨
- 만약 애플리케이션이 실행되고 있는 중에 노드가 죽거나 파드의 실행이 완료되지 않았다면, 파드를 다시 스케줄링하여 재실하게 구성할 수 있음
잡 컨트롤러
잡 컨트롤러
- 잡 오브젝트의 API는 batch 그룹의 v1 버전 사용
- 오브젝트의 종류: Job
- 잡 컨트롤러는 파드 오브젝트를 재실행하지 않음
- ==> 재시작 정책을 OnFailure 또는 Never로 명시적 선언이 필요함 ( Always는 안 됨)
- job.spec.template.spec.restartPolicy
Always (기본 값) | 종료/실패 시 항상 재시작 |
OnFailure | 실패 시 재시작 |
Never | 종료 또는 오류 시 절대 재시작하지 않음 |
- 파일 생성
vagrant@kube-master1:~/test$ cat testapp-job.yml
apiVersion: batch/v1
kind: Job
metadata:
name: testapp-job1
spec:
template:
metadata:
labels:
app: testapp-job
spec:
restartPolicy: OnFailure
containers:
- name: testapp
image: busybox
command: ['sleep','10']
- 데몬셋 생성
vagrant@kube-master1:~/test$ kubectl create -f testapp-job.yml
job.batch/testapp-job1 created
- 실행 결과
- 파드 상태 확인 (10초 실행 후 종료)
vagrant@kube-master1:~$ kubectl get pods --watch
NAME READY STATUS RESTARTS AGE
testapp-job1-x8k8k 0/1 Pending 0 0s
testapp-job1-x8k8k 0/1 Pending 0 0s
testapp-job1-x8k8k 0/1 ContainerCreating 0 0s
testapp-job1-x8k8k 1/1 Running 0 6s
testapp-job1-x8k8k 0/1 Completed 0 16s
- 잡 컨트롤러 상태 확인
- 10초간 실행되고 종료
watch -n1 kubectl get jobs.batch
NAME COMPLETIONS DURATION AGE
testapp-job1 1/1 16s 13m
- 파드 오브젝트 상태 확인
NAME READY STATUS RESTARTS AGE
testapp-job1-x8k8k 0/1 Completed 0 19m
다중 잡 컨트롤러
job.spec.completions: 작업의 완료 갯수 지정
- job이 한 번으로 완료되지 않고 작업을 여러 번 순차적으로 실행됨
- 하나의 파드가 생성되어 job이 실행되고 완료되면, 두 번째 파드가 생성되어 job이 완료되고, 마지막으로 세 번째 파드가 생성되고 job이 완료되어야 모든 job이 완료됨
vagrant@kube-master1:~/test$ cat testapp-job-comp.yml
apiVersion: batch/v1
kind: Job
metadata:
name: testapp-job-comp
spec:
completions: 3
template:
metadata:
labels:
app: testapp-job
spec:
restartPolicy: OnFailure
containers:
- name: testapp
image: busybox
command: ['sleep','10']
- 다중 잡 컨트롤러 생성
vagrant@kube-master1:~/test$ kubectl create -f testapp-job-comp.yml
job.batch/testapp-job-comp created
- 실행 결과
- 하나의 파드가 생성되어 job이 실행되고 완료되면, 두 번째 파드가 생성되어 job이 실행됨
- 두 번째 파드가 생성되어 job이 실행되고 완료되면, 세 번째 파드가 생성되어 job이 실행되고 완료됨
watch -n1 kubectl get pods
kubectl get jobs.batch
첫 번째 job 실행 완료
두 번째 job 실행 완료
세 번째 job 실행 완료
병렬 다중 잡 컨트롤러
job.spec.parallelism: 동시에 실행할 잡의 갯수 지정
- 병렬로 동시에 실행할 job의 갯수를 지정할 수 있음
- 총 3개의 job을 실행하며, 동시에 병렬로 세 개의 job을 실행함
vagrant@kube-master1:~/test$ cat testapp-job-para.yml
apiVersion: batch/v1
kind: Job
metadata:
name: testapp-job-para
spec:
completions: 3
parallelism: 3
template:
metadata:
labels:
app: testapp-job-para
spec:
restartPolicy: OnFailure
containers:
- name: testapp
image: busybox
command: ["sleep","10"]
- 실행 결과 모니터링
watch -n1 kubectl get jobs.batch
watch -n1 kubectl get pods
kubectl get pods --watch
크론잡 컨트롤러
CronJob Controller
- 잡 컨트롤러는 job이 한 번만 실행되지만 크론잡 컨트롤러는 주기적으로 job을 반복 실행할 필요가 있을 때 사용하는 컨트롤러
- 리눅스 시스템의 crontab 도구와 같은 기능
크론잡 컨트롤러 생성
- 크론잡 컨트롤러는 아직 베타 기능이며 크론잡 API 역시 batch 그룹을 사용하며 버전은 v1beta1을 사용함
- 오브젝트 종류: CronJob
- cronjob.spec.schedule:스케줄 지정 > 주기적인 시간 구성
- 파일 생성
- 1분마다 파드 생성
vagrant@kube-master1:~/test$ cat testapp-cj.yml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: testapp-cj
spec:
schedule: "* * * * *"
jobTemplate:
spec:
template:
metadata:
labels:
app: testapp-cj
spec:
restartPolicy: OnFailure
containers:
- name: testapp
image: busybox
command: ['sleep', '20']
- 실행 결과
- 1분마다 cronjob이 실행되어 파드가 생성되고 종료되는 것을 확인할 수 있음
728x90
'쿠버네티스 교육 > 강의 내용 정리' 카테고리의 다른 글
220624_2_k8s_연결 서비스_NodePort (0) | 2022.06.25 |
---|---|
220624_1_k8s_클러스터 내부 서비스-Cluster IP (0) | 2022.06.24 |
220623_1_k8s_컨트롤러-DaemonSet (0) | 2022.06.23 |
220622_3_k8s_컨트롤러-ReplicaSet Controller (0) | 2022.06.22 |
220622_2_k8s_파드의 생명 주기와 프로브-livenessProbe, startupProbe (0) | 2022.06.22 |