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

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

最終更新日:Dec 14, 2024

Apsara File Storage NAS (NAS) は、共有アクセス、エラスティックスケーリング、高信頼性、高性能をサポートする分散ファイルシステムです。 このトピックでは、静的にプロビジョニングされたNASボリュームをマウントする方法、および静的にプロビジョニングされたNASボリュームを使用して永続ストレージと共有ストレージを有効にする方法について説明します。

前提条件

  • ACKサーバーレスクラスターが作成されます。 詳細については、「ACKサーバーレスクラスターの作成」をご参照ください。

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

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

  • NASファイルシステムのマウントターゲットが作成されます。 詳細については、「マウントターゲットの管理」をご参照ください。

    マウントターゲットとNASファイルシステムをマウントするクラスターノードは、同じ仮想プライベートクラウド (VPC) に属している必要があります。

  • kubectlクライアントがクラスターに接続されています。 詳細については、「kubectlを使用したACKクラスターへの接続」をご参照ください。

シナリオ

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

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

検討事項

  • Extreme NASファイルシステムをマウントするには、NASボリュームのpathパラメーターを /shareのサブディレクトリに設定します。 たとえば、Extreme NASファイルシステムをポッドにマウントするときに、/share/path1サブディレクトリを指定できます。

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

    説明

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

  • アプリケーションテンプレートでsecurityContext.fsgroupパラメーターが設定されている場合、ボリュームのマウント後にkubeletはchmodまたはchown操作を実行します。 これにより、実装時間が長くなります。

    説明

    securityContext.fsgroupパラメーターが設定されている場合のマウントプロセスを高速化する方法の詳細については、「NASボリュームのマウントに時間がかかるのはなぜですか」をご参照ください。

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

ステップ1: PVの作成

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

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

  3. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。

  4. クラスターの詳細ページの左側のナビゲーションウィンドウで、[ボリューム] > [ボリューム] を選択します。

  5. 永続ボリュームページの右上隅に作成をクリックします。

  6. PVの作成ダイアログボックスで、次のパラメーターを設定します。

    パラメーター

    説明

    PVタイプ

    [クラウドディスク] または [NAS] を選択できます。 この例では、NASが選択されています。

    名前

    作成するPVの名前。 ボリューム名はクラスター内で一意である必要があります。 この例では、pv-nasが使用されます。

    容量

    PV の容量。 NASファイルシステムは無制限の容量を提供します。 このパラメーターは、NASファイルシステムのストレージ使用量を制限しませんが、PVの容量を定義します。

    アクセスモード

    ReadWriteManyまたはReadWriteOnceを選択できます。 デフォルト値: ReadWriteMany

    マウントターゲットドメイン名

    [マウントターゲットの選択] を選択してマウントターゲットを選択するか、[カスタム] を選択してマウントターゲットを入力します。

    詳細オプションの表示

    • サブディレクトリ: マウントするNASファイルシステムのサブディレクトリ。 サブディレクトリはスラッシュ (/) で始まる必要があります。 このパラメーターを設定すると、PVはサブディレクトリにマウントされます。

      • 指定されたサブディレクトリが存在しない場合、システムは自動的にNASファイルシステムにサブディレクトリを作成し、サブディレクトリをクラスターにマウントします。

      • このパラメーターを設定しない場合、NASファイルシステムのルートディレクトリがマウントされます。

      • Extreme NASファイルシステムをマウントする場合は、サブディレクトリが /shareディレクトリの下にある必要があります。

    • Version: PVのバージョン。

    ラベル

    PVにラベルを追加します。

  7. 設定が完了したら、作成をクリックします。

