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

File Storage NAS:NFSを使用して動的にプロビジョニングされたNASボリュームをマウントする

最終更新日:Oct 08, 2024

Container Service for Kubernetes (ACK) のContainer Storage Interface (CSI) プラグインを使用すると、動的にプロビジョニングされたApsara File Storage NAS (NAS) ボリュームを、ACKコンソールのサブパスまたはファイルシステムモードで、またはkubectlを使用してACKクラスターにマウントできます。 このトピックでは、動的にプロビジョニングされたNASボリュームをACKクラスターにマウントする方法について説明します。 このトピックでは、NASボリュームがデータを保持および共有できるかどうかをテストする方法についても説明します。

前提条件

シナリオ

  • アプリケーションには高いディスクI/Oが必要です。

  • Object storage service (OSS) よりも高い読み取りおよび書き込みスループットを提供するストレージサービスが必要です。

  • 異なるホスト間でファイルを共有。 たとえば、NAS ファイルシステムをサーバーとして使用したい場合です。

制限事項

  • NASは共有ストレージサービスです。 NASファイルシステムをマウントするために使用される永続ボリューム要求 (PVC) は、ポッド間で共有できます。

  • Container Storage Interface (CSI) プラグインを使用してサーバーメッセージブロック (SMB) ファイルシステムをマウントすることはできません。

  • NFSv3ファイル共有プロトコルの使用を推奨します。

  • NASボリュームは、NASファイルシステムと同じ仮想プライベートクラウド (VPC) 内のECSインスタンスにのみマウントできます。

  • 汎用NASファイルシステムとExtreme NASファイルシステムには、マウント接続の制限、ファイルシステムの数、ファイル共有プロトコルなど、さまざまな制限があります。 詳細については、「制限事項」をご参照ください。

  • NASボリュームを使用する前に、CSIプラグインを最新バージョンに更新することを推奨します。

  • マウントターゲットが作成されたら、マウントターゲットが [使用可能] 状態に変わるまで待ちます。

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

  • ACKサーバーレスクラスターでサブパスタイプの永続ボリューム (PV) を削除しても、サブディレクトリは削除されません。 これは、PVのreclaimPolicyDeleteに設定され、PVが削除されても、NASファイルシステム内の対応するディレクトリは削除されないことを示しています。 手動でサブディレクトリをマウントして削除する必要があります。

使用上の注意

  • NASは共有ストレージサービスです。 NASファイルシステムをマウントするために使用される永続ボリューム要求 (PVC) は、ポッド間で共有できます。 NASへの同時書き込みの制限の詳細については、「ファイルへの読み取りおよび書き込みアクセスに関するFAQ」トピックの「複数のプロセスまたはクライアントが同時にログファイルにデータを書き込むときに発生する可能性のある例外を防ぐにはどうすればよいですか?」 と「NFSファイルシステムにデータを書き込む際の待ち時間を解決するにはどうすればよいですか? 」セクションをご参照ください。

  • Extreme NASファイルシステムをマウントするには、NASボリュームのStorageClassのpathパラメーターを /shareのサブディレクトリに設定します。 たとえば、0cd8b4a576-g **** .cn-hangzhou.nas.aliyuncs.com:/share/subpathの値は、NASファイルシステムのマウントされたサブディレクトリが /share/subpathであることを示します。

  • NASファイルシステムのマウントに使用されるPVCの容量は、ファイルシステムが汎用ファイルシステムであり、StorageClassのallowVolumeExpansionパラメーターがtrueに設定されている場合にのみ有効です。 この場合、CSIはPVC容量に基づいてNASディレクトリのクォータを設定します。 実際のクォータは、PVC容量を次の整数に切り上げることによって計算されます。 クォータはGiBで測定されます。

    NASディレクトリクォータは非同期で有効になります。 永続ボリューム (PV) が動的にプロビジョニングされた後、ディレクトリクォータはすぐには有効にならず、大量のデータが短時間で書き込まれるとクォータを超える可能性があります。 NASディレクトリクォータの詳細については、「ディレクトリクォータの管理」をご参照ください。

  • アプリケーションテンプレートでsecurityContext.fsgroupパラメーターが指定されている場合、ボリュームのマウント後にkubeletがchmodまたはchown操作を実行するため、時間の消費が増加します。 マウントを高速化する方法の詳細については、「NASボリュームのマウントに時間がかかるのはなぜですか?」をご参照ください。

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

