ストレージ管理
PersistentVolume サブシステムは、ストレージが何から提供されているか、どのように消費されているかをユーザ・管理者から抽象化する API を提供しています。
本記事では、次の 3 点について述べています。
- PersistentVolume (PV)
- PersistentVolumeClaim (PVC)
- StorageClass
参考: ボリューム
Pod を起動するときに、使用する Volume を以下のようにして設定することができます。
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- image: registry.k8s.io/test-webapp
name: test-container
volumeMounts:
- mountPath: /test-pd # コンテナ内でのマウントするパス
name: test-volume # マウントする先となる volume の名前
volumes:
- name: test-volume # volume の名前
.... # volume の設定
ボリュームの設定や詳細については、次のドキュメントを参照ください。
永続ボリューム
永続ボリュームは、ストレージクラスを使って、動的にプロビジョニングされるクラスタのストレージの一部です。
永続ボリュームは次のような YAML ファイルで定義することができます。
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
labels:
type: local
spec:
storageClassName: "" # 指定しない場合は、空の文字列を明示的に指定してください
capacity:
storage: 50Mi
accessModes:
- ReadWriteOnce
上記のような YAML ファイルを作成し、次のコマンドで適用してください。
$ kubectl apply -f local-pv.yaml
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
local-pv 50Mi RWO Retain Available manual 14s
永続ボリュームクレーム
永続ボリュームクレームは、ユーザによって要求されるストレージであり、PV リソースを消費します。永続ボリュームクレームをクラスタ内の一致する永続ボリュームにバインドすることができます。ただし、永続ボリュームクレーンを、特定の永続ボリュームにバインドする場合、それらを事前にバインドする必要があります。
永続ボリュームクレームは、次のような YAML ファイルで定義することができます。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
storageClassName: "" # 指定しない場合は、空の文字列を明示的に指定してください
上記のように作成した YAML ファイルを、次のコマンドで適用してください。
$ kubectl apply -f local-pvc.yaml
$ kubectl get pv
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
local-pvc Bound .... 50Mi RWO 1m
注意
次のような場合、STATUS が Bound とならない (Pending のままになる) ため、ご注意ください。
- ACCESS Mode が PV と一致しない
- STORAGE Class が PV と一致しない
- この PVC を使用する Pod が存在しない
PVC を Pod で利用する場合、次のように YAML ファイル内で設定してください。
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html" # コンテナ内のマウントするパス
name: mypd # volume の名前
volumes:
- name: mypd
persistentVolumeClaim:
claimName: local-pvc
ストレージクラス
ストレージクラスに属している永続ボリュームを動的にプロビジョニングする場合に使用される provisi oner, parameters, reclaimpolicy が含まれています。
ストレージクラスは次のような YAML ファイルで定義できます。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: storage-class-test
annotations:
storageclass.kubernetes.io/is-default-class: "false"
provisioner: csi-driver.example-vendor.example
volumeBindingMode: WaitForFirstConsumer
上記のような YAML ファイルを、次のコマンドで設定してください。
$ kubectl apply -f storage-class-test.yaml
このように、定義したストレージクラスは、PV, PVC などで指定することができます。
動的なプロビジョニングがサポートされていない環境では、provisioner には、kubernetes.io/no-provisioner
を指定してください。