NASボリューム CSI のユースケース

Prev Next

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ボリュームが作成されたら、マウント情報の 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 2
      韓国 KR-2 3
      シンガポール SGN-4 74
      シンガポール SGN-5 75
      日本 JPN-4 84
      日本 JPN-5 85

暗号化が適用された 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ボリュームタイプを使用して 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