Kubernetes CronJob の開始期限の確認

開始の遅延を許容する範囲を、ジョブの時間要件に合わせて決めてください。

説明

startingDeadlineSeconds は、予定時刻を過ぎたジョブをいつまで開始できるかを指定します。省略すると、コントローラーの遅延やクラスターの問題の後で、古いジョブが遅れて実行される場合があります。すべての未実行分が必ず再実行されるわけではありません。

実行中の Job の最大実行時間を制限する設定ではありません。遅い実行が許されるジョブでは省略できますが、時間に敏感な処理では許容遅延を明確にする必要があります。

想定される影響

  • 遅れて実行されたジョブが、現在のデータや状態に不適切な影響を与える場合があります。
  • 短すぎる期限では、通常のコントローラー遅延でも実行が見送られる場合があります。

対処方法

  • 開始遅延を制限する必要がある場合は、spec.startingDeadlineSeconds を許容できる遅延に設定してください。コントローラーの確認間隔と運用上の遅延を考慮してください。
  • 重複実行に耐えられるジョブを設計し、concurrencyPolicy と再試行を確認してください。実行時間も制限する場合は、Job の activeDeadlineSeconds を別途設定してください。

例

スケジュール設定を比較する例です。実際のコマンドと検証済みイメージのバージョンを別途指定し、100 秒はジョブの要件に合わせて調整してください。

変更前

yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: hello
              image: busybox
          restartPolicy: OnFailure

開始遅延の期限を明記していません。遅い実行が許されるか確認する必要があります。

変更後

yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  startingDeadlineSeconds: 100
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: hello
              image: busybox
          restartPolicy: OnFailure

予定時刻から 100 秒の開始期限を設けます。Job の開始後 100 秒で終了させる設定ではありません。

参考資料