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

参考資料