반응형

목차

  1. 잡을 지정한 시간마다 작동시키기
  2. 크론잡 YAML 작성하기
  3. 스케줄 생성하기
  4. CronJob에 데드라인 지정하기

잡을 지정한 시간마다 작동시키기

잡 리소스를 생성하면 즉시 해당하는 파드를 실행합니다. 그러나 많은 배치 잡이 미래의 특정 시간 또는 지정된 간격으로 반복 실행해야 합니다. 예를들면 정기 업데이트 등이 있을 것 같습니다. 이러한 기능은 리눅스 명령어 중에서도 cron 명령어가 있었고 쿠버네티스에서도 이를 지원합니다.

 

쿠버네티스에서의 크론 작업은 크론잡 리소스를 만들어 구성합니다. 잡 실행을 위한 스케줄은 잘 알려진 크론 형식으로 지정하므로, 일반적인 크론 작업에 익숙하다면 금방 쿠버네티스의 크론잡을 이해할 수 있을 것입니다.

 

쿠버네티스는 설정된 시간에 잡 리소스가 생성되면 앞에서 배운 것처럼 하나 이상의 파드 복제본이 잡의 파드 템플릿에 따라 생성합니다. 잡 리소스가 생성되면 앞에서 배운 것처럼 하나 이상의 파드 복제본이 잡의 파드 템플릿에 따라 생성되고 시작합니다. 사실 그 이상은 특별한 것이 없습니다.


크론잡 YAML 작성하기

이 예제는 매 15분마다 배치 잡을 실행하는 것을 가정합니다.

apiVersion: batch/v1beta1                          >  CronJob의 api 버전입니다.
kind: CronJob
metadata:
  name: batch-job-every-fifteen-minutes
spec:
  schedule: "0,15,30,45 * * * *"                    >  매일, 매시간 0, 15, 30, 45분에 실행한다는 뜻입니다.
  jopTemplate:
    spec:
      template:
        metadata:
          labels:
            app: periodic-batch-jop
        spec:
          restartPolicy: OnFailure
          containers:
          - name: main
            image: luksa/batch-jop

스케줄 생성하기

크론의 스케줄 형식에 익숙하지 않을 수 있으니 간단히 소개하자면 스케줄은 왼쪽엣 오른쪽으로 다섯 개의 항목을 갖고 있습니다.

schedule: <분 / 시 / 일 / 월 / 요일>

위 예제를 예로들면 다음과 같습니다.

 schedule: "0,15,30,45 * * * *"

0,15,30,45 : 0, 15, 30, 45분 마다
*                : 매시(0~23)
*                : 매일(1~31)
*                : 매월(1~12)
*                : 모든 요일(0~7, 이 때 0과 7은 일요일입니다.)

CronJob에 데드라인 지정하기

잡 리소스는 대략 예정된 시간에 크론잡 리소스에서 생성됩니다. 그럼 잡은 파드를 생성하게 됩니다. 잡이나 파드가 상대적으로 늦게 생성되고 실행될 수 있습니다. 따라서 예정된 시간을 너무 초과해 시작돼서는 안 된다는 엄격한 요구 사항을 갖게 할 수 있습니다. 이런 경우 다음과 같이 startingDeadlineSeconds 필드를 지정해 데드라인을 설정할 수 있습니다.

apiVersion: batch/v1beta1
kind: CronJob
spec:
  schedule: "0,15,30,45 * * * *"
  startingDeadlineSeconds: 15
...

이 예제에서 매 15분 마다 실행하는데 어떠한 이유에서든 15초가 지나도 시작하지 않으면 잡이 실행되지 않고 실패로 표시됩니다.

 

일반적인 상황에서 크론잡은 스케줄에 설정한 각 실행에 항상 하나의 잡만 생성하지만 두개의 잡이 동시에 생성되거나 전혀 생성되지 않을 수 있습니다. 첫 번째 문제를 해결하려면 잡이 멱등성을 가져야 합니다. 두 번째 문제점의 경우 다음 번 잡 실행이 이전의 실행에서 완료했어야 하는 작업을 수행하는지 확인해야 합니다.

반응형