本文へスキップ
CronExplain

Kubernetes CronJob スケジュールの解説

Kubernetes の CronJob は、標準の Cron 構文で書かれた繰り返しスケジュールに従って Job を作成します。spec.schedule の値を貼り付けて、その意味と次に Job が作成される時刻を確認しましょう。

意味

Kubernetes CronJob: 標準の 5 フィールドとマクロ。spec.timeZone を設定するとコントローラー以外のタイムゾーンを使えます。

✓ 有効 · 意味

時ちょうど, 6 時間ごと

プリセット

次の 10 回の実行

#UTC の時刻あなたの現地時刻
1——
2——
3——
4——
5——
6——
7——
8——
9——
10——

他の方言での同じスケジュール

  • 標準 crontab0 */6 * * *
  • Quartz0 0 */6 * * ?
  • AWS EventBridgecron(0 */6 * * ? *)EventBridge ルールは UTC を使用します。
  • Spring0 0 */6 * * *

ビジュアルビルダー

フィールドごとに値を選択します。ビルダーは標準の 5 フィールド式を作成し、使用時に選択中の方言へ変換します。

分
時
日
月
曜日
0 9 * * 1-5

schedule フィールド

spec.schedule には 5 フィールドの Cron 式を指定します。たとえば "0 */6 * * *" は 6 時間ごとです。Kubernetes は @hourly、@daily、@weekly、@monthly、@yearly などのマクロにも対応しています。アスタリスクが誤解釈されないよう、YAML では値を引用符で囲みましょう。

spec.timeZone によるタイムゾーン指定

タイムゾーンを指定しない場合、スケジュールは kube-controller-manager のタイムゾーン(通常は UTC)で解釈されます。Kubernetes 1.27 以降は spec.timeZone に Asia/Tokyo のような IANA 名を設定できます。ツールで同じタイムゾーンを選ぶと、夏時間の切り替えも含めて正確な作成時刻をプレビューできます。

実行の取りこぼしと同時実行

コントローラーが予定時刻を逃した場合、startingDeadlineSeconds によって Job がどれだけ遅れて開始できるかが決まります。concurrencyPolicy は前回の実行がまだ動いているときの動作(Allow、Forbid、Replace)を制御します。毎分のような高頻度のスケジュールでは特に注意しましょう。

テスト中は kubectl create job --from=cronjob/<name> <job-name> ですぐに 1 回実行でき、kubectl get cronjob で LAST SCHEDULE と ACTIVE の列を確認できます。CronJob オブジェクトのイベントを見ると、予定時刻がスキップされた理由や Job の起動に失敗した理由が分かります。

最小限のマニフェスト

CronJob は apiVersion batch/v1、kind CronJob を使い、spec.schedule、任意の spec.timeZone、実行する Pod を記述する jobTemplate を持ちます。suspend: true を設定すると削除せずにスケジュールを一時停止でき、successfulJobsHistoryLimit と failedJobsHistoryLimit でデバッグ用に残す完了済み Job の数を調整できます。

よくある質問

Kubernetes CronJob は秒に対応していますか?
いいえ。スケジュールは 5 フィールドなので、最短間隔は 1 分です。
スケジュールに CRON_TZ は使えますか?
使えません。TZ や CRON_TZ の接頭辞はサポートされていないので、spec.timeZone フィールドを使ってください。
0 */6 * * * はどういう意味ですか?
6 時間ごとの正時、つまり 00:00、06:00、12:00、18:00 に実行されます。
CronJob が 2 回実行された、または実行されなかったのはなぜ?
startingDeadlineSeconds と concurrencyPolicy、そしてコントローラーが停止していなかったかを確認してください。CronJob は予定時刻ごとにおおむね 1 つの Job を作成しますが、保証はされません。