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

スポンサーリンク

はじめに

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つのボリュームを複数の用途で利用できることがわかります。

参考

タイトルとURLをコピーしました