Kubernetes CronJob:コンテナ環境での定期実行

目次
コンテナ環境での定期実行:Kubernetes CronJob の概要と基本的な使い方
従来のLinuxサーバーでは、cron や systemd timer を使って 定期実行を管理してきました。
しかし、コンテナ環境やクラウドネイティブな構成では、 Pod単位で処理を実行する必要があります。
そこで利用されるのが Kubernetes CronJob です。
Kubernetes CronJob は、 Kubernetesクラスタ上で 指定した時間にPodを起動する仕組みです。
cron のように時間ベースで処理を実行できますが、 実行単位はコンテナ(Pod)になります。
Kubernetes CronJobとは何か
CronJob は、Kubernetes のリソースの一種です。
内部的には、
- CronJob
- Job
- Pod
という階層で動作します。
指定時刻になると CronJob が Job を生成し、 Job が Pod を起動して処理を実行します。
CronJobが適している場面
- 定期バックアップ処理
- データベース集計バッチ
- ログ収集・転送処理
- 定期レポート生成
- APIポーリング処理
コンテナ環境で運用しているアプリケーションの 定期バッチは、CronJobで統一するのが一般的です。
基本的なCronJob定義(YAML例)
以下は、毎日3時に実行される簡単な例です。
apiVersion: batch/v1
kind: CronJob
metadata:
name: sample-cronjob
spec:
schedule: "0 3 * * *"
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
containers:
- name: sample
image: alpine
command: ["/bin/sh", "-c", "echo Hello Kubernetes"]
restartPolicy: OnFailure
schedule には、 通常の cron と同じ書式を使用します。CronJobの適用
$ kubectl apply -f cronjob.yamlこれでCronJobが作成されます。
CronJobの確認
$ kubectl get cronjobs作成されたCronJob一覧を確認できます。
実行されたJobの確認
$ kubectl get jobs実行履歴を確認できます。
Podの確認
$ kubectl get pods実際に起動されたPodの状態を確認できます。
ログ確認
$ kubectl logs Pod名コンテナの標準出力ログを確認できます。
主な設定項目
- schedule:実行スケジュール(cron形式)
- concurrencyPolicy:同時実行制御
- successfulJobsHistoryLimit:成功履歴保持数
- failedJobsHistoryLimit:失敗履歴保持数
- startingDeadlineSeconds:実行遅延許容時間
特に concurrencyPolicy は重要です。
- Allow(デフォルト)
- Forbid(重複禁止)
- Replace(前回を停止して再実行)
CronJobのメリット
- コンテナネイティブ
- スケール可能
- クラスタ全体で管理可能
- リソース制限が設定可能
- 失敗時の再実行制御が可能
クラウド環境やマイクロサービス構成では、 非常に相性が良い仕組みです。
Cronとの違い
- cron: 単一Linuxサーバー上で実行
- Kubernetes CronJob: クラスタ上でPodとして実行
CronJobは単なる時間実行ではなく、 「コンテナとして処理を実行する」 という点が最大の違いです。
注意点
- クラスタが停止していると実行されない
- 実行履歴管理が必要
- リソース設定を適切に行う必要がある
- 時間同期(NTP)が重要
まとめ
Kubernetes CronJob は、 コンテナ環境における定期実行の標準的な仕組みです。
cronと同じスケジュール書式を使用しながら、 Podとして処理を実行できるため、 クラウドネイティブな設計に適しています。
単体サーバーでは cron、 systemd環境では timer、 アプリケーション非同期処理では Celery、 CI/CDでは Jenkins、 そしてコンテナ環境では CronJob。
用途に応じて適切に使い分けることが、 現代的なLinux・クラウド運用の鍵となります。





