본문 바로가기

Container/Kubernetes

[K8S] Cronjob Controller

Cronjob Controller ?
사용자가 원하는 시간에 Job 실행 예약 지원

 

Cronjob 안에 Job 컨트롤 기능 포함되어 있다.
job controller로 실행할 Application pod를 주기적으로 반복해서 실행
Linux의 Cronjob의 스케줄링 기능을 Job Contoller에 추가한 API.


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

  • Data Backup
  • Send email
  • Cleaning tasks

Cronjob Schedule: "0 3 1 * *"

  • Minutes
  • Hours
  • Day of the month
  • Month
  • Day of the week (0 ~ 6)

 

[따배쿠] 6-7 쿠버네티스 Cronjob / 컨트롤러 총정리!

-> JobTemplate 안의 Spec은 완전히 동일한 것 알 수 있음

 

[master ~]$ cat > cronjob-exam.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: cronjob-exam
spec:
  schedule: "* * * * *" # 1분에 한 번씩 반복해서 실행
  startingDeadlineSeconds: 500
#  concurrencyPolicy: Allow # Allow : (Default값) 한 번에 여러개의 Job이여도 괜찮다.
  concurrencyPolicy: Forbid # 동작중이면 해당 동작을 실행 X, 한 번에 하나의 Job만 실행
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - echo Hello; sleep 10; echo Bye
          restartPolicy: Never
          
          Every 2.0s: kubectl get pods -o wide                                                                          cs-997982872602-default: Wed Feb 28 08:32:03 2024

# 매 분마다 실행
NAME                          READY   STATUS    RESTARTS   AGE   IP          NODE                                       NOMINATED NODE   READINESS GATES
cronjob-exam-28485152-54mfn   1/1     Running   0          4s    10.4.2.25   gke-cluster-1-default-pool-697aeef7-ccmj   <none>           <none>

Every 2.0s: kubectl get pods -o wide                                                                          cs-997982872602-default: Wed Feb 28 08:32:11 2024
# 10초 뒤에 Completed

NAME                          READY   STATUS      RESTARTS   AGE   IP          NODE                                       NOMINATED NODE   READINESS GATES
cronjob-exam-28485152-54mfn   0/1     Completed   0          12s   10.4.2.25   gke-cluster-1-default-pool-697aeef7-ccmj   <none>           <none>


#1분 지나면 하나 더 실행
NAME                          READY   STATUS      RESTARTS   AGE   IP          NODE                                       NOMINATED NODE   READINESS GATES
cronjob-exam-28485152-54mfn   0/1     Completed   0          65s   10.4.2.25   gke-cluster-1-default-pool-697aeef7-ccmj   <none>           <none>
cronjob-exam-28485153-tbbrb   1/1     Running     0          5s    10.4.2.26   gke-cluster-1-default-pool-697aeef7-ccmj   <none>           <none>


[master ~]$ kubectl get cronjob -o yaml
apiVersion: v1
items:
- apiVersion: batch/v1
  kind: CronJob
  metadata:
    creationTimestamp: "2024-02-28T08:31:44Z"
    generation: 1
    name: cronjob-exam
    namespace: default
    resourceVersion: "712808"
    uid: 7d000dd5-fc5d-4645-a20e-4fb16bf840cd
  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 # Default값, 성공한 Job에 대한 History 3개만 남긴다.
    suspend: false
  status:
    lastScheduleTime: "2024-02-28T08:34:00Z"
    lastSuccessfulTime: "2024-02-28T08:34:13Z"
kind: List
metadata:
  resourceVersion: ""
  
  Every 2.0s: kubectl get pods -o wide                                                                          cs-997982872602-default: Wed Feb 28 08:36:17 2024

NAME                          READY   STATUS      RESTARTS   AGE     IP          NODE                                       NOMINATED NODE   READINESS GATES
cronjob-exam-28485154-8qlj7   0/1     Completed   0          2m18s   10.4.2.27   gke-cluster-1-default-pool-697aeef7-ccmj   <none>           <none>
cronjob-exam-28485155-c75m9   0/1     Completed   0          78s     10.4.2.28   gke-cluster-1-default-pool-697aeef7-ccmj   <none>           <none>
cronjob-exam-28485156-4ndg5   0/1     Completed   0          18s     10.4.2.29   gke-cluster-1-default-pool-697aeef7-ccmj   <none>           <none>

# 삭제
[master ~]$ kubectl delete cronjob cronjob-exam
cronjob.batch "cronjob-exam" deleted

 

 

# 컨트롤러 총정리

  • Replication Controller : Pod 개수 보장 컨트롤러
  • ReplicaSet: Replication Controller + 풍부한 Lable 지원
  • Deployment : ReplicaSet을 제어(Rolling update + Roll back)
  • DaemonSet : Node당 1개씩 실행되도록 보장 (ex, log agent..)
  • StatefulSet : Pod의 이름 보장
  • Job: Pod의 정상종료 관리

 

 

반응형

'Container > Kubernetes' 카테고리의 다른 글

[K8S] Ingress Controller  (0) 2024.03.07
[K8S] Service  (0) 2024.03.05
[K8S] Job Controller  (0) 2024.02.27
[K8S] Statefulset  (0) 2024.02.26
[K8S] DaemonSet  (0) 2024.02.26