すべてのプロダクト
Search
ドキュメントセンター

Elastic Container Instance:NAS ファイルシステムをマウントする

最終更新日:Dec 28, 2024

ファイルストレージ NAS (NAS) は、Alibaba Cloud が提供する分散ファイルシステムです。NAS は共有アクセスと自動スケーリングをサポートしています。NAS は高信頼性と高性能を備えています。Alibaba Cloud が提供する CSI-Provisioner コンポーネントをセルフマネージド Kubernetes クラスタにデプロイした後、NAS ファイルシステムをクラスタ上のボリュームとしてマウントできます。NAS ファイルシステムは、静的にプロビジョニングされたボリュームまたは動的にプロビジョニングされたボリュームとしてマウントできます。このトピックでは、PersistentVolumeClaim (PVC) を使用して NAS ファイルシステムを Elastic Container Instance ベースの Pod にマウントする方法について説明します。

前提条件

  • VNode がセルフマネージド Kubernetes クラスタにデプロイされていること。

  • セルフマネージド Kubernetes クラスタのバージョンが v1.16 以降であり、CSI-Provisioner コンポーネントがセルフマネージド Kubernetes クラスタにデプロイされていること。

    重要

    CSI-Provisioner コンポーネントのデプロイ方法については、alibaba-cloud-csi-driver を参照してください。コンポーネントのデプロイ時に問題が発生した場合は、GitHub で問題を提出してください。

  • セルフマネージド Kubernetes クラスタがデータセンターにデプロイされている場合は、データセンターが Alibaba Cloud に接続されていること。

注意事項

  • NAS は共有ストレージサービスです。NAS ファイルシステムは複数の Pod にマウントできます。NAS ファイルシステムが複数の Pod にマウントされている場合、ファイルシステム内のデータは Pod 間で共有されます。この場合、複数の Pod に対してデータ変更が行われたときに、アプリケーションはこれらの Pod 間でデータを同期できる必要があります。

  • NAS ファイルシステムをアンマウントする前に、マウントターゲットを削除しないでください。削除すると、オペレーティングシステムがハングする可能性があります。

静的にプロビジョニングされたボリュームとして NAS ファイルシステムをマウントする

  1. NAS ファイルシステムを作成し、マウントターゲットを追加します。

    1. NAS コンソール にログインします。

    2. NAS ファイルシステムを作成し、マウントターゲットを追加します。

      NAS ファイルシステムとマウントターゲットは、VNode と同じ VPC 内に存在する必要があります。詳細については、NAS ファイルシステムの作成 および マウントターゲットの管理 を参照してください。

  2. 永続ボリューム (PV) を作成します。

    1. static-nas-pv.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。必要に応じて、テンプレート内のパラメータを変更します。

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: static-nas-pv
        labels:
          alicloud-pvname: static-nas-pv
      spec:
        capacity:
          storage: 25Gi
        accessModes:
          - ReadWriteMany
        csi:
          driver: nasplugin.csi.alibabacloud.com
          volumeHandle: static-nas-pv
          volumeAttributes:
            server: "2564f4****-ysu87.cn-beijing.nas.aliyuncs.com"
            path: "/test"
        mountOptions:
        - nolock,tcp,noresvport
        - vers=3

      次の表に、テンプレートのパラメータを示します。

      パラメータ

      説明

      driver

      使用するドライバのタイプ。この例では、パラメータは nasplugin.csi.alibabacloud.com に設定されています。これは、NAS 用に Alibaba Cloud が提供する Container Storage Interface (CSI) プラグインが使用されていることを示します。

      volumeHandle

      PV の一意の ID。値は、metadata で定義された名前と同じである必要があります。

      server

      NAS ファイルシステムのマウントポイント。

      path

      マウントする NAS ファイルシステムのサブディレクトリ。Extreme NAS ファイルシステムをマウントする場合は、パラメータを /share ディレクトリのサブディレクトリに設定します。例: /share/path1

      vers

      NAS ファイルシステムのマウントに使用する Network File System (NFS) プロトコルのバージョン番号。NFS v3 を使用することをお勧めします。Extreme NAS は NFS v3 のみをサポートしています。

    2. 次のコマンドを実行して、PV を作成します。

      kubectl create -f static-nas-pv.yaml
  3. PVC を作成します。

    1. static-nas-pvc.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: static-nas-pvc
      spec:
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 25Gi
        selector:
          matchLabels:
            alicloud-pvname: static-nas-pv 
    2. 次のコマンドを実行して、PVC を作成します。

      kubectl create -f static-nas-pvc.yaml
  4. NAS ファイルシステムを 2 つの Elastic Container Instance ベースの Pod にマウントします。

    1. static-nas-test.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: static-nas-test
        labels:
          app: nginx
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            nodeSelector:    
              k8s.aliyun.com/vnode: "true"
            tolerations:     
            - key: k8s.aliyun.com/vnode
              operator: "Equal"
              value: "true"
              effect: "NoSchedule"
            containers:
            - name: nginx
              image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
              ports:
              - containerPort: 80
              volumeMounts:
                - name: pvc-nas
                  mountPath: /data
            volumes:
              - name: pvc-nas
                persistentVolumeClaim:
                  claimName: static-nas-pvc
    2. 次のコマンドを実行して、Deployment を作成します。

      kubectl create -f static-nas-test.yaml
    3. 結果を表示します。

      kubectl get pods -o wide

      次のコマンド出力が想定されます。

      NAME                              READY   STATUS    RESTARTS   AGE   IP            NODE                                  NOMINATED NODE   READINESS GATES
      
      static-nas-test-5c4b6d4bd-4kggt   1/1     Running   0          95s   172.16.XX.XX   cn-beijing.vnd-2ze8nd8xcl33t4pa****   <none>           <none>
      static-nas-test-5c4b6d4bd-ql6m4   1/1     Running   0          95s   172.16.XX.XX   cn-beijing.vnd-2ze8nd8xcl33t4pa****   <none>           <none>

      Pod 内のファイルディレクトリを確認し、NAS ファイルシステム用に /data マウントディレクトリが生成されていることを確認します。また、最初の Pod に書き込まれたファイルが 2 番目の Pod で表示できることを確認します。これは、2 つの Pod が NAS ファイルシステムを共有していることを示します。

      Mount a NAS file system as a statically provisioned volume by using CSI

