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.

Block Storage CSI examples

Prev Next

Available in VPC

This section provides examples of allocating volumes using various methods based on the CSI usage described in Block Storage CSI.

Assign multiple volumes to a pod

The following example creates 2 new block storage volumes, mounts them to a pod, and requests a PersistentVolumeClaim for each volume to be created:

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

Use PersistentVolume in a Deployment

The following example creates a PersistentVolumeClaim to request a new volume and mounts the created volume by specifying claimName in the Deployment template:

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

Use PersistentVolume in a StatefulSet

The following example defines volumeClaimTemplates in a StatefulSet to automatically create a new PersistentVolumeClaim for each replica:

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

Assign volumes to a specific Zone

Caution

allowedTopologies is available in Kubernetes version 1.33 or later.

In a Multi Zone cluster environment, you can restrict the Zone where volumes are created using the allowedTopologies setting in StorageClass. You can create a block storage volume by specifying the allowed Zone in the YAML example below:

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
Field Description
allowedTopologies.matchLabelExpressions.key
allowedTopologies.matchLabelExpressions.values

To view available Zone numbers in the cluster, run the following command:

kubectl get nodes -L topology.kubernetes.io/zone
Note

If volumeBindingMode is WaitForFirstConsumer, the Zone of the node where the pod is scheduled must be included in allowedTopologies. If no node exists in the specified Zone, the pod may remain in the Pending state.