CSIプラグインを使用すると、動的にプロビジョニングされたNASボリュームをサブパスまたはファイルシステムモードでACKコンソールまたはkubectl kubectlでマウントできます。

サブパスモード: ACKコンソールまたはkubectl kubectlのみを使用して、サブパスモードでNASボリュームをマウントできます。

複数のアプリケーションまたはポッドが同じNASボリュームを使用してデータを共有する必要がある場合、またはNASファイルシステムの異なるサブディレクトリを異なるポッドにマウントする場合は、サブパスモードを使用できます。

ファイルシステムモード: ファイルシステムモードでNASボリュームをマウントするために使用できるのはkubectlだけです。

アプリケーションでNASファイルシステムとマウントターゲットを動的に作成および削除する必要がある場合は、ファイルシステムモードを使用できます。

sharepath mode: 非推奨 データ共有のためにNASファイルシステム内のディレクトリを複数のポッドにマウントする場合は、「静的にプロビジョニングされたNASボリュームのマウント」をご参照ください。

ACKコンソールで動的にプロビジョニングされたNASボリュームをサブパスモードでマウントする

手順1: NASファイルシステムとマウントターゲットの作成

動的にプロビジョニングされたNASボリュームをサブパスモードでマウントするには、NASファイルシステムとマウントターゲットを作成する必要があります。

  1. NASコンソールにログインする

  2. NAS ファイルシステムを作成します。 詳細については、「ファイルシステムの作成」をご参照ください。

    説明

    NASボリューム内のデータを暗号化する場合は、NASファイルシステムの作成時に暗号化設定を構成します。

  3. クラスターノードがデプロイされている仮想プライベートクラウド (VPC) にマウントターゲットを作成します。 詳細については、「マウントターゲットの管理」をご参照ください。

ステップ2: StorageClassの作成

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ボリューム] > [StorageClasses] を選択します。

  3. StorageClassesページの右上隅にある [作成] をクリックします。

  4. [作成] ダイアログボックスで、StorageClassを設定します。

    次の表に、主要なパラメーターを示します。

    パラメーター

    説明

    名前

    StorageClassの名前。

    名前は小文字で始まる必要があり、小文字、数字、ピリオド (.) 、およびハイフン (-) のみを使用できます。

    PVタイプ

    有効な値: クラウドディスクおよびNAS。 この例では、NASが選択されています。

    マウントターゲットの選択

    NASファイルシステムのマウントターゲット。 マウントターゲットのドメイン名を照会する方法の詳細については、「マウントターゲットの管理」トピックの「マウントターゲットのドメイン名の表示」をご参照ください。

    使用可能なマウントターゲットがない場合は、まずNASファイルシステムを作成します。 詳細については、「CNFSを使用したNASファイルシステムの管理」をご参照ください。

    再利用ポリシー

    ポリシーの再利用有効値: 削除と保持。 デフォルト値: Delete。

    • 削除: このポリシーを使用する場合は、archiveOnDeleteパラメーターも指定する必要があります。

      • archiveOnDeleteパラメーターをtrueに設定すると、PVCに関連付けられたPVおよびNASファイルシステムの名前が変更され、PVCの削除後も保持されます。

      • archiveOnDeleteパラメーターをfalseに設定した場合、PVCを削除すると、PVCに関連付けられたPVおよびNASファイルシステムが削除されます。

    • 削除: PVCが削除されると、関連するPVが削除されます。 PVCに関連付けられているNASファイルシステムのディレクトリは削除されません。 これは、CSI-ProvisionerがACKサーバーレスクラスターでLinux特権を使用できないためです。 したがって、ファイルシステムをマウントして、ファイルシステムのディレクトリを削除または名前変更することはできません。

    • 保持モード: PVCが削除された場合、関連するPVおよびNASファイルシステムは保持され、手動でのみ削除できます。

    より高度なデータセキュリティが必要な場合は、ユーザーエラーによるデータ損失を防ぐために、保持ポリシーを使用することを推奨します。

    マウントオプション

    ネットワークファイルシステム (NFS) バージョンなどのマウントオプション。

    NFS v3の使用を推奨します。 Extreme NASファイルシステムはNFS v3のみをサポートしています。NFSプロトコルの詳細については、「NFS」をご参照ください。

    マウントパス

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

  5. パラメーターを設定したら、[作成] をクリックします。

    StorageClassの作成後、StorageClassesページでStorageClassを表示できます。

