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 | |
| allowedTopologies.matchLabelExpressions.values |
クラスタで使用可能な Zone番号を確認するには、以下のコマンドを実行します。
kubectl get nodes -L topology.kubernetes.io/zone
volumeBindingModeが WaitForFirstConsumerの場合、Podがスケジューリングされたノードの Zoneが allowedTopologiesに含まれている必要があります。当該 Zoneにノードが存在しない場合、Podは Pendingステータスで待機することがあります。