일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Algorithm
- vim
- c언어
- Flutter
- c# winform
- HTML
- Houdini
- dart 언어
- Python
- Unity
- c# 윈폼
- jupyter lab
- C언어 포인터
- 구조체
- 깃
- jupyter
- 다트 언어
- C# delegate
- Data Structure
- C++
- c# 추상 클래스
- 포인터
- docker
- gitlab
- 플러터
- 도커
- 유니티
- git
- c#
- github
- Today
- Total
nomad-programmer
[DevOps/Kubernetes] 배치 잡 실행 (CronJob) 본문
이메일의 정기적인 일괄 송신이나 일별/주별/월별 집계 처리 등과 같은 배치 잡을 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/
Jobs 공식 가이드 문서
'DevOps > Kubernetes' 카테고리의 다른 글
[DevOps/Kubernetes] 시스템 운용의 기초 지식 (0) | 2020.12.11 |
---|---|
[DevOps/Kubernetes] Kubernetes (쿠버네티스)의 구조 (0) | 2020.12.11 |
[DevOps/Kubernetes] 쿠버네티스의 서버 구성의 개요 및 kubectl 설치 (0) | 2020.12.11 |