ステップ3: PVCを作成する

  1. 詳細ページの左側のナビゲーションウィンドウで、[ボリューム] > [ボリュームクレームの永続性] を選択します。

  2. [ボリュームクレームの永続化] ページの右上隅にある [作成] をクリックします。

  3. [PVCの作成] ダイアログボックスで、パラメーターを設定します。

    パラメーター

    説明

    PVCタイプ

    有効な値: Cloud Disk、NAS、およびOSS この例では、NASが選択されています。

    名前

    PVCの名前。 名前はクラスター内で一意である必要があります。

    割り当てモード

    PVCの割り当てモード。 この例では、[StorageClassの使用] が選択されています。

    既存のストレージクラス

    動的プロビジョニングを有効にするために使用されるStorageClass。 選択をクリックします。 [ストレージクラスの選択] ダイアログボックスで、使用するStorageClassを見つけ、[操作] 列の [選択] をクリックします。

    容量

    PVCが主張する容量。

    アクセスモード

    PVCのアクセスモード。 デフォルト値: ReadWriteMany ReadWriteOnceまたはReadOnlyManyを選択することもできます。

  4. [作成] をクリックします。

ステップ4: アプリケーションの作成

  1. 詳細ページの左側のナビゲーションウィンドウで、ワークロード > デプロイメントを選択します。

  2. デプロイメントページで、イメージから作成をクリックします。

  3. アプリケーションパラメーターを設定します。

  4. この例では、ボリュームパラメータを設定する方法を示します。 その他のパラメーターの詳細については、「デプロイを使用したステートレスアプリケーションの作成」をご参照ください。

    ローカルボリュームとクラウドボリュームを追加できます。

    • ローカルストレージの追加: [PVタイプ] ドロップダウンリストから、HostPath、ConfigMap、Secret、またはEmptyDirを選択できます。 次に、マウントソースとコンテナパスのパラメーターを設定して、ボリュームをコンテナパスにマウントします。 詳しい情報は、『Volumes』をご参照ください。

    • PVCの追加: クラウドボリュームを追加できます。

    この例では、NASボリュームがコンテナ内の /tmpパスにマウントされています。

  5. アプリケーションの設定が完了したら、[作成] をクリックします。

kubectlを使用して動的にプロビジョニングされたNASボリュームをサブパスモードでマウントする

