쿠버네티스 교육/강의 내용 정리

220623_2_k8s_컨트롤러-Job Controller

kimhope 2022. 6. 23. 21:24
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