반응형

 

 

 

 

 

크론잡(CronJob)

기능 상태: Kubernetes v1.21 [stable]

크론잡은 반복 일정에 따라 잡을 만든다.

하나의 크론잡 오브젝트는 크론탭 (크론 테이블) 파일의 한 줄과 같다. 크론잡은 잡을 크론 형식으로 쓰여진 주어진 일정에 따라 주기적으로 동작시킨다.

 

주의
모든 크론잡 일정: 시간은 kube-controller-manager의 시간대를 기준으로 한다.

컨트롤 플레인이 파드 또는 베어 컨테이너에서 kube-controller-manager를 실행하는 경우, kube-controller-manager 컨테이너에 설정된 시간대는 크론잡 컨트롤러가 사용하는 시간대로 결정한다.
주의
v1 CronJob API은 위에서 설명한 타임존 설정을 공식적으로 지원하지는 않는다.

CRON_TZ 또는 TZ 와 같은 변수를 설정하는 것은 쿠버네티스 프로젝트에서 공식적으로 지원하지는 않는다. CRON_TZ 또는 TZ 와 같은 변수를 설정하는 것은 크론탭을 파싱하고 다음 잡 생성 시간을 계산하는 내부 라이브러리의 구현 상세사항이다. 프로덕션 클러스터에서는 사용을 권장하지 않는다.
크론잡 리소스에 대한 매니페스트를 생성할 때에는 제공하는 이름이 유효한 DNS 서브도메인 이름이어야 한다. 이름은 52자 이하여야 한다. 이는 크론잡 컨트롤러는 제공된 잡 이름에 11자를 자동으로 추가하고, 작업 이름의 최대 길이는 63자라는 제약 조건이 있기 때문이다.

 

크론잡

크론잡은 백업, 리포트 생성 등의 정기적 작업을 수행하기 위해 사용된다. 각 작업은 무기한 반복되도록 구성해야 한다(예: 1일/1주/1달마다 1회). 작업을 시작해야 하는 해당 간격 내 특정 시점을 정의할 수 있다.

 

동작 방식

CronJob -> Job 생성

 

 

 

CronJob 사용

# Cronjob 배포 YAML 파일 생성
jinsu@jinsu:~$ cat cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: print-date
            image: busybox
            args: ["date"]
          restartPolicy: OnFailure
jinsu@jinsu:~$

# Cronjob 생성 및 확인
jinsu@jinsu:~$ kubectl apply -f cronjob.yaml 
cronjob.batch/hello created
jinsu@jinsu:~$ kubectl get cronjob
NAME    SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   * * * * *   False     0        <none>          17s
jinsu@jinsu:~$ 

# Cronjob으로 인한 job 생성 확인
jinsu@jinsu:~$ kubectl get job
NAME               COMPLETIONS   DURATION   AGE
hello-1660469460   0/1           3s         3s
jinsu@jinsu:~$
jinsu@jinsu:~$ kubectl get job
NAME               COMPLETIONS   DURATION   AGE
hello-1660469460   1/1           4s         74s
hello-1660469520   1/1           4s         14s
jinsu@jinsu:~$ 
jinsu@jinsu:~$ kubectl get job
NAME               COMPLETIONS   DURATION   AGE
hello-1660469460   1/1           4s         2m45s
hello-1660469520   1/1           4s         105s
hello-1660469580   1/1           4s         45s
jinsu@jinsu:~$

 

CronJob 삭제

# CronJob 삭제
jinsu@jinsu:~$ kubectl delete cronjob hello
cronjob.batch "hello" deleted
jinsu@jinsu:~$

# 삭제확인
jinsu@jinsu:~$ kubectl get cronjob
No resources found in default namespace.
jinsu@jinsu:~$ 
jinsu@jinsu:~$ kubectl get job
No resources found in default namespace.
jinsu@jinsu:~$

 

 

 

 

참고자료

https://kubernetes.io/ko/docs/concepts/workloads/controllers/cron-jobs/

 

반응형

+ Recent posts