動的にプロビジョニングされたNASボリュームをサブパスモードでマウントするには、NASファイルシステムとマウントターゲットを作成する必要があります。

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

    1. NASコンソールにログインする

    2. NAS ファイルシステムを作成します。 詳細については、「ファイルシステムの作成」をご参照ください。

      説明

      NASボリューム内のデータを暗号化する場合は、NASファイルシステムの作成時に暗号化設定を構成します。

    3. クラスターノードがデプロイされている仮想プライベートクラウド (VPC) にマウントターゲットを作成します。 詳細については、「マウントターゲットの管理」をご参照ください。

  2. StorageClass の作成

    1. alicloud-nas-subpath.yamlという名前のファイルを作成し、次のコンテンツをファイルに追加します。

      allowVolumeExpansion: true
      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

      パラメーター

      説明

      allowVolumeExpansion

      このパラメーターは、汎用NASファイルシステムでのみ使用できます。 このパラメーターをtrueに設定すると、StorageClassに基づいて動的にプロビジョニングされたPVに対してNASディレクトリクォータが設定されます。 PVCを変更することでボリュームを拡張できます。

      mountOptions

      NASファイルシステムのマウントオプションは、mountOptionsパラメーターで指定します。 たとえば、使用するNFSバージョンを指定できます。

      volumeAs

      有効な値: subpathおよびfilesystem subpathの値は、サブディレクトリがクラスターにマウントされていることを示します。 filesystemの値は、ファイルシステムがクラスタにマウントされていることを示します。

      サーバー

      NASファイルシステムのサブディレクトリをPVとしてマウントする場合のNASファイルシステムのマウント対象。

      重要

      実際のマウントターゲットを指定する必要があります。 マウントターゲットのドメイン名を表示する方法の詳細については、「マウントターゲットの管理」トピックの「マウントターゲットのドメイン名の表示」をご参照ください。

      provisioner

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

      reclaimPolicy

      PVの再利用ポリシー。 デフォルト値: Delete。 値を [保持] に設定することもできます。

      • 削除: このポリシーを使用する場合は、archiveOnDeleteパラメーターも指定する必要があります。

        • archiveOnDeleteパラメーターをtrueに設定すると、PVCに関連付けられたPVおよびNASファイルシステムの名前が変更され、PVCの削除後も保持されます。

        • archiveOnDeleteパラメーターをfalseに設定した場合、PVCを削除すると、PVCに関連付けられたPVおよびNASファイルシステムが削除されます。

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

      データセキュリティに対する要件が高い場合は、[保持] ポリシーを使用して、ユーザーエラーによるデータ損失を防ぐことを推奨します。

      archiveOnDelete

      reclaimPolicyパラメーターがdeleteに設定されている場合、バックエンドストレージを削除するかどうかを指定します。 NASは共有ストレージサービスです。 データのセキュリティを確保するには、reclaimPolicyパラメーターとarchiveOnDeleteパラメーターの両方を指定する必要があります。 このパラメーターはparametersで指定します。

      • デフォルト値: true。これは、PVCが削除されたときにサブディレクトリまたはファイルが削除されないことを示します。 代わりに、サブディレクトリまたはファイルの名前がarchived-{pvName}.{timestamp} の形式で変更されます。

      • 値がfalseに設定されている場合、PVCが削除されるとバックエンドストレージが削除されます。

      説明

      サービスが大量のネットワークトラフィックを受信する場合は、値をfalseに設定しないことをお勧めします。 詳細については、NASボリュームに関するFAQ」トピックの「動的にプロビジョニングされたnasボリュームを使用すると、alicloud-NAS-controllerのタスクキューがいっぱいになり、PVを作成できない場合はどうすればよいですか。 」セクションをご参照ください。

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

      kubectl create -f alicloud-nas-subpath.yaml
  3. 以下のコマンドを実行し、PVC を作成します。

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

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

      パラメーター

      説明

      name

      PVCの名前。

      accessModes

      PVのアクセスモード。 デフォルト値: ReadWriteMany 値をReadWriteOnceまたはReadOnlyManyに設定することもできます。

      storageClassName

      PVCに関連付けるStorageClassの名前。

      ストレージ

      PVCによって主張されているストレージ。

      重要

      このパラメーターは、アプリケーションが使用できるストレージを制限しません。 さらに、PVCが主張するストレージは自動的に増加しません。 マウントされたNASファイルシステムが汎用NASファイルシステムであり、StorageClassのallowVolumeExpasionパラメーターがtrueに設定されている場合にのみ、マウントされたNASファイルシステムのサブディレクトリにクォータが設定されます。

    2. 以下のコマンドを実行し、PVC を作成します。

      kubectl create -f pvc.yaml
  4. アプリケーションを作成します。

    nginx-1という名前の2つのアプリケーションを作成し、NASファイルシステムの同じサブディレクトリを共有するようにnginx-2します。

    1. nginx-1.ymlという名前のファイルを作成し、次のコンテンツをファイルに追加します。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: deployment-nas-1
        labels:
          app: nginx-1
      spec:
        selector:
          matchLabels:
            app: nginx-1
        template:
          metadata:
            labels:
              app: nginx-1
          spec:
            containers:
            - name: nginx
              image: nginx:1.7.9
              ports:
              - containerPort: 80
              volumeMounts:
                - name: nas-pvc
                  mountPath: "/data"
            volumes:
              - name: nas-pvc
                persistentVolumeClaim:
                  claimName: nas-csi-pvc
      • mountPath: NASファイルシステムがコンテナにマウントされるパス。

      • claimName: アプリケーションがNASファイルシステムをマウントするために使用するPVCの名前。 この例では、nas-csi-pvcが使用されています。

    2. nginx-2.ymlという名前のファイルを作成し、次のコンテンツをファイルに追加します。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: deployment-nas-2
        labels:
          app: nginx-2
      spec:
        selector:
          matchLabels:
            app: nginx-2
        template:
          metadata:
            labels:
              app: nginx-2
          spec:
            containers:
            - name: nginx
              image: nginx:1.7.9
              ports:
              - containerPort: 80
              volumeMounts:
                - name: nas-pvc
                  mountPath: "/data"
            volumes:
              - name: nas-pvc
                persistentVolumeClaim:
                  claimName: nas-csi-pvc
      • mountPath: NASファイルシステムがコンテナにマウントされるパス。 この例では、/dataが使用されます。

      • claimName: nginx-1によって使用されるPVCの名前。 この例では、nas-csi-pvcが使用されています。

    3. 次のコマンドを実行して、アプリケーションをnginx-1およびnginx-2にデプロイします。

      kubectl create -f nginx-1.yaml -f nginx-2.yaml
  5. 次のコマンドを実行して、アプリケーション用に作成されたポッドを照会します。

    kubectl get pod

    期待される出力:

    NAME                                READY   STATUS    RESTARTS   AGE
    deployment-nas-1-5b5cdb85f6-n****   1/1     Running   0          32s
    deployment-nas-2-c5bb4746c-4****    1/1     Running   0          32s
    説明

    NASボリュームのサブディレクトリ0cd8b4a576-g **** .cn-hangzhou.nas.aliyuncs.com:/share/nas-79438493-f3e0-11e9-bbe5-00163e09 **** は、ポッドdeployment-nas-1-5b5cdb85f6-n **** およびdeployment-nas-2-c5bb4746c-4 ****/dataディレクトリにマウントされます。 次の情報が表示されます。

    • /share: StorageClass設定で指定されたサブディレクトリ。

    • nas-79438493-f3e0-11e9-bbe5-00163e09 ****: PVの名前。

    NASファイルシステムの異なるサブディレクトリを異なるポッドにマウントするには、ポッドごとにPVCを作成する必要があります。 nginx-1pvc-1を作成し、nginx-2pvc-2を作成できます。

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

