- 이전 디플로이, 데몬셋은 실시간 반응형
- job/cronjob은 단일 실행 완료형
- 완료 가능한 단일 실행 Job 을 관리하는 Contoller
- 한번 완료되기 전 장애 발생시 다시 시작 되며 성공적인 종료를 보장
- 포드는 restartPolicy OnFailure 를 가지고 동작
시나리오
1. job-1.yaml 명세서 작성
apiVersion: batch/v1
kind: Job
metadata:
name: test-job-1
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: job-container
image: busybox
command: ["/bin/sleep", "15"] # 15초짜리 job
terminationGracePeriodSeconds: 0
2. 생성 및 확인
root@ip-172-31-4-27:~# kubectl create -f job-1.yaml
job.batch/test-job-1 created
root@ip-172-31-4-27:~# kubectl get jobs.batch
NAME COMPLETIONS DURATION AGE
test-job-1 0/1 13s 13s # 1회 성공했는지 확인
root@ip-172-31-4-27:~# kubectl get jobs.batch
NAME COMPLETIONS DURATION AGE
test-job-1 0/1 16s 16s
root@ip-172-31-4-27:~# kubectl get jobs.batch
NAME COMPLETIONS DURATION AGE
test-job-1 1/1 19s 21s
root@ip-172-31-4-27:~# kubectl get jobs.batch,po
NAME COMPLETIONS DURATION AGE
job.batch/test-job-1 1/1 19s 94s #@ 컨트롤러
NAME READY STATUS RESTARTS AGE
pod/test-job-1-xmcs2 0/1 Completed 0 94s #@ 컨트롤러 기반의 pod 상태 확인
#@ 15초 뒤에 pod의 상태가 0이 되고 job은 완료 했으므로 1로 변경된것을 확인한다.
root@ip-172-31-4-27:~/job_cron# kubectl get jobs.batch,po
NAME COMPLETIONS DURATION AGE
job.batch/test-job-1 1/1 20s 72s
NAME READY STATUS RESTARTS AGE
pod/test-job-1-t56tg 0/1 Completed 0 72s
3. job-2.yaml 명세서 작성
apiVersion: batch/v1
kind: Job
metadata:
name: test-job-2
spec: # 3가지 param의 특징을 이해한다
completions: 3 # 반복해서 횟수를 지정할 수 있다
# parallelism: 2
# activeDeadlineSeconds: 30
template:
spec:
restartPolicy: OnFailure
containers:
- name: job-container
image: busybox
command: ["/bin/sleep", "15"]
terminationGracePeriodSeconds: 0
4. 생성 및 확인
root@ip-172-31-4-27:~# kubectl create -f job-2.yaml (completions test)
root@ip-172-31-4-27:~# kubectl get jobs.batch,po
NAME COMPLETIONS DURATION AGE
job.batch/test-job-1 1/1 19s 5m13s
job.batch/test-job-2 1/3 26s 26s # 3회 완성이 되어야 한다.
NAME READY STATUS RESTARTS AGE
pod/test-job-1-xmcs2 0/1 Completed 0 5m13s
pod/test-job-2-jc6rm 1/1 Running 0 7s
pod/test-job-2-jgfs9 0/1 Completed 0 26s
#@ pod가 complete 될때 마다 job이 1씩 증가됨을 확인
root@ip-172-31-4-27:~/job_cron# kubectl get jobs.batch,po
NAME COMPLETIONS DURATION AGE
job.batch/test-job-2 3/3 60s 114s
NAME READY STATUS RESTARTS AGE
pod/test-job-2-gq9f5 0/1 Completed 0 114s
pod/test-job-2-rsq65 0/1 Completed 0 74s
pod/test-job-2-xqlhj 0/1 Completed 0 94s
병렬 처리 시나리오
spec:
completions: 5 <----수정
parallelism: 2 <----수정 # 병렬처리 테스트 : 2개의 pod 중에 Total 5번을 completions 하면 된다.
# activeDeadlineSeconds: 30
template:
spec:
restartPolicy: OnFailure
root@ip-172-31-4-27:~# kubectl create -f job-2.yaml (parallelism test)
1. job-2.yaml 명세서 수정
spec:
completions: 5
parallelism: 2
activeDeadlineSeconds: 30 <----수정
template:
spec:
restartPolicy: OnFailure
2. 수행 및 확인
root@ip-172-31-4-27:~# kubectl create -f job-2.yaml (activeDeadlineSeconds test)
#@ 30초 마다 pod 두개가 생성 -> 삭제 되면서 job의 complete가 늘어남을 확인한다.
root@ip-172-31-4-27:~/job_cron# kubectl get jobs.batch,po
NAME COMPLETIONS DURATION AGE
job.batch/test-job-2 2/5 3m32s 3m32s
NAME READY STATUS RESTARTS AGE
pod/test-job-2-6tt5t 0/1 Completed 0 3m32s
pod/test-job-2-bghnw 0/1 Completed 0 3m32s
CronJob 시나리오
- 리눅스의 crontab과 비슷한 기능이다.
- /1 : 1분 간격 -> 1분마다 job을 생성해서 pod를 생성한다.
- /15 : 15분 가격 (1시간에 4번)
- /20 : 20분 간격 (1시간에 3번)
1.CronJob.yaml 명세서 작성
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cron-job
spec:
schedule: "*/1 * * * *" # 1분 마다 반복 수행
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: job-container
image: busybox
command: ["/bin/sleep", "15"] # 수명이 15초인 pod 생성
terminationGracePeriodSeconds: 0
2. 생성 및 확인
root@ip-172-31-4-27:~# kubectl get -f CronJob.yaml
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cron-job */1 * * * * False 0 <none> 34s
root@ip-172-31-4-27:~# kubectl get cronjobs
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cron-job */1 * * * * False 0 <none> 49s
root@ip-172-31-4-27:~# kubectl get cronjobs,jobs,po
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/cron-job */1 * * * * False 0 24s 81s
NAME COMPLETIONS DURATION AGE
job.batch/cron-job-1600314240 1/1 20s 24s
job.batch/test-job-1 1/1 19s 12m
job.batch/test-job-2 3/3 59s 7m41s
NAME READY STATUS RESTARTS AGE
pod/cron-job-1600314240-vsznn 0/1 Completed 0 24s
#@ cron-job에 의해서 job 생성 pod 생성됨을 확인한다.
#@ 1분마다 job이 생성되고 pod가 15초 후 종료 될때 마다 job은 complete 된다.
root@ip-172-31-4-27:~/job_cron# kubectl get cronjobs,jobs,po
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/cron-job */1 * * * * False 1 10s 5m
NAME COMPLETIONS DURATION AGE
job.batch/cron-job-1606974420 1/1 20s 3m8s
job.batch/cron-job-1606974480 1/1 20s 2m8s
job.batch/cron-job-1606974540 1/1 21s 68s
job.batch/cron-job-1606974600 0/1 8s 8s
NAME READY STATUS RESTARTS AGE
pod/cron-job-1606974420-9fdg8 0/1 Completed 0 3m8s
pod/cron-job-1606974480-mzr6x 0/1 Completed 0 2m8s
pod/cron-job-1606974540-hbfgc 0/1 Completed 0 68s
pod/cron-job-1606974600-p98tl 1/1 Running 0 8s
Suspend 시나리오
- create : 이미 있으면 에러
- apply : create + update
- patch : edit와 달리 특정 속성만 수정할때 사용한다.
- edit : 전체 속성을 수정할때 사용
- set : 이미지 업그레이드 할때 set을 사용한다.
1. 수정 및 확인
#kubectl patch cronjobs cron-job -p '{"spec" : {"suspend" : true }}' #일시 중지 옵션 true
# kubectl get cronjobs,jobs,po
root@ip-172-31-4-27:~/job_cron# kubectl get cronjobs,jobs,po
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/cron-job */1 * * * * True 1 37s 6m27s #@ SUSPEND가 true로 변경되었다.
#kubectl patch cronjobs cron-job -p '{"spec" : {"suspend" : false }}' <-- 재시작
# kubectl get cronjobs,jobs,po
root@ip-172-31-4-27:~/job_cron# kubectl get cronjobs,jobs,po
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/cron-job */1 * * * * False 1 5s 6m55s
#@ SUSPEND가 false로 변경되었고 다시 cron-job이 재실행되는것을 확인한다.
'클라우드 컴퓨팅 & NoSQL > k8s' 카테고리의 다른 글
Ingress Controller (0) | 2020.12.03 |
---|---|
Service Controller (0) | 2020.12.03 |
DaemonSetController (0) | 2020.12.03 |
Scheduler (0) | 2020.12.02 |
Configmaps (0) | 2020.12.02 |