VPC環境で利用できます。
ブロックストレージ CSIで説明した CSIの使い方を基に様々な方式でボリュームを割り当てるユースケースです。
Podに複数のボリュームを割り当て
新規ブロックストレージを2つ作成して Podにマウントし、各ボリュームに PersistentVolumeClaimをリクエストするユースケースは次の通りです。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-pod-1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: nks-block-storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-pod-2
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: nks-block-storage
---
kind: Pod
apiVersion: v1
metadata:
name: my-csi-app
spec:
containers:
- name: my-csi-app
image: busybox
volumeMounts:
- mountPath: "/data/pod-1/"
name: my-volume-1
- mountPath: "/data/pod-2/"
name: my-volume-2
command: [ "sleep", "1000000" ]
volumes:
- name: my-volume-1
persistentVolumeClaim:
claimName: csi-pod-1
- name: my-volume-2
persistentVolumeClaim:
claimName: csi-pod-2
Deploymentで PersistentVolumeを利用
PersistentVolumeClaimを作成して新しいボリュームの作成をリクエストする際、Deploymentの templateで claimNameを指定することで、作成されたボリュームをマウントするユースケースは、次の通りです。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-deployment-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: nks-block-storage
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-csi-app
spec:
selector:
matchLabels:
app: my-csi-app
replicas: 1
template:
metadata:
labels:
app: my-csi-app
spec:
containers:
- name: my-frontend
image: busybox
volumeMounts:
- mountPath: "/data"
name: my-volume
command: [ "sleep", "1000000" ]
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: csi-deployment-pvc
StatefulSetで PersistentVolumeを利用
StatefulSetで volumeClaimTemplatesを定義し、各 replicaごとに新しい PersistentVolumeClaimを自動作成するユースケースは、次の通りです。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-csi-app
spec:
serviceName: my-csi-app
selector:
matchLabels:
app: my-csi-app
replicas: 1
template:
metadata:
labels:
app: my-csi-app
spec:
containers:
- name: my-frontend
image: busybox
volumeMounts:
- mountPath: "/data"
name: my-volume
command: [ "sleep", "1000000" ]
volumeClaimTemplates:
- metadata:
name: my-volume
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
特定の Zoneにボリュームを割り当てる
allowedTopologiesは Kubernetes 1.33バージョン以上で使用できます。
StorageClassの allowedTopologies 設定により、Multi-Zoneクラスタ環境においてボリュームが作成される Zoneを制限することができます。下記の例として使用した yamlコードを通じて、許可する Zoneを指定してブロックストレージボリュームを作成できます。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: nks-block-storage-zone
provisioner: blk.csi.ncloud.com
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
allowVolumeExpansion: true
parameters:
type: CB1
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values:
- "2"
- "3"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: block-csi-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: nks-block-storage-zone
---
kind: Pod
apiVersion: v1
metadata:
name: my-csi-app
spec:
containers:
- name: my-frontend
image: busybox
volumeMounts:
- mountPath: "/data"
name: my-volume
command: [ "sleep", "1000000" ]
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: block-csi-pvc
| フィールド | 説明 |
|---|---|
| allowedTopologies.matchLabelExpressions.key | topology.kubernetes.io/zoneを入力 |
| allowedTopologies.matchLabelExpressions.values | ボリューム作成を許可する Zone番号入力(複数の Zoneを指定可能) |
クラスタで使用可能な Zone番号を確認するには、以下のコマンドを実行します。
kubectl get nodes -L topology.kubernetes.io/zone
volumeBindingModeが WaitForFirstConsumerの場合、Podがスケジューリングされたノードの Zoneが allowedTopologiesに含まれている必要があります。当該 Zoneにノードが存在しない場合、Podは Pendingステータスで待機することがあります。
XFSファイルシステムタイプで PersistentVolumeを利用
XFSファイルシステムは Kubernetes 1.33バージョン以上で使用できます。
NAVERクラウドプラットフォームは NAVIX環境で XFSファイルシステムの使用をお勧めします。次の例の StorageClassで XFSタイプのファイルシステムボリュームを作成できます。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: nks-block-storage-xfs
provisioner: blk.csi.ncloud.com
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
allowVolumeExpansion: true
parameters:
type: CB1
csi.storage.k8s.io/fstype: xfs
mountOptions:
- nouuid
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: block-csi-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: nks-block-storage-xfs
---
kind: Pod
apiVersion: v1
metadata:
name: my-csi-app
spec:
containers:
- name: my-frontend
image: busybox
volumeMounts:
- mountPath: "/data"
name: my-volume
command: [ "sleep", "1000000" ]
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: block-csi-pvc
| フィールド | 説明 |
|---|---|
parameters.csi.storage.k8s.io/fstype |
XFS入力 |
mountOptions |
マウントオプションを指定。XFSファイルシステムは nouuid オプションを使用して UUID重複問題を予防 |