ステップ2: PVCの作成

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

  2. 永続的なボリュームクレームページの右上隅に作成をクリックします。

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

    パラメーター

    説明

    PVCタイプ

    [クラウドディスク] または [NAS] を選択できます。 この例では、NASが選択されています。

    名前

    永続ボリュームクレーム (PVC) の名前。 ボリューム名はクラスター内で一意である必要があります。

    割り当てモード

    この例では、Existing Volumesが選択されています。

    説明

    PVが作成されていない場合は、[割り当てモード][ボリュームの作成] に設定し、PVの作成に必要なパラメーターを設定します。 詳細については、「PVの作成」をご参照ください。

    既存のボリューム

    [PVの選択] をクリックします。 使用するPVを見つけて、[操作] 列の [選択] をクリックします。

    容量

    PVCが主張する容量。

    説明

    PVCによって要求される容量は、PVCに結合されるPVの容量を超えることはできない。

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

    PVCの作成後、PVCリストでPVCを表示できます。 PVCは、対応するPVに結合されます。

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

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

  2. [デプロイメント] ページの右上隅にある [イメージから作成] をクリックします。

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

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

    ACKサーバーレスクラスター用にローカルボリュームとクラウドボリュームを設定できます。

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

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

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

    数据卷

  4. 他のパラメーターを設定し、作成をクリックします。

    アプリケーションの作成後、ボリュームを使用してアプリケーションデータを保存できます。

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

  1. 次のコマンドを実行して、静的にプロビジョニングされたPVを作成します。

    kubectl create -f pv-nas.yaml

    次のYAMLテンプレートでは、静的にプロビジョニングされたPVを作成する方法の例を示します。

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

    パラメーター

    説明

    name

    PV の名前。

    labels

    PVに追加するラベル。

    ストレージ

    NASボリュームの容量。

    accessModes

    PVのアクセスモード。

    ドライバー

    ボリュームのプロビジョニングに使用されるストレージドライバーのタイプ。 この例では、パラメーターはnasplugin.csi.alibabacloud.comに設定されています。 これは、Alibaba Cloudが提供するCSIプラグインが使用されていることを示しています。

    volumeHandle

    PVの一意の識別子。 複数のPVが使用される場合、各PVの識別子は一意でなければならない。

    サーバー

    NASファイルシステムのマウントターゲット。

    パス

    マウントするNASファイルシステムのサブディレクトリ。 Extreme NASファイルシステムをマウントする場合は、サブディレクトリが /shareディレクトリの下にある必要があります。

    vers

    ネットワークファイルシステム (NFS) プロトコルのバージョン。 NFSv3の使用を推奨します。 Extreme NASファイルシステムはNFSv3のみをサポートします。

  2. 次のコマンドを実行して、静的にプロビジョニングされたPVのPVCを作成します。

    NASタイプのPVCを作成するときは、selectorパラメーターを設定して、PVを選択してPVCにバインドする方法を設定します。

    kubectl create -f pvc-nas.yaml

    次のYAMLテンプレートは、静的プロビジョニングに使用されるPVCを作成する方法の例を示しています。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-nas
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-nas

    パラメーター

    説明

    name

    PVCの名前。

    accessModes

    PVCのアクセスモード。

    ストレージ

    PVCが主張する容量。 請求される容量は、PVCに結合されるPVの容量を超えることはできない。

    matchLabels

    ラベルは、PVを選択し、それをPVCに結合するために使用されます。

  3. 次のコマンドを実行して、nas-staticという名前のアプリケーションを作成し、作成したPVCをアプリケーションにマウントします。

    kubectl create -f nas.yaml

    次のYAMLテンプレートは、nas-staticアプリケーションの作成に使用されるnas.yamlファイルの例を示しています。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nas-static
      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: pvc-nas

    パラメーター

    説明

    mountPath

    NASボリュームがマウントされるコンテナーのパス。

    claimName

    アプリケーションにマウントされているPVCの名前。

  4. 次のコマンドを実行して、アプリケーションを実行するポッドを照会します。

    kubectl get pod

    期待される出力:

    NAME                          READY   STATUS    RESTARTS   AGE
    nas-static-5b5cdb85f6-n****   1/1     Running   0          32s
    nas-static-c5bb4746c-4****    1/1     Running   0          32s

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

  1. デプロイされたアプリケーションとマウントされたNASファイルシステム内のファイルを照会します。

    1. 次のコマンドを実行して、デプロイされたアプリケーションの名前を照会します。

      kubectl get pod 

      期待される出力:

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

      kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data

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

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

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

    kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data

    期待される出力:

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

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

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

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

      kubectl get pod

      期待される出力:

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

      kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data

      期待される出力:

      nas

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

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

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

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

      kubectl get pod 

      期待される出力:

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

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

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

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

      kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data

      期待される出力:

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

      kubectl exec nas-static-c5bb4746c-4**** -- ls /data

      期待される出力:

      nas

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