Documentation Index

Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt

Use this file to discover all available pages before exploring further.

ブロックストレージ CSI のユースケース

Prev Next

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
参考

volumeBindingModeWaitForFirstConsumerの場合、Podがスケジューリングされたノードの Zoneが allowedTopologiesに含まれている必要があります。当該 Zoneにノードが存在しない場合、Podは Pendingステータスで待機することがあります。