説明
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 秒で終了させる設定ではありません。