Myo-Kyeong Tech Blog

[Kubernetes] 쿠버네티스 CronJob으로 작업 스케줄링하기 본문

DevOps/Kubernetes

[Kubernetes] 쿠버네티스 CronJob으로 작업 스케줄링하기

myo-kyeong 2024. 3. 6. 23:36
728x90
반응형

 

CronJob이란?

  • 쿠버네티스에서 반복 작업을 정의하고 예약하는 기능
  • 유닉스에서 사용되는 cron 데몬과 유사한 작동
  • 특정 시간에, 또는 주기적으로 컨테이너화된 작업을 실행하도록 스케줄링 

 

Cron 표현식 이해

  • 크론 표현식은 분, 시간, 일, 월, 요일 등을 지정하여 작업을 예약하는 데 사용
# ┌───────────── 분 (0 - 59)
# │ ┌───────────── 시 (0 - 23)
# │ │ ┌───────────── 월의 일 (1 - 31)
# │ │ │ ┌───────────── 월 (1 - 12)
# │ │ │ │ ┌───────────── 요일 (0 - 6) (일요일부터 토요일까지)
# │ │ │ │ │                                   OR sun, mon, tue, wed, thu, fri, sat
# │ │ │ │ │ 
# │ │ │ │ │
# * * * * *

 

[크론 표현식] 

* 모든 값
1,2,3 특정 값들
1-5 범위 내의 값
*/2 간격으로 값 지정

 

다음과 같이 크론 표현식을 사용할 경우, 매주 월요일과 수요일 오후 3시에 작업이 실행됩니다. 

0 15 * * 1,3
  • 분 : 매 시간 0분
  • 시 : 매일 오후 3시
  • 일 : 상관없음
  • 월 : 상관없음
  • 요일: 매주 월요일과 수요일 (1은 월요일, 3은 수요일) 

 

CronJob 매니페스트 작성

 

CronJob

A CronJob starts one-time Jobs on a repeating schedule.

kubernetes.io

 

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

 

CronJob 시간대 설정

한국 시간대로 설정하고 싶을 시에는 timeZone 필드에서 "Asia/Seoul"로 지정하면 됩니다.

spec:
  schedule: "* * * * *"
  timeZone: "Asia/Seoul"

 

CronJob 동시성 정책

쿠버네티스에서 CronJob을 생성할 때, '.spec.concurrencyPolicy' 필드를 통해 동시성 정책을 지정할 수 있습니다.

  • Allow(기본값) : CronJob이 동시에 실행되는 작업 허용. 여러 작업이 동시에 실행될 수 있음
  • Forbid : 이전 작업이 아직 완료되지 않은 경우에는 새 작업을 실행하지 않으며 대기
  • Replace : 새로운 작업을 실행할 때 이전 작업이 아직 완료되지 않은 경우, 현재 실행 중인 작업을 새 작업으로 대체
spec:
  schedule: "* * * * *"
  concurrencyPolicy: Forbid

 

CronJob 작업 기록 관리

쿠버네티스에서는 CronJob으로 반복 작업을 할 때 작업의 완료 및 실패에 대한 기록을 .spec.successfulJobsHistoryLimit.spec.failedJobsHistoryLimit 필드를 사용하여 작업 기록을 관리할 수 있습니다. 

spec:
  schedule: "* * * * *"
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 1

다음과 같이 작성 시, 성공한 작업을 최대 3개까지 보관하고, 실패한 작업을 최대 1개까지 보관할 수 있습니다. 

728x90
반응형