--- title: "ブロックストレージ CSI" slug: "k8s-k8suse-bscsi" tags: ["Block Storage", "Kubernetes Service", "vpc"] updated: 2026-09-17T09:31:52Z published: 2026-09-17T09:31:52Z canonical: "guide.ncloud-docs.com/k8s-k8suse-bscsi" --- > ## 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環境で利用できます。 参考 使用するクラスタノードのハイパーバイザの種類に応じて XENまたは KVMのブロックストレージを提供します。 各ストレージに関する情報とパフォーマンスは、[ブロックストレージの概要](/docs/ja/server-storage-vpc)で確認できます。 実行中のコンテナにファイルを新たに追加する場合、それらファイルはプロセスが終了するか、Kubernetes Liveness Probeのステータスチェックに失敗してコンテナが再起動する際にすべて削除されます。このとき、ブロックストレージを使用して新たに追加されたファイルが、プロセスの終了またはコンテナの再起動の後にも維持されるように設定できます。 Kubernetesブロックストレージは、コンテナをリリースする際に PersistentVolumeClaim(PVC)を作成して追加できます。 NAVERクラウドプラットフォームの Ncloud Kubernetes Serviceは、ボリュームドライバとして Container Storage Interface(CSI)を提供します。このドライバは Kubernetesと連携してブロックストレージの作成、削除、リサイズなどの操作をサポートします。 ## サポートするバージョンと容量 ### サポートされるバージョン NAVERクラウドプラットフォームで提供する CSIバージョンと互換 Kubernetesバージョンは、次の通りです。 | Ncloud CSI Driver\Kubernetes Version | 1.16 | 1.17+ | | --- | --- | --- | | v1.2.x | サポート | 未サポート | | v2.1.x | 未サポート | サポート | 参考 Kubernetesバージョン1.36以上のクラスタではブロックストレージ CSIのインストール、バージョンアップグレード、削除を Add-onで管理します。インストール可能なバージョンとサポート Kubernetesバージョンは、[Add-on のリリースノート](/docs/ja/k8s-k8suse-addon-release)のバージョン互換性表をご参照ください。 Kubernetesバージョンでサポートするストレージサービスは、次の通りです。 | Service\Kubernetes Version | 1.16+ | | --- | --- | | ボリューム作成 | サポート | | ボリューム削除 | サポート | | ボリューム拡張(リサイズ) | サポート | | サーバにボリューム割り当て | サポート | | サーバにボリューム解除 | サポート | | スナップショット作成 | サポート | | スナップショット削除 | サポート | ### 割り当て可能な容量 Kubernetesブロックストレージは CSIを通じて10GB単位で容量を割り当てられます。ボリュームの容量を別途定義しない場合、デフォルト値の20GBでブロックストレージを作成します。割り当て可能な最小容量と最大容量は、次の通りです。 | | XEN | KVM | | --- | --- | --- | | 最小 | 10 GB | 10 GB | | 最大 | 2 TB | 16 TB | ## CSIドライバの詳細 ### Storage Class Storage Classとは、各ストレージのポリシーとタイプを設定したオブジェクトです。NAVERクラウドプラットフォームでは、ブロックストレージを使用するデフォルト Storage Classを提供します。 ブロックストレージ内の Storage Classオブジェクトを確認するには、名前空間 kube-system内にある StorageClassのうち、nks-block-storageという名前のオブジェクトを確認します。以下のように表示されます。 ``` kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: nks-block-storage namespace: kube-system annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: blk.csi.ncloud.com volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Delete allowVolumeExpansion: true parameters: type: CB1 csi.storage.k8s.io/fstype: ext4 ``` - `Annotations: storageclass.kubernetes.io/is-default-class`: デフォルト Storage Classの場合、true値を持ちます。true以外の値を入力したり、アノテーションがない場合は false値を持ちます。 - `volumeBindingMode`: ボリュームバインディングと動的プロビジョニングが動作する時点を設定します。デフォルト値は Immediateです。 | モード | 説明 | | --- | --- | | `Immediate` | PVCが作成される時点に動作 | | `WaitForFirstConsumer` | Podが作成される時点に動作 | - `reclaimPolicy`: 使用が終わった PVCを削除する際に、使用中であった PersistentVolumeを再確保または削除するようにポリシーを設定します。デフォルト値は Deleteです。 | ポリシー | 説明 | | --- | --- | | `Retain` | PVCを削除する際に使用中であった PVは再使用できるステータスに変更され、ブロックストレージ内部のデータを維持 | | `Delete` | PVCを削除する際に使用中であった PVを一緒に削除し、ブロックストレージを返却 | 参考 Retainポリシーを通じて再確保したブロックストレージは、NAVERクラウドプラットフォームコンソールや APIを通じて返却できます。 - `allowVolumeExpansion`: 値を trueに設定して PersistentVolumeClaimを拡張できます。 - `parameters.type:`: ブロックストレージのタイプを設定できます。 | ハイパーバイザ | 使用可能なブロックストレージのタイプ | | --- | --- | | XEN | SSD(Default), HDD | | KVM | CB1(Default), FB1, CB2, FB2 | 参考 CB2/FB2タイプのブロックストレージは、Kubernetesバージョン1.30以上から使用できます。 - `parameters.csi.storage.k8s.io/fstype`: ファイルシステムのタイプを指定できます。 | タイプ | 説明 | | --- | --- | | `ext4` | Ubuntuの場合、ext4の使用を推奨 | | `xfs` | NAVIXの場合、xfsの使用を推奨 | #### Default Storage Classの変更 作成した StorageClassオブジェクトのデフォルト Storage Classの内容を変更するには、[Changing the default StorageClass](https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class/#changing-the-default-storageclass)をご参照ください。 ### CSI Controller CSI Controllerとは、ボリュームの作成、削除、割り当て、割り当て解除、スナップショットなどの各種制御と管理を担当するインターフェースです。 CSI Controllerを確認するには、以下のコマンドを通じて Namespace `kube-system`内の関連 Podを確認します。 ``` $ kubectl --kubeconfig $KUBE_CONFIG get pods -n kube-system -l app=csi-nks-controller ``` ### CSI Node CSIノードは、Kubernetesのワーカーノードごとに1つずつ動作するノードであり、ボリュームのフォーマット、マウント、アンマウントなどの動作を担当します。 CSI Nodeを確認するには、以下のコマンドを通じて名前空間 kube-system内の関連 Podを確認します。 ``` $ kubectl --kubeconfig $KUBE_CONFIG get pods -n kube-system -l app=csi-nks-node ``` ## CSIドライバを使用する ### ブロックストレージの追加 CSIドライバを用いてブロックストレージを追加するには、以下の yamlコードを通じて PersistentVolumeClaim(PVC)をリクエストします。CSIドライバがその PVCを確認して必要な PersistentVolume(PV)を自動で作成します。 ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-pod-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: nks-block-storage ``` - `AccessMode`: NAVERクラウドプラットフォームでは ReadWriteOnceモードのみサポートします。シングルノードがボリュームに対して読み取り/書き込みを実行できるようにマウントします。 - `Resources`: 作成するストレージの容量です。デフォルト値は20GBであり、最小10GBから最大2000GBの間で、10GB単位で Giを使用して入力できます。 参考 ストレージ容量とサーバ仕様に応じて IOPSと異なるスループットが適用されます。詳細は、[ストレージ仕様](/docs/ja/server-spec-vpc#%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80%EC%82%AC%EC%96%91)と[サーバ仕様](/docs/ja/server-spec-vpc#%EC%84%9C%EB%B2%84%EC%82%AC%EC%96%91)をご参照ください。 ### Podに単一新規ボリュームを割り当て 新しいブロックストレージを作成してマウントするには、以下の yamlコードを使用します。 ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-pod-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: nks-block-storage --- 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: csi-pod-pvc ``` - Pod - `spec.container`: volumeMountsにマウントするストレージ名を入力した後、mountPathにマウントパスを入力します。 - `spec.volumes`: コンテナにマウントされるストレージを定義するために作成された PersistentVolumeClaimの名前を persistentVolumeClaim.claimNameに入力します。 ### 既に作成済みのブロックストレージを Podにマウント 既に作成済みのブロックストレージがある場合、そのストレージを用いて PersistentVolumeを作成した後にマウントできます。 既に作成済みのブロックストレージを用いて PersistentVolumeを作成した後、Podにマウントするには以下の yamlコードを使用します。 ``` kind: PersistentVolume apiVersion: v1 metadata: name: volume-existing-01 annotations: pv.kubernetes.io/provisioned-by: blk.csi.ncloud.com # ブロックストレージと連携する provisioner名 spec: storageClassName: nks-block-storage # ブロックストレージのストレージクラス名 persistentVolumeReclaimPolicy: Retain capacity: storage: 10Gi # ブロックストレージ容量 accessModes: - ReadWriteOnce csi: driver: blk.csi.ncloud.com fsType: ext4 volumeHandle: "952814" # Block Storage Instance ID volumeAttributes: blk.csi.ncloud.com/noformat: 「true」 # ブロックストレージをフォーマットしない --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-pod-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: nks-block-storage volumeName: "volume-existing-01" --- 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: csi-pod-pvc ``` - kind: PersistentVolume 既に存在するブロックストレージを Kubernetesクラスタで使用できるように情報を入力します。 - `storageClassname`: NAVERクラウドプラットフォームのストレージクラスの nks-block-storageを入力します。 - `capacity.storage`: 既に存在するブロックストレージの容量を入力します。 - `accessModes`: ReadWriteOnceを入力します。 - `csi.driver`: ストレージクラスドライバ名である blk.csi.ncloud.comを入力します。 - `csi.fsType`: 既に存在するブロックストレージのファイルシステムタイプを入力します。 - `csi.volumeHandle`: 作成済みのブロックストレージのインスタンス IDを入力します。 - `csi.volumeAttributes`: フォーマットを行わずに既存の保存された内容を維持したままマウントするように `blk.csi.ncloud.com/noformat: "true"`を入力します。 - kind: PersistentVolumeClaim 作成された PersistentVolumeとバインドする PersistentVolumeClaimを作成します。 - `resources.storage`: 既に存在するブロックストレージの容量を入力します。 - `storageClassname`: ブロックストレージクラス名である nks-block-storageを入力します。 - `volumeName`: 作成した PersistentVolumeの名前を入力します。 - kind: Pod ボリュームリクエストである PersistentVolumeClaimを指定して使用するボリュームをマウントします。 - `volumes.persistentVolumeClaim.claimName`: 指定する PersistentVolumeClaimの名前を入力します。 ### PersistentVolumeClaimの削除 Kubernetesの PersistentVolumeClaimは、Deployment、StatefulSet、ReplicaSet、Podなどリクエストされたリソースを削除しても一緒に削除されません。そのため、削除するには別途コマンドが必要です。 PersistentVolumeClaimを確認して削除するには、以下のコマンドをそれぞれ使用します。 - PVCの照会 ``` $ kubectl --kubeconfig $KUBE_CONFIG get pvc ``` - PVCの削除 ``` $ kubectl --kubeconfig $KUBE_CONFIG delete pvc csi-pod-pvc ``` 注意 返却保護を設定しているボリュームの場合、PersistentVolumeClaimは削除しますが、実際のボリュームは保持します。 実際のボリュームは NAVERクラウドプラットフォームコンソールで削除可能です。 ### ボリュームリサイズ(XEN) NAVERクラウドプラットフォームの XENブロックストレージは、既に作成済みのボリュームに対するオフラインリサイズ機能を提供します。 注意 ボリュームリサイズを行う際に、運用中の Podの Controllerで Replicaの数を0に調整するプロセスでアプリケーションの運用が一時的に停止する場合があります。このような中断を防ぐため、初めてボリュームを作成するときに十分なサイズを設定し、リサイズが不要になるよう設定することをお勧めします ブロックストレージのボリュームをリサイズする方法は、次の通りです。以下の説明では、10GB容量のブロックストレージボリュームを例に挙げて説明します。 1. 以下の yamlコードを使用して10GB容量の新規ブロックストレージボリュームの作成をリクエストします。 ``` 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 ``` 2. 以下のコマンドを実行して Replicaの数を0に調整します。 ``` $ kubectl --kubeconfig $KUBE_CONFIG scale --replicas=0 deployment/my-csi-app ``` 3. 以下のコマンドを実行して PersistentVolumeClaimの Volume Request容量を10GBから20GBに調整します。 ``` kubectl --kubeconfig $KUBE_CONFIG patch pvc csi-deployment-pvc -p '{"spec" :{"resources" :{"requests" :{"storage" :"20Gi" }}}}' ``` 4. 以下のコマンドを実行して PersistentVolumeClaimの Conditionが FileSystemResizePendingステータスか確認します。 ``` ~> kubectl get pvc csi-deployment-pvc -o yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-deployment-pvc namespace: default uid: 02d4aa83-83cd-11e8-909d-42010af00004 spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: nks-block-storage volumeName: pvc-xxx status: capacity: storage: 10G conditions: - lastProbeTime: null lastTransitionTime: 2018-07-11T14:51:10Z message: Waiting for user to (re-)start a pod to finish file system resize of volume on node. status: "True" type: FileSystemResizePending phase: Bound ``` 5. 以下のコマンドを実行して Replicaの数を1に復元します。 ``` $ kubectl --kubeconfig $KUBE_CONFIG scale --replicas=1 deployment/my-csi-app ``` 6. (オプション) 以下のコマンドを実行して Podの STATUSが Runningに正常に変更されているか確認します。 ``` $ kubectl --kubeconfig $KUBE_CONFIG get po ``` ### ボリュームリサイズ(KVM) NAVERクラウドプラットフォームの KVMブロックストレージは、既に作成済みのボリュームに対するオンラインリサイズ機能を提供します。 ブロックストレージのボリュームをリサイズする方法は、次の通りです。以下の説明では、10GB容量のブロックストレージボリュームを例に挙げて説明します。 1. 以下の yamlコードを使用して10GB容量の新規ブロックストレージボリュームの作成をリクエストします。 ``` 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 ``` 2. 以下のコマンドを実行して PersistentVolumeClaimの Volume Request容量を10GBから20GBに調整します。 ``` kubectl --kubeconfig $KUBE_CONFIG patch pvc csi-deployment-pvc -p '{"spec" :{"resources" :{"requests" :{"storage" :"20Gi" }}}}' ``` 3. (オプション) 以下のコマンドを実行して PersistentVolumeClaim容量が20GBに変更されているか確認します。 ``` $ kubectl --kubeconfig $KUBE_CONFIG describe pvc csi-deployment-pvc ``` ### スナップショットの作成とボリュームの復旧 #### ボリュームスナップショットの作成 注意 nks v1.33からは Snapshot v1をサポートし、 v1beta1のサポートは終了する予定です。v1.33以前バージョンでは v1beta1(snapshot.storage.k8s.io/v1beta1)を使用します。 PersistentVolumeのスナップショットを作成するには、以下のコマンドを実行します。 ``` apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: csi-nks-test-snapshot spec: source: persistentVolumeClaimName: csi-pod-pvc ``` - `metadata.name`: 作成するスナップショットの名前を入力します。 - `spec.source.persistentVolumeClaimName`: スナップショットを作成する PersistentVolumeとバインドされている PersistentVolumeClaimの名前を入力します。 参考 VolumeSnapshotとは、CSIで定義したユーザー指定リソース(Custom Resource Definition、CRD)です。詳細は、以下のリンクをご参照ください。 [Snapshot-Restore-Feature](https://kubernetes-csi.github.io/docs/snapshot-restore-feature.html) #### 作成済みのボリュームスナップショットの確認 作成済みのボリュームスナップショットを確認するには、以下のコマンドを実行します。 ``` $ kubectl --kubeconfig $KUBE_CONFIG get volumesnapshot ``` #### 作成済みのボリュームスナップショットの削除 作成済みのボリュームスナップショットを確認してから削除するには、以下のコマンドを実行します。 ``` $ kubectl --kubeconfig $KUBE_CONFIG get volumesnapshot NAME AGE csi-nks-test-snapshot 17h $ kubectl --kubeconfig $KUBE_CONFIG delete volumesnapshot csi-nks-test-snapshot ``` #### 作成済みのボリュームスナップショットからボリューム復旧 ボリュームスナップショットを用いてボリューム作成をリクエストする方式で、ボリュームを復旧できます。 ボリュームスナップショットを用いてボリュームを復旧するには、以下の yamlコードを使用します。 ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-nks-test-pvc-restore spec: dataSource: name: csi-nks-test-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: nks-block-storage --- kind: Pod apiVersion: v1 metadata: name: csi-restore-app spec: containers: - name: my-frontend image: busybox volumeMounts: - mountPath: "/data" name: my-volume command: [ "sleep", "1000000" ] volumes: - name: my-volume persistentVolumeClaim: claimName: csi-nks-test-pvc-restore ``` - PersistentVolumeClaim - `spec.datasource.name`: 復旧するボリュームスナップショットの名前を入力します。 - `spec.datasource.kind`: 復旧するボリュームスナップショットのリソース名である VolumeSnapshotを入力します。 - `spec.datasource.apiGroup`: スナップショットの apiGroupである snapshot.storage.k8s.ioを入力します。 - `resources.request.storage`: ボリュームスナップショットの容量と同じ値を入力します。 - Pod - `claimName`: リクエストしたボリューム情報である PersistentVolumeClaimの名前を入力します。