はじめに
KubernetesのsubPathについて紹介します。
subPath
subPath
は、1つのボリュームを複数のパスに分けてマウントできる機能です。
複数のパスに分けることで、1つのボリュームを複数の用途で使うことができます。
apiVersion: v1
kind: Pod
metadata:
name: sample-subpath
spec:
containers:
- name: busybox
image: busybox:latest
args:
- sleep
- "999"
volumeMounts:
- mountPath: /tmp
name: volume-subpath
subPath: busybox # ボリュームの中にbusyboxというディレクトリができる
volumes:
- name: volume-subpath
persistentVolumeClaim:
claimName: pvc-vol
実際に試してみる
実際にsubPath
を使ってみたいと思います。
ボリューム作成
まずはマウントするボリューム(volume.yml
)を用意します。
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-vol
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Delete
storageClassName: manual
hostPath:
path: /tmp
type: Directory
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-vol
spec:
resources:
requests:
storage: 1Gi
accessModes:
- ReadWriteMany
storageClassName: manual
kubectl apply -f volume.yml
Pod作成
用意したボリュームを3つのコンテナが含まれるPod(pod.yml
)でマウントします。
2つのコンテナはsubPath
を使い、1つはsubPath
を使わずマウントしてみます。
apiVersion: v1
kind: Pod
metadata:
name: sample-subpath
spec:
containers:
- name: container1
image: busybox:latest
args:
- sleep
- "999"
volumeMounts:
- mountPath: /tmp
name: volume-subpath
subPath: container1 # ボリュームのcontainer1にマウント
- name: container2
image: busybox:latest
args:
- sleep
- "999"
volumeMounts:
- mountPath: /tmp
name: volume-subpath
subPath: container2 # ボリュームのcontainer2にマウント
- name: container3
image: busybox:latest
args:
- sleep
- "999"
volumeMounts:
- mountPath: /tmp # subPathを使わずマウント
name: volume-subpath
volumes:
- name: volume-subpath
persistentVolumeClaim:
claimName: pvc-vol
kubectl apply -f pod.yml
ボリュームの確認
まずはsubPath
でマウントしたcontainer1からマウントしたパスを確認してみると、普通にマウントした時と同様にPVがマウントされています。
❯ kubectl exec -it sample-subpath -c container1 -- /bin/sh
/ # ls /tmp
一方で、subPath
は使っていないが、他のコンテナでsubPath
を使ってマウントしていたボリュームをマウントしたコンテナから確認してみると、subPath
を設定していたディレクトリが作成されているのがわかります。
❯ kubectl exec -it sample-subpath -c container3 -- /bin/sh
/ # ls /tmp
container1 container2
複数のディレクトリに分けてマウントすることで、1つのボリュームを複数の用途で利用できることがわかります。