Kubernetes

[k8s] Cronjob/Job - startingDeadlineSeconds/activeDeadlineSeconds

비번변경 2023. 6. 27. 12:17

개요

정기적으로 수행하는 작업을 위한 Cronjob, 그리고 일반적인 Job은 각각 startingDeadlineSeconds, activeDeadlineSeconds라는 설정을 가지고 있다. 각각의 역할에 혼동이 생겨 개념을 적어둔다.

 

 

Job - activeDeadlineSeconds

일반적으로 Pod 실패나 컨테이너 오류로 종료되지 않는 한, Job은 중단되지 않고 실행된다. 만약 한 번 실행한 Job이 특정 시간 안에 종료되어야 한다면 activeDeadlineSeconds 지정하면 된다.

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-with-timeout
spec:
  backoffLimit: 5
  activeDeadlineSeconds: 100
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

위의 예시는 100초 내에 Job이 완료되어야 성공 상태로 종료될 수 있다. 만약 activeDeadlineSeconds를 초과하면 실행 중이던 Pod가 종료되고 reason: DeadlineExceeded / type: Failed로 Job이 종료된다.

 

 

Cronjob - startingDeadlineSeconds

Cronjob에 설정하는 startingDeadlineSeconds은 Job의 시작 기한으로, 어떤 이유로든 Job이 스케쥴 시간을 놓친 경우 스케줄을 시작할 수 있는 기한을 의미한다. 만약 startingDeadlineSeconds를 지나면 Job이 시작되지 않고, 실패한 것으로 처리한다. 필드를 지정하지 않으면 시작 기한이 없는 것에 해당한다. 

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  startingDeadlineSeconds: 200
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

위의 예시의 경우 스케쥴이 지나고 200초까지는 Job이 실행될 수 있다. 참고로 크론잡 컨트롤러가 10초 주기로 상태를 확인하기 때문에 startingDeadlineSeconds를 10초 미만으로 설정하면 크론잡이 스케줄되지 않을 수 있으므로 주의해야 한다.

 

 

참고 문서

https://kubernetes.io/ko/docs/concepts/workloads/controllers/job/

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