본문 바로가기
INFRA/DevOps

[k8s] Cronjob

by BTC_비웃는사나이 2022. 11. 1.

Cronjob이란?

  • 사용자가 원하는 시간에 job 실행 예약 지원
  • Jon controller로 실행할 application pod를 주기적으로 반복해서 실행
  • Linux의 cronjob의 스케줄링 기능을 job controller에 추가한 API
  • Data backup, Send emails, Cleaning tasks과 같은 반복해서 실행하는 job을 운영해야 할 때 사용
  • Crobjob Schedule : “분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-6)”
    • Minutes (from 0 to 59)
      • * * * * * : 1분마다 실행
      • */5 * * * * : 5분마다 실행
    • 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)
  • definition
apiVersion: batch/v1
kind: CronJob
metadata:
  name: cronjob-exam
spec:
  schedule: "* * * * *"     # 반복해서 실행할 job의 스케줄 기입
  jobTemplate:              # job controller의 내용을 jobTemplate에 기입
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - echo Hello; sleep 10; echo Bye
          restartPolicy: Never
 

 

[ Hands - on ]

1. concurrencyPolicy: Forbid

  • cronjob yaml 파일 생성
    • startingDeadlineSeconds : 지정된 시간(초) 안에 job을 실행하지 못하면 job을 cancel
    • concurrencyPolicy :
      • Allow : default, 한번에 여러 개의 job이 실행
      • Forbid : 한번에 하나의 job만 실행
apiVersion: batch/v1
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
  • 한번에 하나의 job만 실행되는 것을 확인
NAME                          READY   STATUS      RESTARTS   AGE     IP               NODE                NOMINATED NODE   READINESS GATES
cronjob-exam-27577547-x4lrd   0/1     Completed   0          2m32s   192.168.221.19   node2.example.com   <none>           <none>
cronjob-exam-27577548-4n99d   0/1     Completed   0          92s     192.168.221.20   node2.example.com   <none>           <none>
cronjob-exam-27577549-gzj8r   0/1     Completed   0          32s     192.168.221.21   node2.example.com   <none>           <none>

 

2. concurrencyPolicy: Forbid

  • cronjob yaml파일 생성
apiVersion: batch/v1
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 100; echo Bye
          restartPolicy: Never
  • 한번에 여러 개의 job이 실행되는 것을 확인
NAME                          READY   STATUS      RESTARTS   AGE    IP               NODE                NOMINATED NODE   READINESS GATES
cronjob-exam-27577559-dxdx2   0/1     Completed   0          3m4s   192.168.221.29   node2.example.com   <none>           <none>
cronjob-exam-27577560-6bjt6   0/1     Completed   0          2m4s   192.168.221.30   node2.example.com   <none>           <none>
cronjob-exam-27577561-rzsd6   1/1     Running     0          64s    192.168.221.31   node2.example.com   <none>           <none>
cronjob-exam-27577562-n2z2d   1/1     Running     0          4s     192.168.221.32   node2.example.com   <none>           <none>

 

 

참고 : [따배쿠] 6-7. 쿠버네티스 CronJob / 컨트롤러 총정리!

'INFRA > DevOps' 카테고리의 다른 글

[k8s] NodePort  (0) 2022.11.15
[K8s] Cluster IP  (0) 2022.11.09
[K8s] Job Controller  (0) 2022.10.24
[k8s] Statefulset  (0) 2022.10.19
[NGINX] Reverse Proxy  (0) 2022.10.11

댓글