重要

デフォルトでは、ファイルシステムモードでマウントされているPVを削除すると、システムは関連するNASファイルシステムとマウントターゲットを保持します。 PVとともにNASファイルシステムとマウントターゲットを削除するには、StorageClass設定でreclaimPolicyパラメーターをdeleteに設定し、deleteVolumeパラメーターをtrueに設定します。

NASボリュームをファイルシステムモードでポッドにマウントする場合、作成できるNASファイルシステムとマウントターゲットは1つだけです。

ACK専用クラスターに対して、次のすべての手順を実行する必要があります。 他のタイプのクラスターの場合は、ステップ2から開始します。

  1. オプション: RAM (Resource Access Management) ポリシーを設定し、クラスターに割り当てられたRAMロールにポリシーをアタッチします。

    ACK専用クラスターを使用する場合は、この手順を実行する必要があります。

    ファイルシステムモードでは、NASファイルシステムとマウントターゲットを動的に作成および削除できます。 ACK専用クラスターでこれらの操作を実行するには、CSI-Provisionerに必要な権限を付与する必要があります。 次のサンプルコードは、必要な権限を含むRAMポリシーを示しています。

    {
        "Action": [
            "nas:DescribeMountTargets",
            "nas:CreateMountTarget",
            "nas:DeleteFileSystem",
            "nas:DeleteMountTarget",
            "nas:CreateFileSystem"
        ],
        "Resource": [
            "*"
        ],
            "Effect": "Allow"
    }

    次のいずれかの方法を使用して、権限を付与できます。

    • 上記のRAMポリシーをACK専用クラスターのマスターRAMロールにアタッチします。 詳細については、「カスタムポリシーのドキュメントと説明の変更」をご参照ください。自定义授权

    • RAMユーザーを作成し、前述のRAMポリシーをRAMユーザーにアタッチします。 AccessKeyペアを生成し、CSI-Provisioner設定のenv変数にAccessKeyペアを指定します。

      env:
      - name: CSI_ENDPOINT
        value: unix://socketDir/csi.sock
      - name: ACCESS_KEY_ID
        value: ""
      - name: ACCESS_KEY_SECRET
        value: ""
  2. StorageClass の作成

    1. alicloud-nas-fs.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-beijing
        zoneId: cn-beijing-e
        vpcId: "vpc-2ze2fxn6popm8c2mzm****"
        vSwitchId: "vsw-2zwdg25a2b4y5juy****"
        accessGroupName: DEFAULT_VPC_GROUP_NAME
        deleteVolume: "false"
      provisioner: nasplugin.csi.alibabacloud.com
      reclaimPolicy: Retain

      パラメーター

      説明

      volumeAs

      NASファイルシステムのマウントモード。 有効な値:

      • filesystem: provisionerはNASファイルシステムを自動的に作成します。 各PVは、NASファイルシステムに対応する。

      • subpath: provisionerはNASファイルシステムにサブディレクトリを自動的に作成します。 各PVは、NASファイルシステムのサブディレクトリに対応する。

      fileSystemType

      NASファイルシステムのタイプ。 有効な値:

      • 標準: 汎用NASファイルシステム

      • 極端な: extreme NASファイルシステム

      デフォルト値: standard。

      storageType

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

      • fileSystemTypeパラメーターが標準に設定されている場合、有効な値はパフォーマンスと容量です。 デフォルト値: Performance。

      • fileSystemTypeパラメーターがextremeに設定されている場合、有効な値はstandardとadvanceです。 デフォルト値: standard。

      regionId

      NASファイルシステムが属するリージョンのID。

      zoneId

      NASファイルシステムが属するゾーンのID。

      vpcId

      NASファイルシステムのマウントターゲットが属するVPCのID。

      vSwitchId

      NASファイルシステムのマウント対象が属するvSwitchのID。

      accessGroupName

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

      deleteVolume

      関連するPVが削除された場合のNASファイルシステムの再利用ポリシー。 NASは共有ストレージサービスです。 したがって、データのセキュリティを確保するために、deleteVolumeパラメーターとreclaimPolicyパラメーターの両方を指定する必要があります。

      provisioner

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

      reclaimPolicy

      PVCを削除すると、関連するNASファイルシステムは、deleteVolumeパラメーターをtrueに設定し、reclaimPolicyパラメーターをdeleteに設定した場合にのみ自動的に削除されます。

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

      kubectl create -f alicloud-nas-fs.yaml
  3. NASボリュームをマウントするためのPVCとポッドを作成します。

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

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: nas-csi-pvc-fs
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: alicloud-nas-fs
        resources:
          requests:
            storage: 20Gi
    2. nginx.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: deployment-nas-fs
        labels:
          app: nginx
      spec:
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: nginx:1.7.9
              ports:
              - containerPort: 80
              volumeMounts:
                - name: nas-pvc
                  mountPath: "/data"
            volumes:
              - name: nas-pvc
                persistentVolumeClaim:
                  claimName: nas-csi-pvc-fs
    3. 次のコマンドを実行して、PVCとポッドを作成します。

      kubectl create -f pvc.yaml -f nginx.yaml

