【クーロンジョブ(クーバネティス)】

CronJob(Kubernetes) とは?

最終更新:
💡 予定に沿ってJobを作る、Kubernetesの定期実行の管理役

Kubernetesでcron形式のスケジュールに従い、Jobを繰り返し作成するリソース。JobがPodの実行と完了を管理する。予定時刻に必ず1回だけ成功する保証ではなく、重複や実行の欠落も考慮する。

📌 このページのポイント
CronJob → Job → Pod CronJob 0 2 * * * 毎日2:00 timeZone: Etc/UTC Job A 作成済みの例 Job B 別の時刻の例 Pod 処理を実行 Pod 処理を実行 これからのJobは、まだ作られていない 重複・欠落・失敗も考慮する
各JobがPodを1つ扱う簡略例。CronJob→Jobは作成、Job→Podは実行管理で、1回だけの成功を保証する矢印ではない。UTCはEtc/UTCを指定する例。将来のJobを事前作成したPendingとしては描かない。
ひよこ ひよこ
CronJobって何?Jobとはどう違うの?
ペンギン先生 ペンギン先生
JobはPodを作り、決めた処理の完了を管理するリソースだよ。失敗時の再実行や複数Podでの実行もあるので、「今すぐ1回だけ動く」とは限らない。CronJobはスケジュールとJobのひな型を持ち、予定に沿って新しいJobを作る仕組みなんだ。
ひよこ ひよこ
スケジュールはどう書くの?
ペンギン先生 ペンギン先生
scheduleをcron形式で指定するよ。「0 2 * * *」は毎日2時0分、「0 9 * * 1」は毎週月曜9時。分・時・日・月・曜日の5項目だよ。timeZoneにEtc/UTCなどを指定でき、省略するとkube-controller-managerのローカル時間を使う。日本時間のつもりで書くなら、タイムゾーンも確認しよう。
ひよこ ひよこ
前のJobが終わる前に、次の時刻になったら?
ペンギン先生 ペンギン先生
concurrencyPolicyで決めるよ。標準のAllowは重なりを許可。Forbidは前のJobが実行中なら新しい実行を見送り、Replaceは実行中のJobを新しいJobへ置き換える。このルールは同じCronJobのJobにだけ適用され、別のCronJobとの重なりまで禁止するものではないんだ。
ひよこ ひよこ
履歴のJobはたまっていかない?
ペンギン先生 ペンギン先生
終了したJobはsuccessfulJobsHistoryLimitとfailedJobsHistoryLimitで保持件数を決める。標準は成功3件・失敗1件、0なら該当する履歴を保持しないよ。ただし、実行中のJobや別に保存したログの量を、この設定で制限するわけではない。必要な記録の保存方法も考えよう。
ひよこ ひよこ
予定の時刻に、必ず1回だけ成功するの?
ペンギン先生 ペンギン先生
予定時刻ごとの作成は近似的で、Jobが重複したり作成されなかったりする場合がある。Jobが作られても処理成功は別だよ。遅れたJobを作る期限はstartingDeadlineSecondsで制御できる。複数回でも結果が壊れないよう、同じ処理を繰り返しても同じ結果になる冪等性を考え、成功や欠落を確認するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「CronJob」って出てきたら「予定に沿ってJobを繰り返し作るKubernetesの仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「CronJob」 = cron形式で予定するJob
💬 定期実行のcronと、Kubernetesで実行を管理するJobを組み合わせた名前だよ。

参考資料

← 用語集にもどる