--- title: "NASボリューム CSI のユースケース" slug: "k8s-k8sexamples-nascsi" updated: 2026-09-17T09:31:49Z published: 2026-09-17T09:31:49Z canonical: "guide.ncloud-docs.com/k8s-k8sexamples-nascsi" 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. # NASボリューム CSI のユースケース VPC環境で利用できます。 NASボリューム CSIで説明した CSIの使い方を基に様々な方式を使ってボリュームを割り当てるユースケースです。 ## NASボリューム追加 NAS CSIドライバを用いて NASボリュームを追加するには、以下の yamlコードを通じて PersistentVolumeClaim(PVC)をリクエストしてください。NAS CSIドライバがその PVCを確認して必要な PersistentVolume(PV)を自動で作成します。 ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nas-csi-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi storageClassName: nks-nas-csi ``` - `AccessMode`: NAS CSIでは様々な AccessModeをサポートします。 | モード | 説明 | | --- | --- | | ReadWriteOnce | 1つのノードでボリュームを読み取り-書き込みでマウント | | ReadOnlyMany | 複数のノードでボリュームを読み取り専用でマウント | | ReadWriteMany | 複数のノードでボリュームを読み取り-書き込みでマウント | - `Resources`: 作成するストレージの容量です。デフォルト値は500GBであり、最小500GBから最大10,000GBの間で100GB単位で Giを使って入力できます。 ## Podに単一新規ボリュームを割り当て 新しい NASボリュームを作成してマウントするには、以下の yamlコードを使用してください。 ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nas-csi-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi storageClassName: nks-nas-csi --- 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: nas-csi-pvc ``` - Pod - `spec.container`: volumeMountsにマウントするストレージ名を入力した後、mountPathにマウントパスを入力します。 - `spec.volumes`: コンテナにマウントされるストレージを定義するために作成された PersistentVolumeClaimの名前を persistentVolumeClaim.claimNameに入力します。 注意 NASボリュームを Podにマウントしたステータスでクラスタを削除すると、NASボリュームは自動で削除されません。 この場合は NAVERクラウドプラットフォームコンソールや APIを通じて返却する必要があります。 ## 1つの NASボリュームを複数の Podにマウントして使用 1つの新規 NASボリュームを作成して2つの Podにマウントし、そのボリュームをシェアして使用するユースケースです。 ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nas-csi-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi storageClassName: nks-nas-csi --- kind: Pod apiVersion: v1 metadata: name: my-csi-app-1 spec: containers: - name: my-frontend image: busybox volumeMounts: - mountPath: "/data" name: my-volume command: [ "sleep", "1000000" ] volumes: - name: my-volume persistentVolumeClaim: claimName: nas-csi-pvc --- apiVersion: v1 kind: Pod metadata: name: my-csi-app-2 spec: containers: - name: my-frontend image: busybox volumeMounts: - mountPath: "/data" name: my-volume command: [ "sleep", "1000000" ] volumes: - name: my-volume persistentVolumeClaim: claimName: nas-csi-pvc ``` ## 既に作成済みの NASボリュームを Podにマウント NASで、NFSプロトコルでボリュームを作成します。 - [NASを利用する](/docs/ja/nas-start-vpc) NASボリュームが作成されたら、マウント情報の IPアドレスと PATH情報を確認します。 既に作成済みの NASボリュームを使用して StorageClassを作成した後 Podにマウントするには、以下の yamlコードを使用してください。 ``` apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: static-nks-nas-csi provisioner: nas.csi.ncloud.com parameters: server: __NAS_IP__ share: __NAS_PATH__ reclaimPolicy: Retain volumeBindingMode: WaitForFirstConsumer mountOptions: - hard - nolock - nfsvers=3 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: static-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi storageClassName: static-nks-nas-csi --- 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: static-pvc ``` - kind: StorageClass 既に存在する NASボリュームを Kubernetesクラスタで使用できるように情報を入力します。 - `provisioner`: NAVERクラウドプラットフォーム NASボリュームの Provisionerである nas.csi.ncloud.comを入力します。 - `parameters.server`: 既に作成済みの NASボリュームのマウント情報の IPを入力します。 - `parameters.path`: 既に作成済みの NASボリュームのマウント情報の PATHを入力します。 - `reclaimPolicy`: 使用が終わった PVCを削除する際に NASボリュームを削除しないように、必ず Retainに設定します。 - kind: PersistentVolumeClaim 作成された PersistentVolumeとバインドする PersistentVolumeClaimを作成します。 - `resources.storage`: 必須入力項目として、既に作成済みの NASボリュームの容量を入力します。ただし、PVCのサイズは NASボリュームの容量により決まるため、入力する値に意味はありません。 - `storageClassname`: NASストレージクラス名である static-nks-nas-csiを入力します。 - `volumeName`: 作成した PersistentVolumeの名前を入力します。 - kind: Pod ボリュームリクエストである PersistentVolumeClaimを指定して使用するボリュームをマウントします。 - `volumes.persistentVolumeClaim.claimName`: 指定する PersistentVolumeClaimの名前を入力します。 注意 返却保護を設定している NASボリュームの場合、PersistentVolumeClaimは削除しますが、実際のボリュームは保持します。 実際の NASボリュームは NASコンソールで削除できます。 ## ボリュームリサイズ NAVERクラウドプラットフォームの NASボリュームは、既に作成済みのボリュームに対するリサイズ機能を提供します。 NASボリュームをリサイズする方法は、次の通りです。以下では、500GB容量の NASボリュームを例に挙げて説明します。 1. 以下の yamlコードを使用して500GB容量の新規ブロックストレージボリュームの作成をリクエストします。 ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-deployment-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi storageClassName: nks-nas-csi --- 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 ``` 1. 以下のコマンドを実行して PersistentVolumeClaimの Volume Request容量を500GBから600GBに調整します。 ``` kubectl --kubeconfig $KUBE_CONFIG patch pvc csi-deployment-pvc -p '{"spec":{"resources":{"requests":{"storage":"600Gi"}}}}' ``` ## reclaimPolicyが Retainである StorageClassの使用 reclaimPolicyが Retainである StorageClassは、関連リソースが削除されても実際ストレージリソースが保存される特徴があります。そのため、データ消失を防止し、手動でデータを管理・復旧できる柔軟性を提供します。StorageClassは作成後に設定変更が難しいため、設定変更が必要な場合は既存 StorageClassを変更する代わりに新規 StorageClassを作成して使用する必要があります。Retainポリシーを使用する場合は削除された PVと関連付けられたストレージリソースを手動で管理・整理する必要があります。 下記の例として使用した yamlコードを通じて、reclaimPolicyが Retainである StorageClassを使用できます。 ``` allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nks-nas-csi-retain mountOptions: - hard - nolock - nfsvers=3 provisioner: nas.csi.ncloud.com reclaimPolicy: Retain volumeBindingMode: WaitForFirstConsumer ``` ## Zone番号が明示された StorageClassを使用する 注意 Zone番号が明示された StorageClassは、NAS CSIのバージョン2.0.1以上から使用できます。 NAS CSIドライバは Kubernetesと同じ Zoneに NASボリュームを作成します。しかし StorageClassに zoneNoを明示して、同じ Regionの特定 Zoneに NASボリュームを作成できます。下記の例として使用した yamlコードを通じて、ZoneNoを指定して NASボリュームを作成できます。 ``` apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nks-nas-csi-kr-2 mountOptions: - hard - nolock - nfsvers=3 provisioner: nas.csi.ncloud.com parameters: zoneNo: "3" reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nas-csi-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi storageClassName: nks-nas-csi-kr-2 --- 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: nas-csi-pvc ``` - kind: StorageClass - `parameters.zoneNo`: NASボリュームを作成する ZoneNoを入力 | Region | Zone | ZoneNo | | --- | --- | --- | | | 韓国 | KR-1 | | | 韓国 | KR-2 | | | シンガポール | SGN-4 | | | シンガポール | SGN-5 | | | 日本 | JPN-4 | | | 日本 | JPN-5 | ## 暗号化が適用された NASボリュームのための StorageClassを使用する 注意 暗号化が適用された NASボリュームのための StorageClassは、NAS CSIのバージョン2.0.2以上から使用できます。 NAS CSIドライバは基本的にボリューム暗号化が適用されていない NASボリュームを作成します。しかし StorageClassに encryptionを明示して、ボリューム暗号化が適用された NASボリュームを作成できます。下記の例として使用された yamlコードを通じて、ボリューム暗号化が適用された NASボリュームを作成できます。 ``` apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nks-nas-csi-encryption mountOptions: - hard - nolock - nfsvers=3 provisioner: nas.csi.ncloud.com parameters: encryption: "true" reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nas-csi-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi storageClassName: nks-nas-csi-encryption --- 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: nas-csi-pvc ``` ## PersistentVolumeClaimの削除 Kubernetesの PersistentVolumeClaimは、Deployment、StatefulSet、ReplicaSet、Podなどリクエストされたリソースを削除しても一緒に削除されません。そのため、削除するには別途コマンドが必要です。 PersistentVolumeClaimを確認して削除するには、以下のコマンドをそれぞれ使用します。 - PVCの照会 ``` $ kubectl --kubeconfig $KUBE_CONFIG get pvc ``` - PVCの削除 ``` $ kubectl --kubeconfig $KUBE_CONFIG delete pvc static-pvc ``` ## NASを Podから直接アクセスする もし NAS-CSIを介することなく NASに直接アクセスしたい場合、次のように NFSを使用して Podで NASを直接マウントできます。次の例では [nfsボリュームタイプ](https://kubernetes.io/docs/concepts/storage/volumes/#nfs)を使用して NASサーバを直接マウントします。serverフィールドに NASの IPアドレスを、pathフィールドに NASのパスを入力して使用します。volumeMountsによってコンテナ内で使用するパスを指定できます。 注意 NAS-CSIを使用しないため、NAS ACLを手動で登録します。 ``` kind: Deployment metadata: name: my-csi-app spec: replicas: 1 selector: matchLabels: app: my-csi-app template: metadata: labels: app: my-csi-app spec: containers: - name: my-csi-app image: nginx volumeMounts: - name: web mountPath: /web - name: was mountPath: /was volumes: - name: web nfs: server: __NAS_IP__ path: __NAS_PATH__/web readOnly: false - name: was nfs: server: __NAS_IP__ path: __NAS_PATH__/was readOnly: false ``` ## SubDirを使用した NASボリュームの共有 `[NAS CSI v2.2.0+]` 1つの NASボリューム内にサブディレクトリを作成することで、複数の PVCが同じ NASボリュームを共有できるようになります。 ``` apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nks-nas-csi-subdir mountOptions: - hard - nolock - nfsvers=3 provisioner: nas.csi.ncloud.com parameters: csi.storage.k8s.io/provisioner-secret-name: mount-options csi.storage.k8s.io/provisioner-secret-namespace: kube-system server: __NAS_IP__ share: __NAS_PATH__ subDir: my-app-data deleteOnlySubdir: "true" reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nas-csi-subdir-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi storageClassName: nks-nas-csi-subdir --- 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: nas-csi-subdir-pvc ``` - `parameters.subDir`: 作成するサブディレクトリ名を入力します。 - `parameters.deleteOnlySubdir`: `"true"`に設定すると、PVCを削除する際にサブディレクトリのみが削除され、NASボリュームは保持されます。 注意 `parameters.subDir` 値に **#**文字は使用できません。 参考 `parameters.deleteOnlySubdir`は reclaimPolicyが **Delete**の場合にのみ有効です。 NASボリュームとサブディレクトリをすべて保持するには、StorageClassの reclaimPolicyを **Retain**に設定してください。 ## PVC/PVメタデータを活用した動的 SubDir作成 `[NAS CSI v2.2.0+]` `parameters.subDir` パラメータにメタデータ置換パターンを使用すると、PVC/PV情報に基づいてサブディレクトリを動的に作成できます。 これにより、名前空間と PVC名に基づいた自動ディレクトリ構造を作成できます。 **使用可能な置換パターン** | パターン | 説明 | | --- | --- | | `${pvc.metadata.name}` | PVC名に置換 | | `${pvc.metadata.namespace}` | PVC名前空間に置換 | | `${pv.metadata.name}` | PV名に置換 | 以下のユースケースで、PVC名が app-dataで、名前空間が productionの場合、サブディレクトリは production-app-dataと自動作成されます。 ``` apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nks-nas-csi-dynamic-subdir mountOptions: - hard - nolock - nfsvers=3 provisioner: nas.csi.ncloud.com parameters: csi.storage.k8s.io/provisioner-secret-name: mount-options csi.storage.k8s.io/provisioner-secret-namespace: kube-system server: __NAS_IP__ share: __NAS_PATH__ subDir: ${pvc.metadata.namespace}-${pvc.metadata.name} deleteOnlySubdir: "true" reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: app-data namespace: production spec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi storageClassName: nks-nas-csi-dynamic-subdir --- kind: Pod apiVersion: v1 metadata: name: my-csi-app namespace: production spec: containers: - name: my-frontend image: busybox volumeMounts: - mountPath: "/data" name: my-volume command: [ "sleep", "1000000" ] volumes: - name: my-volume persistentVolumeClaim: claimName: app-data ``` 参考 メタデータの置換は、ボリュームの作成時に一度だけ実行されます。今後、PVC名や名前空間が変更されても、サブディレクトリ名は変更されません。 ## 動的プロビジョニングでの SubDir使用 `[NAS CSI v2.2.0+]` NASボリュームを動的にプロビジョニングする際に、サブディレクトリを指定できます。 ``` apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nks-nas-csi-dynamic-subdir mountOptions: - hard - nolock - nfsvers=3 provisioner: nas.csi.ncloud.com parameters: csi.storage.k8s.io/provisioner-secret-name: mount-options csi.storage.k8s.io/provisioner-secret-namespace: kube-system subDir: ${pvc.metadata.namespace}-${pvc.metadata.name} deleteOnlySubdir: "true" reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true ``` ## 静的プロビジョニングでの用途別 SubDir分離 `[NAS CSI v2.2.0+]` 既に作成済みの NASボリューム内に複数のサブディレクトリを作成し、用途別に分離できます。 StorageClassの `server`と `share`に同じ NASボリューム情報を入力し、`parameters.subDir` 値をそれぞれ異なる値に設定した StorageClassを作成します。 ``` apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nks-nas-csi-subdir-logs mountOptions: - hard - nolock - nfsvers=3 provisioner: nas.csi.ncloud.com parameters: csi.storage.k8s.io/provisioner-secret-name: mount-options csi.storage.k8s.io/provisioner-secret-namespace: kube-system server: __NAS_IP__ share: __NAS_PATH__ subDir: logs deleteOnlySubdir: "true" reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nks-nas-csi-subdir-config mountOptions: - hard - nolock - nfsvers=3 provisioner: nas.csi.ncloud.com parameters: csi.storage.k8s.io/provisioner-secret-name: mount-options csi.storage.k8s.io/provisioner-secret-namespace: kube-system server: __NAS_IP__ share: __NAS_PATH__ subDir: config deleteOnlySubdir: "true" reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true ``` 各 PVCで該当する StorageClassを指定すると、同じ NASボリューム内に logsと configのサブディレクトリが作成されます。