ファイルシステムモードでは、PVCの作成時にCSIドライバが自動的にNASファイルシステムとマウントターゲットを作成します。 PVCが削除されると、deleteVolumeおよびreclaimPolicyパラメーターの設定に基づいて、ファイルシステムとマウントターゲットが保持または削除されます。

NASのストレージパフォーマンスの確認

次の例で、NASファイルシステムがデータを保持および共有できるかどうかを確認できます。

NASファイルシステムを使用してデータを永続化できることを確認する

NASは永続ストレージを提供します。 ポッドが削除されると、再作成されたポッドは削除されたポッドのデータを自動的に同期します。 次の手順を実行して、NASファイルシステムを使用してデータを永続化できることを確認します。

  1. アプリケーション用に作成されたポッドと、マウントされたNASファイルシステム内のファイルを照会します。

    1. 次のコマンドを実行して、アプリケーション用に作成されたポッドを照会します。

      kubectl get pod 

      期待される出力:

      NAME                                READY   STATUS    RESTARTS   AGE
      deployment-nas-1-5b5cdb85f6-n****   1/1     Running   0          32s
      deployment-nas-2-c5bb4746c-4****    1/1     Running   0          32s
    2. 次のコマンドを実行して、ポッドの /dataパス内のファイルを照会します。 この例では、ポッドのdeployment-nas-1-5b5cdb85f6-n **** が使用されています。

      kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- ls /data

      出力は返されません。 これは、/dataパスにファイルが存在しないことを示します。

  2. 次のコマンドを実行して、ポッドdeployment-nas-1-5b5cdb85f6-n **** の /dataパスにnasという名前のファイルを作成します。

    kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- touch /data/nas
  3. 次のコマンドを実行して、ポッドdeployment-nas-1-5b5cdb85f6-n **** の /dataパス内のファイルを照会します。

    kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- ls /data

    期待される出力:

    nas
  4. 次のコマンドを実行して、ポッドを削除します。

    kubectl delete pod deployment-nas-1-5b5cdb85f6-n****
  5. 別のCLIを開き、次のコマンドを実行して、ポッドの削除および再作成方法を表示します。

    kubectl get pod -w -l app=nginx
  6. ポッドの削除後もファイルが存在することを確認します。

    1. 次のコマンドを実行して、再作成されたポッドの名前を照会します。

      kubectl get pod

      期待される出力:

      NAME                                READY   STATUS    RESTARTS   AGE
      deployment-nas-1-5b5cdm2g5-m****    1/1     Running   0          32s
      deployment-nas-2-c5bb4746c-4****    1/1     Running   0          32s
    2. 次のコマンドを実行して、ポッドdeployment-nas-1-5b5cdm2g5-m **** の /dataパス内のファイルを照会します。

      kubectl exec deployment-nas-1-5b5cdm2g5-m**** -- ls /data

      期待される出力:

      nas

      nasファイルはまだ /dataパスに存在します。 これは、データがNASファイルシステムに保持されていることを示します。

