--- title: "블록 스토리지 CSI 예제" slug: "k8s-k8sexamples-bscsi" tags: ["Ncloud Kubernetes Service(VPC)", "Block Storage", "CSI"] updated: 2026-09-17T09:07:38Z published: 2026-09-17T09:07:38Z canonical: "guide.ncloud-docs.com/k8s-k8sexamples-bscsi" stale: true --- > ## 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 예제 VPC 환경에서 이용 가능합니다. [블록 스토리지 CSI](/docs/k8s-k8suse-bscsi)에서 설명한 CSI 사용법을 바탕으로 다양한 방식으로 볼륨을 할당하는 예제입니다. ## Pod에 복수의 볼륨 할당 신규 블록 스토리지 두 개를 생성하여 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 버전 이상에서 사용할 수 있습니다. 네이버 클라우드 플랫폼은 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 중복 문제 예방 |