【Kubernetes】ボリュームでsubPathを使ってみる

2022.08.22
2024.03.24
Kubernetes
PersistentVolumePersistentVolumeClaimsubPath

はじめに

KubernetesのsubPathについて紹介します。

subPath

subPathは、1つのボリュームを複数のパスに分けてマウントできる機能です。

複数のパスに分けることで、1つのボリュームを複数の用途で使うことができます。

1apiVersion: v1
2kind: Pod
3metadata:
4  name: sample-subpath
5spec:
6  containers:
7  - name: busybox
8    image: busybox:latest
9    args:
10      - sleep
11      - "999"
12    volumeMounts:
13    - mountPath: /tmp
14      name: volume-subpath
15      subPath: busybox # ボリュームの中にbusyboxというディレクトリができる
16  volumes:
17  - name: volume-subpath
18    persistentVolumeClaim:
19      claimName: pvc-vol

実際に試してみる

実際にsubPathを使ってみたいと思います。

ボリューム作成

まずはマウントするボリューム(volume.yml)を用意します。

1apiVersion: v1
2kind: PersistentVolume
3metadata:
4  name: pv-vol
5spec:
6  capacity:
7    storage: 1Gi
8  accessModes:
9  - ReadWriteMany
10  persistentVolumeReclaimPolicy: Delete
11  storageClassName: manual
12  hostPath:
13    path: /tmp
14    type: Directory
15---
16apiVersion: v1
17kind: PersistentVolumeClaim
18metadata:
19  name: pvc-vol
20spec:
21  resources:
22    requests:
23      storage: 1Gi
24  accessModes:
25  - ReadWriteMany
26  storageClassName: manual
1kubectl apply -f volume.yml

Pod作成

用意したボリュームを3つのコンテナが含まれるPod(pod.yml)でマウントします。

2つのコンテナはsubPathを使い、1つはsubPathを使わずマウントしてみます。

1apiVersion: v1
2kind: Pod
3metadata:
4  name: sample-subpath
5spec:
6  containers:
7  - name: container1
8    image: busybox:latest
9    args:
10      - sleep
11      - "999"
12    volumeMounts:
13    - mountPath: /tmp
14      name: volume-subpath
15      subPath: container1 # ボリュームのcontainer1にマウント
16  - name: container2
17    image: busybox:latest
18    args:
19      - sleep
20      - "999"
21    volumeMounts:
22    - mountPath: /tmp
23      name: volume-subpath
24      subPath: container2 # ボリュームのcontainer2にマウント
25  - name: container3
26    image: busybox:latest
27    args:
28      - sleep
29      - "999"
30    volumeMounts:
31    - mountPath: /tmp # subPathを使わずマウント
32      name: volume-subpath
33  volumes:
34  - name: volume-subpath
35    persistentVolumeClaim:
36      claimName: pvc-vol
1kubectl apply -f pod.yml

ボリュームの確認

まずはsubPathでマウントしたcontainer1からマウントしたパスを確認してみると、普通にマウントした時と同様にPVがマウントされています。

1❯ kubectl exec -it sample-subpath -c container1 -- /bin/sh
2
3/ # ls /tmp
4

一方で、subPathは使っていないが、他のコンテナでsubPathを使ってマウントしていたボリュームをマウントしたコンテナから確認してみると、subPathを設定していたディレクトリが作成されているのがわかります。

1❯ kubectl exec -it sample-subpath -c container3 -- /bin/sh
2
3/ # ls /tmp
4container1  container2

複数のディレクトリに分けてマウントすることで、1つのボリュームを複数の用途で利用できることがわかります。

参考

Support

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

buy me a coffee
Share

Profile

author

Masa

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

buy me a coffee