NASファイルシステム内のデータがポッド間で共有できることを確認する

NASボリュームを複数のポッドにマウントできます。 1つのポッドでデータが変更されると、変更は他のポッドに自動的に同期されます。 次の手順を実行して、NASファイルシステム内のデータをポッド間で共有できることを確認します。

  1. アプリケーション用に作成されたポッドと、マウントされたNASファイルシステム内のファイルを照会します。

    1. 次のコマンドを実行して、アプリケーション用に作成されたポッドを照会します。

      kubectl get pod 

      期待される出力:

      NAME                                READY   STATUS    RESTARTS   AGE
      deployment-nas-1-5b5cdb85f6-n****   1/1     Running   0          32s
      deployment-nas-2-c5bb4746c-4****    1/1     Running   0          32s
    2. 次のコマンドを実行して、各ポッドの /dataパス内のファイルを照会します。

      kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- ls /data
      kubectl exec deployment-nas-2-c5bb4746c-4**** -- ls /data
  2. 次のコマンドを実行して、ポッドの /dataパスにnasという名前のファイルを作成します。

     kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- touch /data/nas
  3. 次のコマンドを実行して、各ポッドの /dataパス内のファイルを照会します。

    1. 次のコマンドを実行して、ポッドdeployment-nas-1-5b5cdb85f6-n **** の /dataパス内のファイルを照会します。

      kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- ls /data

      期待される出力:

      nas
    2. 次のコマンドを実行して、ポッドdeployment-nas-2-c5bb4746c-4 **** の /dataパス内のファイルを照会します。

      kubectl exec deployment-nas-2-c5bb4746c-4**** -- ls /data

      期待される出力:

      nas

      一方のポッドの /dataパスにファイルを作成した後、もう一方のポッドの /dataパスにファイルを見つけることができます。 これは、NASファイルシステムのデータが2つのポッドで共有されていることを示します。

NASファイルシステムでユーザー分離またはユーザーグループ分離を有効にする

異なるユーザーとユーザーグループ間のデータのセキュリティを確保するために、次の手順を実行してNASファイルシステム内のユーザーまたはユーザーグループを分離できます。

  1. 次のYAMLテンプレートを使用してアプリケーションを作成します。 アプリケーションのコンテナはプロセスを開始し、誰もいないユーザーとしてディレクトリを作成します。 誰もいないユーザのユーザ識別子 (UID) およびグループ識別子 (GID) が65534される。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nas-sts
    spec:
      selector:
        matchLabels:
          app: busybox
      serviceName: "busybox"
      replicas: 1
      template:
        metadata:
          labels:
            app: busybox
        spec:
          securityContext:
            fsGroup: 65534    # The containers create directories as the nobody user. The UID and GID of the nobody user are 65534. 
            fsGroupChangePolicy: "OnRootMismatch"    # Permissions and ownership are changed only if the permissions and the ownership of the root directory do not meet the requirements of the volume. 
          containers:
          - name: busybox
            image: busybox
            command:
            - sleep
            - "3600"
            securityContext:
              runAsUser: 65534    # All processes in the containers run as the nobody user (UID 65534). 
              runAsGroup: 65534   # All processes in the containers run as the nobody user (GID 65534). 
              allowPrivilegeEscalation: false
            volumeMounts:
            - name: nas-pvc
              mountPath: /data
      volumeClaimTemplates:
      - metadata:
          name: nas-pvc
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: "alicloud-nas-subpath"
          resources:
            requests:
              storage: 100Gi
  2. コンテナーで次のtopコマンドを実行して、コマンドがnobodyユーザーとして実行されているかどうかを確認します。

    kubectl exec nas-sts-0 -- "top"

    期待される出力:

    Mem: 11538180K used, 52037796K free, 5052K shrd, 253696K buff, 8865272K cached
    CPU:  0.1% usr  0.1% sys  0.0% nic 99.7% idle  0.0% io  0.0% irq  0.0% sirq
    Load average: 0.76 0.60 0.58 1/1458 54
      PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
       49     0 nobody   R     1328  0.0   9  0.0 top
        1     0 nobody   S     1316  0.0  10  0.0 sleep 3600

    出力は、topコマンドがnobodyユーザーとして実行されることを示しています。

  3. 次を実行して、NASファイルシステムのマウントディレクトリにディレクトリとファイルを作成するためにnobodyユーザーが使用されているかどうかを確認します。

    kubectl exec nas-sts-0 -- sh -c "touch /data/test; mkdir /data/test-dir; ls -arlth /data/"

    期待される出力:

    total 5K
    drwxr-xr-x    1 root     root        4.0K Aug 30 10:14 ..
    drwxr-sr-x    2 nobody   nobody      4.0K Aug 30 10:14 test-dir
    -rw-r--r--    1 nobody   nobody         0 Aug 30 10:14 test
    drwxrwsrwx    3 root     nobody      4.0K Aug 30 10:14 .

    出力は、/dataディレクトリにtestファイルとtest-dirディレクトリを作成するためにnobodyユーザーが使用されていることを示しています。

関連ドキュメント