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重複問題を予防 |