【Kubernetes】JobとCronJobを動かしてみる

2021.10.22
2024.03.24
Kubernetes
CronJobJob

本ページはAmazonアフィリエイトのリンクを含みます。

はじめに

KubernetesのJobとCronJobについて、ざっくりどんなものか解説し実際に動かしてみたいと思います。

JobとCronJobとは

Job

Jobとは、1つ以上のPodを作成し、指定された数のPodの処理が成功するまで動き続けるオブジェクトです。

Jobは1回しか動かさないような処理を実行する場合に便利です。

Jobには以下のような特性があります。

  • 1つ以上のPodを作成
  • 指定された数が成功したら完了
  • 成功するまで動き続ける
  • 並列処理が可能

CronJob

CronJobとは、スケジュールに基づきJobを作成するオブジェクトです。

cron形式で記述されたスケジュールでJobが作成されます。バックアップやメール送信のような定期的に行うタスクに便利です。

Jobを動かしてみる

まずはJobを実際に動かしてみます。

Jobのマニフェストjob.ymlを作成します。

1apiVersion: batch/v1
2kind: Job
3metadata:
4  name: hoge
5spec:
6  parallelism: 3
7  completions: 3
8  template:
9    metadata:
10      labels:
11        app: hoge
12    spec:
13      containers:
14      - name: hoge
15        image: alpine:latest
16        command: ["/bin/sh"]
17        args:
18          - "-c"
19          - |
20            echo hoge!
21            sleep 5
22            echo hogehoge!
23            sleep 5
24            echo hogehogehoge!
25      restartPolicy: Never

こちらは3つのPodを並列で処理し、3つのPodが正常処理したら完了になるJobです。実行する内容はシンプルに3つのメッセージを表示するだけになっています。

Jobを作成します。

1❯ kubectl apply -f job.yml
2job.batch/hoge created

JobとPodを確認してみると、3つのPodが作成され、それぞれのPodが正常終了していることがわかります。

1❯ kubectl get job
2NAME   COMPLETIONS   DURATION   AGE
3hoge   3/3           25s        30s
4
5❯ kubectl get pod
6NAME         READY   STATUS      RESTARTS   AGE
7hoge-2qbww   0/1     Completed   0          34s
8hoge-fj6mh   0/1     Completed   0          34s
9hoge-z7njc   0/1     Completed   0          34s

Jobでのログを確認すると3つのPod分のメッセージが確認できます。

1❯ kubectl logs -l app=hoge
2hoge!
3hogehoge!
4hogehogehoge!
5hoge!
6hogehoge!
7hogehogehoge!
8hoge!
9hogehoge!
10hogehogehoge!

それぞれのPodでのログを確認する場合は、以下のように作成されたPodを確認してからログを取得します。

1❯ kubectl describe job
2Name:           hoge
3Namespace:      default
4Selector:       controller-uid=b2f305f8-f1a1-48e9-aefd-c3839671293a
5Labels:         app=hoge
6                controller-uid=b2f305f8-f1a1-48e9-aefd-c3839671293a
7                job-name=hoge
8Annotations:    <none>
9Parallelism:    3
10Completions:    3
11
12~~ 中略 ~~
13
14Events:
15  Type    Reason            Age    From            Message
16  ----    ------            ----   ----            -------
17  Normal  SuccessfulCreate  5m5s   job-controller  Created pod: hoge-2qbww
18  Normal  SuccessfulCreate  5m5s   job-controller  Created pod: hoge-fj6mh
19  Normal  SuccessfulCreate  5m5s   job-controller  Created pod: hoge-z7njc
20  Normal  Completed         4m40s  job-controller  Job completed

以下のように個別のPodのログが確認できます。

1❯ kubectl logs hoge-2qbww
2hoge!
3hogehoge!
4hogehogehoge!

Jobが完了しても、Jobと関連するPodはログが確認できるように残っているので、削除しておきます。

1❯ kubectl delete -f job.yml
2job.batch "hoge" deleted

CronJobを動かしてみる

続いて、CronJobを動かしてみます。

CronJobのマニフェストcronjob.ymlを作成します。

1apiVersion: batch/v1
2kind: CronJob
3metadata:
4  name: hoge
5spec:
6  schedule: "*/1 * * * *"
7  jobTemplate:
8    spec:
9      template:
10        metadata:
11          labels:
12            app: hoge
13        spec:
14          containers:
15          - name: hoge
16            image: alpine:latest
17            command: ["/bin/sh"]
18            args:
19              - "-c"
20              - |
21                echo hoge!
22                sleep 5
23                echo hogehoge!
24                sleep 5
25                echo hogehogehoge!
26          restartPolicy: OnFailure

こちらのCronJobは1分ごとにJobを作成します。

CronJobを作成します。

1❯ kubectl apply -f cronjob.yml
2cronjob.batch/hoge created

しばらくしてからCronJob、Job、Podを確認してみます。

1❯ kubectl get cronjob
2NAME   SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
3hoge   */1 * * * *   False     0        24s             3m2s
4
5❯ kubectl get job
6NAME            COMPLETIONS   DURATION   AGE
7hoge-27247746   1/1           14s        2m27s
8hoge-27247747   1/1           15s        87s
9hoge-27247748   1/1           14s        27s
10
11❯ kubectl get pod
12NAME                  READY   STATUS      RESTARTS   AGE
13hoge-27247746-x58st   0/1     Completed   0          2m29s
14hoge-27247747-nrbjb   0/1     Completed   0          89s
15hoge-27247748-gtjlb   0/1     Completed   0          29s

JobとPodが定期的に作成され、実行していることがわかります。

このままではずっと動き続けてしまうので、最後に削除しておきます。

1❯ kubectl delete -f cronjob.yml
2cronjob.batch "hoge" deleted

まとめ

  • Jobは1回限りのタスクを実行
  • CronJobは定期的にタスクを実行

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee