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

Container Compute Service:動的にプロビジョニングされたNASボリュームのマウント

最終更新日:Dec 27, 2024

高いディスクI/Oスループットとデータ共有が必要なシナリオでは、ファイルストレージNAS(NAS)を永続ストレージボリュームとして使用できます。このトピックでは、動的にプロビジョニングされたNASボリュームをマウントする方法について説明します。また、動的にプロビジョニングされたNASボリュームを使用してデータを永続化できるかどうか、および動的にプロビジョニングされたNASボリューム内のデータを複数のPod間で共有できるかどうかを確認する方法についても説明します。

背景情報

NASは、共有アクセス、スケーラビリティ、高信頼性、高パフォーマンスを特徴とする分散ファイルシステムサービスです。NASは、データ共有と高IOPSが必要なシナリオに適しています。詳細については、ストレージの概要を参照してください。

説明

Alibaba Cloud Container Compute Service(ACS)は、動的にプロビジョニングされたNASボリュームと静的にプロビジョニングされたNASボリュームをサポートしています。このトピックでは、動的にプロビジョニングされたNASボリュームをマウントする方法について説明します。静的にプロビジョニングされたNASボリュームをマウントする方法の詳細については、静的にプロビジョニングされたNASボリュームのマウントを参照してください。

前提条件

Alibaba Cloud Container Compute Service(ACS)クラスターに最新バージョンのmanaged-csiprovisionerがインストールされていること。

説明

ACSコンソールのACSクラスター管理ページに移動します。クラスター管理ページの左側のナビゲーションペインで、操作 > アドオンを選択します。ストレージタブで、managed-csiprovisionerがインストールされているかどうかを確認できます。

制限事項

  • サーバーメッセージブロック(SMB)プロトコルを使用するNASファイルシステムはマウントできません。

  • NASファイルシステムを複数のPodにマウントする場合、Podは同じ仮想プライベートクラウド(VPC)にデプロイする必要があります。異なるVPCのPodにNASファイルシステムをマウントすることはできません。

  • NASファイルシステムのマウントには、NFSv3プロトコルのみを使用できます。

注意事項

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

  • NASファイルシステムをアプリケーションにマウントする場合、アプリケーションのYAMLファイルにsecurityContext.fsgroupパラメーターを追加しないでください。追加すると、NASファイルシステムがマウントに失敗する可能性があります。

    説明

    NASファイルシステムの/ディレクトリへのアクセス権限を付与することはできません。ディレクトリが属するユーザーアカウントとユーザーグループは変更できません。

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

動的にプロビジョニングされたNASボリュームをマウントする

手順1:StorageClassを作成する

  1. ACSクラスターに接続します。詳細については、クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続するおよびCloud Shellでkubectlを使用してACSクラスターを管理するを参照してください。

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

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-fs
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      volumeAs: filesystem
      fileSystemType: standard
      storageType: Performance
      regionId: cn-shanghai
      zoneId: cn-shanghai-e
      vpcId: "vpc-2ze2fxn6popm8c2mzm****"
      vSwitchId: "vsw-2zwdg25a2b4y5juy****"
      accessGroupName: DEFAULT_VPC_GROUP_NAME
      deleteVolume: "false"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain

    次の表にパラメーターを示します。

    重要

    種類とストレージ仕様が異なるNASファイルシステムは、異なるリージョンとゾーンをサポートしています。ビジネスのストレージ要件、ACSクラスターのリージョン、ACSクラスターのPodが使用するVPCとvSwitchに基づいて、作成するNASファイルシステムとマウントターゲットのリージョン、ゾーン、仮想プライベートクラウド(VPC)、vSwitchを指定します。詳細については、以下のトピックを参照してください。

    • 各タイプのNASファイルシステムのストレージ仕様、パフォーマンス、課金、サポートされているリージョンとゾーンの詳細については、汎用NASファイルシステムエクストリームNASファイルシステムを参照してください。

    • 汎用NASファイルシステムとエクストリームNASファイルシステムには、マウント接続、ファイルシステムの数、ファイル共有プロトコルに異なる制限があります。詳細については、制限を参照してください。

    • kubectl get cm -n kube-system acs-profile -o yamlコマンドを実行して、acs-profileのYAMLファイルを表示し、vpcIdパラメーターとvSwitchIdsパラメーターの値に基づいて、PodのVPC IDとvSwitch IDを取得します。

    パラメーター

    説明

    volumeAs

    filesystemのみがサポートされています。これは、NASファイルシステムが自動的に作成されることを示します。各NASボリュームは、NASファイルシステムに対応しています。

    fileSystemType

    NASファイルシステムのタイプ。

    storageType

    NASファイルシステムのストレージタイプ。

    • 汎用NASファイルシステムの場合、次の値がサポートされています。

      • Performance(デフォルト)

      • Capacity

    • エクストリームNASファイルシステムの場合、次の値がサポートされています。

      • standard(デフォルト)

      • advanced

    regionId

    NASファイルシステムが属するリージョンのID。リージョンIDは、ACSクラスターのリージョンIDと同じである必要があります。

    zoneId

    NASファイルシステムが属するゾーンのID。ACSクラスターのPodが使用するvSwitchに基づいてゾーンを選択します。

    vpcIdvSwitchId

    NASファイルシステムのマウントターゲットが属するVPCとvSwitchのID。ACSクラスターのPodが使用するVPCとvSwitchのIDに設定します。

    accessGroupName

    NASファイルシステムのマウントターゲットが属する権限グループ。デフォルト値:DEFAULT_VPC_GROUP_NAME

    provisioner

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

    reclaimPolicy

    永続ボリューム(PV)の再利用ポリシー。Retainのみがサポートされています。これは、PVが削除されると、関連するNASファイルシステムとマウントターゲットが保持されることを示します。

  3. StorageClassを作成します。

    kubectl create -f nas-sc.yaml
  4. StorageClassを表示します。

    kubectl get sc

    予期される出力:

    NAME                             PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    alicloud-nas-fs                  nasplugin.csi.alibabacloud.com    Retain          Immediate              false                  13m
    ......

手順2:PVCを作成する

  1. 次の内容をnas-pvc-fs.yamlという名前のYAMLファイルとして保存します。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nas-pvc-fs
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: alicloud-nas-fs
      resources:
        requests:
          storage: 20Gi

    次の表にパラメーターを示します。

    パラメーター

    説明

    accessModes

    アクセスモード。

    storage

    Podに割り当てられるストレージ容量。これは、作成するNASボリュームの容量を指します。

    説明

    エクストリームNASファイルシステムの最小容量制限は100GiBです。StorageClassで定義されているNASファイルシステムのタイプがエクストリームNASファイルシステムの場合、storageパラメーターの値は100GiB以上である必要があります。そうでない場合、対応するPVを作成できません。

    storageClassName

    関連付けるStorageClassの名前。

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

    kubectl create -f nas-pvc-fs.yaml
  3. PVCを表示します。

    kubectl get pvc

    次の例が返されます。PVCは、自動的に作成されるPVに関連付けられています。NASコンソールにログインして、NASファイルシステムを表示できます。

    NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS  AGE
    nas-pvc-fs   Bound    nas-04a730ba-010d-4fb1-9043-476d8c38****   20Gi       RWX            alicloud-nas-fs   <unset>                14s

手順3:アプリケーションを作成し、NASボリュームをマウントする

  1. nas-test-fs.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    次のYAMLテンプレートは、2つのPodを含むDeploymentを作成する方法の例を示しています。2つのPodは、nas-pvc-fsという名前のPVCを使用してストレージリソースを申請します。2つのPodは、/dataパスにマウントされます。

    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:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-nas
                mountPath: /data
          volumes:
            - name: pvc-nas
              persistentVolumeClaim:
                claimName: nas-pvc-fs
  2. Deploymentを作成し、NASボリュームをマウントします。

    kubectl create -f nas-test-fs.yaml
  3. DeploymentによってプロビジョニングされたPodがデプロイされているかどうかを確認します。

    kubectl get pod | grep nas-test

    次の出力は、2つのPodが作成されたことを示しています。

    nas-test-****-***a   1/1     Running   0          40s
    nas-test-****-***b   1/1     Running   0          40s
  4. マウントパス内のファイルを表示します。

    次のコマンドを実行して、マウントパス内のファイルを表示します。NASファイルシステムのマウントディレクトリ内のデータが返されるはずです。デフォルトでは、データは返されません。

    kubectl exec nas-test-****-***a -- ls /data

NASファイルシステムに基づいてデータの共有と永続化が有効になっているかどうかを確認する

前の例で作成したDeploymentは2つのPodをプロビジョニングし、NASファイルシステムがPodにマウントされています。次の手順を実行して、データの共有と永続化が有効になっているかどうかをテストします。

  • 1つのPodでファイルを作成し、別のPodからファイルにアクセスします。アクセスに成功した場合、データ共有は有効になっています。

  • Deploymentを再作成します。再作成されたPodからNASボリュームにアクセスして、元のデータがNASファイルシステムにまだ存在するかどうかを確認します。データがまだ存在する場合、データの永続化は有効になっています。

  1. Pod情報を表示します。

    kubectl get pod | grep nas-test

    予期される出力:

    nas-test-****-***a   1/1     Running   0          40s
    nas-test-****-***b   1/1     Running   0          40s
  2. データ共有が有効になっているかどうかを確認します。

    1. Podにファイルを作成します。

      この例では、nas-test-****-***a Podを使用します。

      kubectl exec nas-test-****-***a -- touch /data/test.txt
    2. 作成したファイルに別のPodからアクセスします。

      この例では、nas-test-****-***b Podを使用します。

      kubectl exec nas-test-****-***b -- ls /data

      次の出力は、nas-test-****-***a Podで作成したtest.txtファイルにnas-test-****-***b Podからアクセスできることを示しています。

      test.txt
  3. データの永続化が有効になっているかどうかを確認します。

    1. Deploymentを再作成します。

      kubectl rollout restart deploy nas-test
    2. Podが再作成されたら、再作成されたPodを確認します。

      kubectl get pod | grep nas-test

      予期される出力:

      nas-test-****-***c   1/1     Running   0          67s
      nas-test-****-***d   1/1     Running   0          49s
    3. 再作成されたPodにログインし、ファイルがファイルシステムにまだ存在するかどうかを確認します。

      この例では、nas-test-c*** Podを使用します。

      kubectl exec nas-test-****-***c -- ls /data

      次の出力は、ファイルがNASボリュームにまだ存在し、再作成されたPodのマウントディレクトリからアクセスできることを示しています。

      test.txt