설명
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초에 종료시키는 설정은 아닙니다.