0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CronJob で Ephemeral Volume 使用時の PVC 削除挙動を調べた

Posted at

はじめに

CronJob で Ephemeral Volume を使ったとき、「一時的なボリューム」なのに Job の履歴が生きてる間は PVC が消えないという、個人的にはちょっと意外な動作をすることに気付きました。

検証環境:Windows 11 + kind

やってみたこと

こんな CronJob を作って試してみました:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: test-cronjob
spec:
  timeZone: "Asia/Tokyo"
  schedule: "0 0 * * *" # 毎日午前0時に実行
  successfulJobsHistoryLimit: 3 # 成功したジョブの履歴を残す
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: sample-app
              image: busybox
              command:
                [
                  "sh",
                  "-c",
                  'echo "this is log file" > /local-cache/logs.txt && sleep 60',
                ]
              volumeMounts:
                - name: ephemeral-vol
                  mountPath: /local-cache
          restartPolicy: Never
          volumes:
            - name: ephemeral-vol
              ephemeral:
                volumeClaimTemplate:
                  spec:
                    accessModes: ["ReadWriteOnce"]
                    storageClassName: standard
                    resources:
                      requests:
                        storage: 100Mi

ポイントは下記です:

  • Job の履歴を 3 件残す設定(successfulJobsHistoryLimit: 3)
  • Ephemeral Volume で一時的なストレージを用意

実際に動かしてみた

最初に 3 つの Job を作成

> kubectl create job job1 --from=cronjob/test-cronjob
> kubectl create job job2 --from=cronjob/test-cronjob
> kubectl create job job3 --from=cronjob/test-cronjob

完了後の状態チェック:

> kubectl get po
NAME         READY   STATUS      RESTARTS   AGE
job1-gtbhp   0/1     Completed   0          3m49s
job2-6t9vd   0/1     Completed   0          71s
job3-kw97p   0/1     Completed   0          67s
> kubectl get job
NAME   STATUS     COMPLETIONS   DURATION   AGE
job1   Complete   1/1           72s        3m56s
job2   Complete   1/1           68s        78s
job3   Complete   1/1           68s        74s
> kubectl get pvc
NAME                       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
job1-gtbhp-ephemeral-vol   Bound    pvc-ef241f24-56d8-476e-9fc8-8dc8754a0a44   100Mi      RWO            standard       <unset>                 4m17s
job2-6t9vd-ephemeral-vol   Bound    pvc-43ce0357-ea58-4248-8a35-297163060b91   100Mi      RWO            standard       <unset>                 99s
job3-kw97p-ephemeral-vol   Bound    pvc-9d54c045-ef9a-4a1b-9c68-ccc72fa7fc9b   100Mi      RWO            standard       <unset>                 95s

Job が完了したにも関わらず、一時的であるはず (?) の volume が残ってます。

4 つ目の Job を実行してみる

履歴制限の 3 を超える 4 つ目の Job を作ってみました:

> kubectl create job job4 --from=cronjob/test-cronjob

Job 実行中の状態を確認すると、4 つの PVC が存在してることが分かります。

> kubectl get pvc
NAME                       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
job1-gtbhp-ephemeral-vol   Bound    pvc-ef241f24-56d8-476e-9fc8-8dc8754a0a44   100Mi      RWO            standard       <unset>                 6m22s
job2-6t9vd-ephemeral-vol   Bound    pvc-43ce0357-ea58-4248-8a35-297163060b91   100Mi      RWO            standard       <unset>                 3m44s
job3-kw97p-ephemeral-vol   Bound    pvc-9d54c045-ef9a-4a1b-9c68-ccc72fa7fc9b   100Mi      RWO            standard       <unset>                 3m40s
job4-wkk4b-ephemeral-vol   Bound    pvc-a22c6323-e8a9-4b6b-a6f1-56a617d8ddf2   100Mi      RWO            standard       <unset>                 10s
> kubectl get job
NAME   STATUS     COMPLETIONS   DURATION   AGE
job1   Complete   1/1           72s        6m27s
job2   Complete   1/1           68s        3m49s
job3   Complete   1/1           68s        3m45s
job4   Running    0/1           15s        15s

Job 完了後にどうなる?

job4 が完了した後、job4 が完了したタイミングで、最古の job1 とその PVC がきれいに消えました。

> kubectl get job
NAME   STATUS     COMPLETIONS   DURATION   AGE
job2   Complete   1/1           68s        4m45s
job3   Complete   1/1           68s        4m41s
job4   Complete   1/1           68s        71s
> kubectl get pvc
NAME                       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
job2-6t9vd-ephemeral-vol   Bound    pvc-43ce0357-ea58-4248-8a35-297163060b91   100Mi      RWO            standard       <unset>                 4m48s
job3-kw97p-ephemeral-vol   Bound    pvc-9d54c045-ef9a-4a1b-9c68-ccc72fa7fc9b   100Mi      RWO            standard       <unset>                 4m44s
job4-wkk4b-ephemeral-vol   Bound    pvc-a22c6323-e8a9-4b6b-a6f1-56a617d8ddf2   100Mi      RWO            standard       <unset>                 74s

まとめ

  • Ephemeral Volume の PVC は、対応する Job の履歴が残ってる間は消えない
  • successfulJobsHistoryLimit で設定した制限に引っかかると、古い Job と一緒に PVC も削除される
  • 新しい Job が作られてから古いのが削除されるまでの間、一時的に制限を超える数の PVC が存在することがある
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?