Cronjob 만들기

작성자 김아름 수정일 2022-10-17 15:27

#cronjob, #job, #kubernetes, #쿠버네티스, #크론잡

들어가며

  • 우리는 일정한 시간에 반복 적인 작업이 수행되길 원할 수 있습니다.

  • 이러한 작업을 지원하는 것이 cronjob입니다.

  • cronjob에 대한 사용 방법을 알아보겠습니다.



cronjob에 대해 알아보자

cronjob은 사용자가 원하는 시간에 job이 실행되도록 하는 작업 예약을 지원합니다.


1분마다 현재 시간과 Hello fron the Kubernetes cluster 메시지를 출력해 보겠습니다.

  apiVersion: batch/v1beta1
  kind: CronJob
  metadata:
    name: hello
  spec:
    schedule: "* * * * *"
    jobTemplate:
      spec:
        template:
         spec:
           containers:
           - name: hello
             image: busybox
             imagePullPolicy: IfNotPresent
             command:
             - /bin/sh
             - -c
             - date; echo Hello from the Kubernetes cluster
             volumeMounts:
             - mountPath: /etc/localtime:ro
               name: time
           restartPolicy: OnFailure
           volumes:
           - hostPath:
               path: /etc/localtime
             name: time


위 내용을 cronjob.yaml로 저장합니다.

그 후 yaml파일을 apply하면, cronjob이 생성됩니다.

kubectl apply -f cronjob.yaml 
cronjob.batch/hello created

kubectl get cj
NAME    SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   * * * * *   False     1        8s              9s


1분마다 job이 실행되는 것을 확인할 수 있습니다.

kubectl get jobs
NAME                  COMPLETIONS   DURATION   AGE
hello-1663566840      1/1           2s         64s
hello-1663566900      1/1           2s         4s


job에게 명시한 작업이 정상적으로 수행되고 있는지 확인해보겠습니다.

kubectl get po | grep hello
hello-1663566840-2hprg                                    0/1     Completed   0          100s
hello-1663566900-wvfwq                                0/1     Completed   0          40s


kubectl logs <pod name>

kubectl logs hello-1663566900-wvfwq
Mon Sep 19 14:55:08 KST 2022
Hello from the Kubernetes cluster

실제 pod의 로그를 보니, 현재 시간과 메시지가 잘 출력 되고 있습니다.


그렇다면, cronjob에 일정을 설정하는 방법에 대해 알아보겠습니다.


# ┌───────────── minute (0 - 59)

# │ ┌───────────── hour (0 - 23)

# │ │ ┌───────────── day of the month (1 - 31)

# │ │ │ ┌───────────── month (1 - 12)

# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;

# │ │ │ │ │                 7 is also Sunday on some systems)

# │ │ │ │ │                 OR sun, mon, tue, wed, thu, fri, sat

# │ │ │ │ │

# * * * * *

위와 같이 cronjob에 일정을 설정할 때에는, 분 시 일 월 요일 순서로 설정합니다.

예를 들어, 하루에 한번 자정에 실행되도록 하려면 spec.schedule에 0 0 * * * 으로 작성할 수 있습니다.



마무리

  • cronjob은 scheduling되는 시점에 job을 생성합니다.

  • job은 그 job이 대표하는 pod를 관리하게 됩니다.

  • cronjob 실행시간 설정은 여기를 확인해주세요.

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300