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

File Storage NAS:NASボリュームを使用したデータの共有と永続化

最終更新日:Jul 30, 2024

Apsara File Storage NAS (NAS) ファイルシステムを使用して、データを保持し、複数のポッド間でデータを共有できます。 このトピックでは、NASファイルシステムを使用してデータを保持および共有する方法について説明します。

始める前に

このタスクについて

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

シナリオ

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

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

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

手順

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

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

次のセクションでは、Alibaba Cloudが提供するFlexVolumeプラグインを使用してPVとPVCを作成し、NASファイルシステムをマウントする方法について説明します。

PV を作成します。

  1. pv-nas.yamlという名前のファイルを作成します。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nas
      labels:
        alicloud-pvname: pv-nas
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      flexVolume:
        driver: "alicloud/nas"
        options:
          server: "***-**.cn-hangzhou.nas.aliyuncs.com"   ////Replace the value with the mount target. 
          path: "/k8s1"
          vers: "4.0"

    パラメーター

    説明

    alicloud-pvname

    PV の名前。

    サーバー

    NASファイルシステムのマウントターゲット。 マウントターゲットを取得するには、NASファイルシステムコンソールにログインします。 左側のナビゲーションウィンドウで、[ファイルシステムリスト] をクリックし、作成したファイルシステムを見つけて、[操作] 列の [管理] をクリックします。 表示されるページで、[ターゲットのマウント] をクリックします。 [マウントターゲット] セクションで、[マウントターゲットのIPアドレス] 列のマウントアドレスをコピーします。

    path

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

    vers

    ネットワークファイルシステム (NFS) プロトコルのバージョン番号。 このパラメーターはオプションです。 有効な値: 3と4.0。 デフォルト値:3

    モード

    マウントされたディレクトリにアクセスするための権限。 このパラメーターはオプションです。 デフォルトでは、このパラメータは空のままです。

    説明
    • NASファイルシステムのルートディレクトリにアクセスする権限を付与することはできません。

    • 大量のデータを格納するNASファイルシステムにmodeパラメーターを設定すると、NASファイルシステムのマウントに時間がかかるか、失敗することさえあります。 このパラメーターは空のままにすることを推奨します。

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

    kubectl create -f pv-nas.yaml

期待される結果

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

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

  4. 詳細ページの左側のナビゲーションウィンドウで、[ボリューム] > [永続ボリューム] を選択します。 新しく作成されたPVが表示されることを確認します。

PVC を作成します。

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

  1. pvc-nas.yamlという名前のファイルを作成します。

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

    kubectl create -f pvc-nas.yaml

期待される結果

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

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

  4. 詳細ページの左側のナビゲーションウィンドウで、[ボリューム] > [永続ボリュームクレーム] を選択します。 新しく作成されたPVCが表示されることを確認します。

アプリケーションの作成

  1. 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: nginx
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-nas
                mountPath: "/data"
          volumes:
            - name: pvc-nas
              persistentVolumeClaim:
                claimName: pvc-nas
  2. 次のコマンドを実行して、アプリケーションをデプロイします。

    kubectl create -f nas.yaml

期待される結果

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

  3. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [アプリケーション] をクリックします。

  4. クラスターの詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [デプロイ] を選択します。 Verify that the newly created application is displayed.

Verify data sharing

  1. Run the following command to query the application pods.

    kubectl get pod

    期待される出力:

    NAME                             READY   STATUS    RESTARTS   AGE
    nas-static-f96b6b5d7-r****       1/1     Running   0          9m
    nas-static-f96b6b5d7-w****       1/1     Running   0          9m
  2. 次のコマンドを実行して、/dataパスのファイルを照会します。

    kubectl exec nas-static-f96b6b5d7-r**** ls /data                    

    期待される出力:

    kubectl exec nas-static-f96b6b5d7-w**** ls /data                   
    説明

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

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

    kubectl exec nas-static-f96b6b5d7-r**** touch /data/nas
  4. Query files in the pods.

    次のコマンドを実行して、1つのポッドの /dataパス内のファイルを照会します。

    kubectl exec nas-static-f96b6b5d7-r**** ls /data

    期待される出力:

    nas

    次のコマンドを実行して、他のポッドの /dataパス内のファイルを照会します。

    kubectl exec nas-static-f96b6b5d7-w **** ls /data

    期待される出力:

    nas
    説明

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

Verify data persistence

  1. 次のコマンドを実行して、すべてのアプリケーションポッドを削除します。

    kubectl delete pod nas-static-f96b6b5d7-r**** nas-static-f96b6b5d7-wthmb

    期待される出力:

    pod "nas-static-f96b6b5d7-r****" deleted
    pod "nas-static-f96b6b5d7-w****" deleted
  2. 次のコマンドを実行して、ポッドの削除と再作成方法を表示します。

    kubectl get pod -w -l app=nginx

    期待される出力:

    NAME                             READY   STATUS              RESTARTS       AGE
    nas-static-f96b6b5d7-r****       1/1     Running             0              27m
    nas-static-f96b6b5d7-w****       1/1     Running             0              27m
    nas-static-f96b6b5d7-r****       1/1     Terminating         0              28m
    nas-static-f96b6b5d7-w****       0/1     Pending             0              0s
    nas-static-f96b6b5d7-w****       0/1     Pending             0              0s
    nas-static-f96b6b5d7-w****       0/1     ContainerCreating   0              0s
    nas-static-f96b6b5d7-w****       1/1     Terminating         0              28m
    nas-static-f96b6b5d7-n****       0/1     Pending             0              0s
    nas-static-f96b6b5d7-n****       0/1     Pending             0              0s
    nas-static-f96b6b5d7-n****       0/1     ContainerCreating   0              0s
    nas-static-f96b6b5d7-r****       0/1     Terminating         0              28m
    nas-static-f96b6b5d7-w****       0/1     Terminating         0              28m
    nas-static-f96b6b5d7-r****       0/1     Terminating         0              28m
    nas-static-f96b6b5d7-r****       0/1     Terminating         0              28m
    nas-static-f96b6b5d7-w****       1/1     Running             0              10s
    nas-static-f96b6b5d7-w****       0/1     Terminating         0              28m
    nas-static-f96b6b5d7-w****       0/1     Terminating         0              28m
    nas-static-f96b6b5d7-n****       1/1     Running             0              17s
  3. 次のコマンドを実行して、再作成されたポッドの名前を照会します。

    kubectl get pod

    期待される出力:

    NAME                             READY   STATUS    RESTARTS   AGE
    nas-static-f96b6b5d7-n****       1/1     Running   0          21s
    nas-static-f96b6b5d7-w****       1/1     Running   0          21s
  4. ポッド内のファイルを照会します。

    次のコマンドを実行して、1つのポッドの /dataパス内のファイルを照会します。

    kubectl exec nas-static-f96b6b5d7-n**** ls /data

    期待される出力:

    nas

    次のコマンドを実行して、他のポッドの /dataパス内のファイルを照会します。

    kubectl exec nas-static-f96b6b5d7-w**** ls /data

    期待される出力:

    nas
    説明

    nasファイルはまだ存在します。 これは、データがNASボリュームに永続化されていることを示します。