Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

nomad-programmer

[DevOps/Kubernetes] 배치 잡 실행 (CronJob) 본문

DevOps/Kubernetes

[DevOps/Kubernetes] 배치 잡 실행 (CronJob)

scii 2020. 12. 11. 17:43

이메일의 정기적인 일괄 송신이나 일별/주별/월별 집계 처리 등과 같은 배치 잡을 Kubernetes 클러스터에서 실행하고 싶을 때는 'CronJob'을 사용한다. CronJob은 애플리케이션의 실행 타이밍을 설정할 수 있다.

리눅스의 crontab 설정과 똑같다고 생각하면 된다.

CronJob을 작동시키기 위한 정의 파일은 [kind]를 'CronJob' 으로 설정하고, [schedule]에 잡의 실행 타이밍을 설정한다. Schedule의 지정 방법은 다음과 같은 서식으로, Linux의 cron과 똑같다.

// schedule의 서식

schedule: " '분' '시' '일' '월' '요일' "

설정 가능한 수치

설정 항목
0 - 59
0 - 23
1 - 31
1 - 12
요일 0=일, 1=월, 2=화, 3=수, 4=목, 5=금, 6=토, 7=일

와일드카드 '*' 를 지정하면 매분/매시/매일/매월/매요일이 된다. 또한 10분마다 작동시키고 싶을 때는 '*/10' 으로 기술해서 간격을 지정할 수 있다.

다음의 예에서는 1분 간격으로 [jobTemplate]에서 지정한 docker 애플리케이션을 실행하고 있다. 배치를 실행하는 docker 애플리케이션은 [jobTemplate]에서 지정하고, 'busybox' 이미지에서 쉘을 실행하고 있다.

// Cronjob 정의 파일

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: showdate
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: showdate
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello Docker
          restartPolicy: OnFailure

이것을 Kubernetes 클러스터에서 작동시키려면 다음의 명령을 실행한다.

// CronJob 실행

$ cd <dir path>
$ kubectl create -f <path>/cronjob.yml

cronjob "showdate" created

CronJob을 확인하려면 다음의 명령을 실행한다.

// CronJob 확인

$ kubectl get cronjob

CronJob의 실행 상태를 확인하려면 다음의 명령을 실행한다. 1분 간격으로 잡이 실행된다는 것을 알 수 있다.

// CronJob 실행 내용

$ kubectl get jobs --watch

잡을 삭제할 때는 다음의 명령을 실행한다. 여기서는 -f 옵션을 사용하여 CronJob의 정의 파일명을 지정하고 있다.

// CronJob 삭제

$ kubectl delete -f config/cronjob.yml

cronjob "showdate" deleted

또한 Kubernetes에는 스케줄이 필요 없이 잡을 한 번만 실행하는 'Jobs'도 마련되어 있다.

야간 등 트래픽이 적은 시간에 클러스터의 리소스를 유효하게 활용하여 정기적으로 배치 처리를 하고 싶을 때는 'CronJob' 을 이용하면 된다.
심층학습이나 수치해석과 같은 잡을 실행할 때는 'Jobs' 를 사용하면 된다. 목적에 맞춰 나눠서 사용하면 되겠다.


CronJob 공식 가이드 문서

kubernetes.io/ko/docs/concepts/workloads/controllers/cron-jobs/

 

크론잡

FEATURE STATE: Kubernetes v1.8 [beta] 크론잡은 반복 일정에 따라 잡을 만든다. 하나의 크론잡 오브젝트는 크론탭 (크론 테이블) 파일의 한 줄과 같다. 크론잡은 잡을 크론 형식으로 쓰여진 주어진 일정에

kubernetes.io

Jobs 공식 가이드 문서

kubernetes.io/ko/docs/concepts/workloads/controllers/job/

 

잡에서 하나 이상의 파드를 생성하고 지정된 수의 파드가 성공적으로 종료되도록 한다. 파드가 성공적으로 완료되면, 성공적으로 완료된 잡을 추적한다. 지정된 수의 성공 완료에 도달하면, 작

kubernetes.io

Comments