본문 바로가기

Kubernetes

[Kubernetes] CronJob

728x90
반응형

CronJob 이란?

 - 사용자가 원하는 시간에 JOB 실행 예약 지원

 - job 컨트롤러로 실행할 Application Pod를 주기적으로 반복해서 실행

   Linux의 cronjab의 스케줄링 기능을 Job Controller에 추가한 API

   다음과 같은 반복해서 실행하는 Job을 운영해야 할 때 사용

     1. Data Backup 

     2. Send email

     3. Cleaning tasks

 - Cronjob Schedule : "0  3  1  *  *" → " 매월 1일 3시 정각에 반복해서 실행"

     . 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)  

 

EX)

 - 매월 1일 아침 9시 정각에 job을 실행 "0  9  1  *  *"

 - 주중 새벽 3시에 job을 실행 "0  3  *  *  1-5"

 - 주말 새벽 3시에 job을 실행 "0  3  *  *  0,6"

 - job을 5분 마다 한번씩 실행 "*/5  *  *  *  *"

 - 2시간 마다 매시 정각에 한번씩 실행 "0  */2  *  *  *"

 

cronjob-exam.yaml

 - 500초 안에 컨테이너가 실행되지 못하면 해당 작업 취소하는 예제

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob-exam
spec:
  schedule: "* * * * *"
  startingDeadlineSeconds: 500
#  concurrencyPolicy: Allow
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - echo Hello; sleep 10; echo Bye
          restartPolicy: Never

concurrencyPolicy: Allow → default 값이며 한번에 여러개의 job이 실행해도 괜찮다는 옵션

concurrencyPolicy: Forbid → 한번에 하나씩만 동작

 

kubernetes 1.25 버전을 사용중인 상태에서 apiVersion: batch/v1beta1 사용시 아래와 같은 에러가 발생

yaml 파일에서 apiVersion: batch/v1beta1 → batch/v1 으로 수정

# kubectl create -f cronjob-exam.yaml
error: resource mapping not found for name: "cronjob-exam" namespace: "" from "cronjob-exam.yaml": no matches for kind "CronJob" in version "batch/v1beta1"
ensure CRDs are installed first

 

1분 마다 pod 실행되며 Forbid 설정을 했기 때문에 한번에 하나씩 동작

# kubectl create -f cronjob-exam.yaml
cronjob.batch/cronjob-exam created

# kubectl get pods -o wide
NAME                          READY   STATUS      RESTARTS   AGE   IP          NODE                NOMINATED NODE   READINESS GATES
cronjob-exam-27848899-jz54d   0/1     Completed   0          99s   10.44.0.1   node2.example.com   <none>           <none>
cronjob-exam-27848900-8f8qr   0/1     Completed   0          39s   10.36.0.1   node1.example.com   <none>           <none>

 

cronjab 을 yaml 형식으로 확인할 때 "successfulJobsHistoryLimit: 3" 부분이 3으로 설정 되었기 때문에 pod는 계속 생성

되지 않고 3개 까지만 남겨준다. 

# kubectl get cronjobs.batch -o yaml 
apiVersion: v1
items:
- apiVersion: batch/v1
  kind: CronJob
  metadata:
    creationTimestamp: "2022-12-13T12:18:18Z"
    generation: 1
    name: cronjob-exam
    namespace: default
    resourceVersion: "90624"
    uid: a9207f42-e653-4f6e-82bb-c5c3071f95d2
  spec:
    concurrencyPolicy: Forbid
    failedJobsHistoryLimit: 1
    jobTemplate:
      metadata:
        creationTimestamp: null
      spec:
        template:
          metadata:
            creationTimestamp: null
          spec:
            containers:
            - args:
              - /bin/sh
              - -c
              - echo Hello; sleep 10; echo Bye
              image: busybox
              imagePullPolicy: Always
              name: hello
              resources: {}
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
            dnsPolicy: ClusterFirst
            restartPolicy: Never
            schedulerName: default-scheduler
            securityContext: {}
            terminationGracePeriodSeconds: 30
    schedule: '* * * * *'
    startingDeadlineSeconds: 500
    successfulJobsHistoryLimit: 3
    suspend: false
  status:
    lastScheduleTime: "2022-12-13T12:22:00Z"
    lastSuccessfulTime: "2022-12-13T12:22:17Z"
kind: List
metadata:
  resourceVersion: ""

 

cronjob 삭제

# kubectl delete cronjobs.batch cronjob-exam 
cronjob.batch "cronjob-exam" deleted

 

 

[참고]

- https://www.youtube.com/watch?v=eAvoH0Cqd7E

728x90
반응형

'Kubernetes' 카테고리의 다른 글

[Kubernetes] Service 4가지 종류 실습  (0) 2022.12.14
[Kubernetes] Service 개념과 종류  (0) 2022.12.13
[Kubernetes] Job Controller  (0) 2022.12.12
[Kubernetes] StatefulSet  (0) 2022.12.12
[Kubernetes] DaemonSet + RollingUpdate  (1) 2022.12.12