動的にプロビジョニングされたボリュームとして NAS ファイルシステムをマウントする

  1. NAS ファイルシステムを作成し、マウントターゲットを追加します。

    1. NAS コンソール にログインします。

    2. NAS ファイルシステムを作成し、マウントターゲットを追加します。

      NAS ファイルシステムとマウントターゲットは、VNode と同じ VPC 内に存在する必要があります。詳細については、NAS ファイルシステムの作成 および マウントターゲットの管理 を参照してください。

  2. StorageClass を作成します。

    1. nas-sc.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。必要に応じて、テンプレート内のパラメータを変更します。次の表に、テンプレートのパラメータを示します。

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: alicloud-nas-subpath
      mountOptions:
      - nolock,tcp,noresvport
      - vers=3
      parameters:
        volumeAs: subpath
        server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/"
      provisioner: nasplugin.csi.alibabacloud.com
      reclaimPolicy: Retain

      パラメータ

      説明

      mountOptions

      マウントオプション (NFS バージョンなど)。

      volumeAs

      PV タイプ。値 subpath はサブディレクトリを示します。この場合、CSI-Provisioner は NAS ファイルシステムのサブディレクトリを自動的に作成します。

      server

      volumeAs パラメータを subpath に設定した場合の NAS ファイルシステムのマウントターゲット。

      provisioner

      使用するドライバのタイプ。この例では、パラメータは nasplugin.csi.alibabacloud.com に設定されています。これは、NAS 用に Alibaba Cloud が提供する CSI プラグインが使用されていることを示します。

      reclaimPolicy

      PV の再利用ポリシー。デフォルト値: Delete。このパラメータを Retain に設定することもできます。

      • Delete: PVC が削除されると、関連する PV と NAS ファイルシステムも削除されます。

      • Retain: PVC が削除されると、関連する PV と NAS ファイルシステムは保持され、手動でのみ削除できます。

      データセキュリティを強化する必要がある場合は、ユーザーエラーによるデータ損失を防ぐために、Retain モードを使用することをお勧めします。

    2. 次のコマンドを実行して、StorageClass を作成します。

      kubectl create -f nas-sc.yaml
  3. NAS タイプの PVC を作成します。

    1. nas-pvc.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: nas-pvc
      spec:
        accessModes:
        - ReadWriteMany
        storageClassName: alicloud-nas-subpath
        resources:
          requests:
            storage: 25Gi
    2. 次のコマンドを実行して、PVC を作成します。

      kubectl create -f nas-pvc.yaml
  4. NAS ファイルシステムを 2 つの Elastic Container Instance ベースの Pod にマウントします。

    1. nas-test.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test
        labels:
          app: nginx
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            nodeSelector:    
              k8s.aliyun.com/vnode: "true"
            tolerations:     
            - key: k8s.aliyun.com/vnode
              operator: "Equal"
              value: "true"
              effect: "NoSchedule"
            containers:
            - name: nginx
              image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
              volumeMounts:
                - name: pvc-nas
                  mountPath: /data
            volumes:
              - name: pvc-nas
                persistentVolumeClaim:
                  claimName: nas-pvc
    2. 次のコマンドを実行して、Deployment を作成します。

      kubectl create -f nas-test.yaml
    3. 結果を表示します。

      kubectl get pods -o wide

      次のコマンド出力が想定されます。

      NAME                              READY   STATUS    RESTARTS   AGE     IP             NODE                                  NOMINATED NODE   READINESS GATES
      nas-test-76c54d4b4-f7b88          1/1     Running   0          4m41s   172.16.XX.XX   cn-beijing.vnd-2ze8nd8xcl33t4pa****   <none>           <none>
      nas-test-76c54d4b4-lqz4b          1/1     Running   0          4m41s   172.16.XX.XX   cn-beijing.vnd-2ze8nd8xcl33t4pa****   <none>           <none>

      Pod 内のファイルディレクトリを確認し、NAS ファイルシステム用に /data マウントディレクトリが生成されていることを確認します。また、最初の Pod に書き込まれたファイルが 2 番目の Pod で表示できることを確認します。これは、2 つの Pod が NAS ファイルシステムを共有していることを示します。

      Mount a NAS file system as a dynamically provisioned volume by using CSI