本文へスキップ
BecomeCoder

Kubernetesコース · 第3章 ワークロード ― 複製と無停止デプロイ · レッスン18

Job と CronJob ― 使い捨て・定期実行

ローカル実施

導入

これまでのワークロードは「動き続ける(常駐)」ものでした。しかし世の中には「一度実行して、終わったら止まってよい」処理もあります。バッチ処理向けの Job、それを定期実行する CronJob を見ていきましょう。

説明

Job(ジョブ) は、完了したら終わる使い捨ての処理を扱うワークロードです。データの一括変換、集計バッチ、初期化処理など、「最後まで走りきったら成功として終了する」ものに使います。Deployment のように常駐させず、正常終了(第2章の Succeeded フェーズ)を目指します。

CronJob(クロンジョブ) は、その Job を決まったスケジュールで繰り返し実行します。名前は Unix の定期実行の仕組み cron(クロン) に由来し、分 時 日 月 曜日cron 書式で時刻を指定します。毎晩のバックアップ、定期レポート生成などに向きます。

毎日午前3時にバックアップを走らせる CronJob の例です。

apiVersion: batch/v1        # Job/CronJob は batch/v1
kind: CronJob
metadata:
  name: nightly-backup
spec:
  schedule: "0 3 * * *"     # cron書式: 毎日 3:00(分=0 時=3 日/月/曜=毎)
  jobTemplate:              # 実行するJobの型紙
    spec:
      template:
        spec:
          restartPolicy: OnFailure   # 失敗したら再試行
          containers:
            - name: backup
              image: my-backup:1.0
              command: ["sh", "-c", "backup.sh"]

schedule: "0 3 * * *" の5つの値は、左から 分・時・日・月・曜日 を表し、* は「毎」を意味します。この例は「毎日3時0分」。

常駐型(Deployment)との違いをまとめると、こうなります。

DeploymentJobCronJob
動き方動き続ける(常駐)1回走って終わる定期的に走って終わる
目指す状態Running を維持Succeeded(完了)予定時刻ごとにJobを起動
Webサーバー一括集計・移行毎晩のバックアップ

「動かし続けたいのか、やり切って終わりたいのか、定期的に繰り返したいのか」で選び分けます。ここまでで、Kubernetes の代表的なワークロードが一通りそろいました。次章以降では、これらの Pod どうしをつなぐ通信(Service)や設定の扱いへ進んでいきます。