【Kubernetes】PVとPVCで永続ボリュームを使う

スポンサーリンク

はじめに

KubernetesのPersistentVolume(PV)とPersistentVolumeClaim(PVC)についてざっくり紹介し、PVとPVCを使って永続ボリュームを試してみたいと思います。

PVとPVC

PersistentVolume(PV)とは、永続化のボリューム自体を表すリソースです。

PersistentVolumeClaim(PVC)とは、PVに対して必要な容量を確保するリソースです。

PVでボリュームを用意して、PVCで実際に必要な容量のボリュームを確保して使うイメージです。

Podで永続ボリュームを試す

実際にPVとPVCを使って、永続ボリュームを試してみます。

PVの作成

まずは、PVから作成します。

2Giのストレージを用意するPVを作成します。

ここでは、シングルノードの開発やテスト用に用意されているhostpathを使用しています。また、PVCからこのPVにバインドするときに使われるstorageClassNamemanualとしています。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-vol1
spec:
  capacity:
    storage: 2Gi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Delete
  storageClassName: manual
  hostPath:
    path: /tmp
    type: Directory

PVを作成します。

kubectl apply -f pv.yml

作成したPVを確認すると、STATUSがAvailableになっており、まだバインドされていないことが確認できます。

❯ kubectl get pv
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv-vol1   2Gi        RWX            Delete           Available           manual                  18s

PVCの作成

次に、PVCを作成します。

PVと同じstorageClassNameaccessModesを指定しています。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-vol1
spec:
  resources:
    requests:
      storage: 1Gi
  accessModes:
  - ReadWriteMany
  storageClassName: manual

PVCを作成します。

kubectl apply -f pvc.yml

PVCとPVを確認すると、それぞれSTATUSがBoundになっており、バインドされていることが確認できます。

❯ kubectl get pvc,pv
NAME                             STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/pvc-vol1   Bound    pv-vol1   2Gi        RWX            manual         29s

NAME                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM              STORAGECLASS   REASON   AGE
persistentvolume/pv-vol1   2Gi        RWX            Delete           Bound    default/pvc-vol1   manual                  141m

Podで永続ボリューム

続いて、Podから永続ボリュームを使ってみます。

Podからは、PVCを指定するだけになります。

apiVersion: v1
kind: Pod
metadata:
  name: busybox
spec:
  containers:
  - name: busybox
    image: busybox:latest
    args:
      - sleep
      - "999"
    volumeMounts:
    - mountPath: /tmp
      name: volume-pvc
  volumes:
  - name: volume-pvc
    persistentVolumeClaim:
      claimName: pvc-vol1

Podを作成します。

kubectl apply -f pod.yml

Podを再作成してみる

Podを再作成しても、データが残っているのか試してみます。

まずは、作成したPodのマウントパスにファイルを作成しておきます。

❯ kubectl exec -it busybox -- /bin/sh

/ # cd tmp

/tmp # ls
do-not-delete-cni-config

/tmp # echo "hoge" > hoge.txt

/tmp # ls
do-not-delete-cni-config  hoge.txt

/tmp # cat hoge.txt
hoge

一旦、Podを削除します。

kubectl delete pod busybox

削除ができたら、再度Podを作成します。

kubectl apply -f pod.yml

マウントパスを確認すると、先ほど作成したファイルがそのまま残っていることが確認できます。

❯ kubectl exec busybox -- ls /tmp
do-not-delete-cni-config
hoge.txt

❯ kubectl exec busybox -- cat /tmp/hoge.txt
hoge

参考

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