CronJob 시작 마감 시간 점검

늦은 실행을 허용할 범위를 작업의 시간 요구사항에 맞게 정하세요.

설명

CronJob의 starting_deadline_seconds는 예정 시각을 놓친 작업을 얼마나 늦게 시작할 수 있는지 제한합니다. 생략하면 이 시작 지연 제한이 없으므로 지연된 작업이 나중에 실행될 수 있습니다. 모든 누락 실행이 반드시 재실행되는 것은 아닙니다.

이 설정은 실행 중인 Job의 최대 실행 시간이 아닙니다. 늦게 실행해도 되는 작업은 생략할 수 있으며, 시간에 민감한 작업은 허용 지연을 명확히 정해야 합니다.

잠재적 영향

  • 오래 지연된 작업이 현재 데이터나 상태에 부적절한 영향을 줄 수 있습니다.
  • 너무 짧은 deadline은 정상적인 컨트롤러 지연에도 실행을 건너뛰게 할 수 있습니다.

해결 방법

  • 늦은 실행을 제한해야 한다면 starting_deadline_seconds를 허용 가능한 지연에 맞춰 지정하세요. 컨트롤러의 확인 주기와 운영 지연을 고려하세요.
  • 중복 실행에 안전한 작업을 만들고 concurrency_policy와 실패 재시도를 검토하세요. 실행 시간 제한이 필요하면 Job의 active_deadline_seconds를 별도로 설정하세요.

예시

기존 kubernetes_cron_job 형식의 예제입니다. 현재 API를 사용하는 구성에서는 kubernetes_cron_job_v1을 사용하세요. 변경 후의 10초는 짧은 예시 값이며 모든 작업에 적합한 기준이 아닙니다.

변경 전

hcl
resource "kubernetes_cron_job" "example" {
  metadata {
    name = "demo"
  }

  spec {
    schedule = "1 0 * * *"

    job_template {
      metadata {}
      spec {
        template {
          metadata {}
          spec {
            container {
              name    = "hello"
              image   = "busybox"
              command = ["/bin/sh", "-c", "date; echo Hello from the Kubernetes cluster"]
            }
          }
        }
      }
    }
  }
}

변경 후

hcl
resource "kubernetes_cron_job" "example" {
  metadata {
    name = "demo"
  }

  spec {
    schedule                  = "1 0 * * *"
    starting_deadline_seconds = 10

    job_template {
      metadata {}
      spec {
        template {
          metadata {}
          spec {
            container {
              name    = "hello"
              image   = "busybox"
              command = ["/bin/sh", "-c", "date; echo Hello from the Kubernetes cluster"]
            }
          }
        }
      }
    }
  }
}

설명:

  • 변경 전: 시작 지연에 대한 명시적 마감 시간이 없습니다. 늦은 실행이 허용되는지 검토해야 합니다.
  • 변경 후: 예정 시각으로부터 10초의 시작 마감 시간을 둡니다. Job이 시작된 뒤 10초에 종료시키는 설정은 아닙니다.

참조