- ReplicationController
- ReplicaSet
- Deployment
- DaemonSet
- StatefulSet
- Job
- CronJob ← 오늘 볼 내용
7. CronJob
CronJob은 쿠버네티스에서 주기적으로 실행되는 작업을 정의하는 리소스다.
즉, 시간 기반으로 일정한 주기로 반복되는 작업을 스케줄링하는 데 사용된다.
이는 Linux/Unix 시스템에서 사용되는 cron 서비스와 유사한 개념이다.
쉽게 말하자면 사용자가 원하는 시간에 Job 실행을 예약할 수 있도록 지원해주는 것이 CronJob이다.
CronJob Schedule : " 0 3 1 * * " ← 순서대로 다음과 같다. " 분 시 일 월 요일 "
- Minutes (from 0 to 59)
- Hours (from 0 to 23)
- Day of the month (from 1 to 31
- Month (from 1 to 12)
- Day of the week (from 0 to 6) ← 0은 일요일, 6은 토요일
분(0-59) | 시(0-23) | 일(1-31) | 월(1-12) | 요일(0-6) | 의미 |
0 | 9 | 1 | * | * | 매월 1일 09시 정각 실행 |
0 | 3 | * | * | 0,6 | 매 주말 03시 정각 실행 |
*/5 | * | 1-10 | * | * | 매월 1~10일에 5분마다 한번씩 실행 |
* | * | * | * | * | 1분마다 한번씩 실 |
0과 6이라는 뜻의 0,6과 1에서 10까지라는 뜻의 1-10에서 대시 기호와 숫자를 띄어쓰기하면 안된다.
yaml 파일에서 공백은 구분자로 사용되기 때문에 기호 사이를 띄어쓰기하면 에러가 발생한다.
기본 형태
Job definition | CronJob definition |
apiVersion: batch/v1 kind: Job metadata: name: centos-job spec: template: spec: containers: - name: centos-container image: centos:7 command: ["bash"] args: - "-c" - "echo 'Hello'; sleep 5; echo 'Bye'" restartPolicy: Never |
apiVersion: batch/v1 kind: CronJob metadata: name: centos-cronjob spec: schedule: "0 3 1 * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox args: - /bin/sh - -c - date; echo Hello restartPolicy: Never |
예제
yaml 파일 생성
# cronjob-exam.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: centos-cronjob
spec:
schedule: "* * * * *"
startingDeadlineSeconds: 500
# concurrencyPolicy: Allow #default
concurrencyPolicy: Forbid
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- echo Hello; sleep 10; echo Bye
restartPolicy: Never
- startingDeadlineSeconds: 500 : JobTemplate에 정의된 애플리케이션이 500초동안 실행되지 못하면 취소시킴
- concurrencyPolicy: Allow : 예약된 시간이 되었을 때 아직 완료되지 못한 작업이 존재하더라도 실행
- concurrencyPolicy: Forbid : 예약된 시간이 되었을 때 아직 완료되지 못한 작업이 존재하면 실행하지 않음(Running중인 작업을 하나씩만 동작시킴)
CronJob 컨트롤러 실행
만약 이렇게 매분마다 실행이 되고 완료된 파드가 종료되지 않는다면 파드의 수는 무지막지하게 증가할 것이다.
하지만 해당 CronJob 컨트롤러의 구성을 보면 이에 대한 예방 방안이 이미 적용되어 있다.
# yaml코드 형태로 구성 확인
kubectl get cronjobs.batch centos-cronjob -o yaml
- successfulJobHistoryLimit: 3 : 작업이 완료된 파드의 개수를 3개로 제한. 초과하면 오래된 파드부터 삭제.
이와 같이 CronJob은 생성하면 기본값으로 successfulJobHistoryLimit: 3 라는 라인 생긴다.
이를 통해 끝없이 증가하는 파드의 개수를 제한할 수 있다.
작업이 완료될 때까지 보장해주는 역할은 Job이 관리하고 CronJob은 그 Job을 주기적으로 실행될 수 있게 보장해주는 역할을 한다.
아래 영상을 참고했습니다.
https://youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&si=hbPclcPuc-6lTNdE
'Kubernetes' 카테고리의 다른 글
Kubernetes 기초 - Service(2) (0) | 2023.12.19 |
---|---|
Kubernetes 기초 - Service(1) (0) | 2023.12.18 |
Kubernetes 기초 - Controller(6) (0) | 2023.12.15 |
Kubernetes 기초 - Controller(5) (0) | 2023.12.14 |
Kubernetes 기초 - Controller(4) (0) | 2023.12.14 |