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の作成
ACKコンソールにログインします。
ACKコンソールの左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。
クラスターの詳細ページの左側のナビゲーションウィンドウで、 を選択します。
永続ボリュームページの右上隅に作成をクリックします。
PVの作成ダイアログボックスで、次のパラメーターを設定します。
パラメーター
説明
PVタイプ
[クラウドディスク] または [NAS] を選択できます。 この例では、NASが選択されています。
名前
作成するPVの名前。 ボリューム名はクラスター内で一意である必要があります。 この例では、pv-nasが使用されます。
容量
PV の容量。 NASファイルシステムは無制限の容量を提供します。 このパラメーターは、NASファイルシステムのストレージ使用量を制限しませんが、PVの容量を定義します。
アクセスモード
ReadWriteManyまたはReadWriteOnceを選択できます。 デフォルト値: ReadWriteMany
マウントターゲットドメイン名
[マウントターゲットの選択] を選択してマウントターゲットを選択するか、[カスタム] を選択してマウントターゲットを入力します。
詳細オプションの表示
サブディレクトリ: マウントするNASファイルシステムのサブディレクトリ。 サブディレクトリはスラッシュ (/) で始まる必要があります。 このパラメーターを設定すると、PVはサブディレクトリにマウントされます。
指定されたサブディレクトリが存在しない場合、システムは自動的にNASファイルシステムにサブディレクトリを作成し、サブディレクトリをクラスターにマウントします。
このパラメーターを設定しない場合、NASファイルシステムのルートディレクトリがマウントされます。
Extreme NASファイルシステムをマウントする場合は、サブディレクトリが /shareディレクトリの下にある必要があります。
Version: PVのバージョン。
ラベル
PVにラベルを追加します。
設定が完了したら、作成をクリックします。
ステップ2: PVCの作成
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
永続的なボリュームクレームページの右上隅に作成をクリックします。
PVCの作成ダイアログボックスで、必要なパラメーターを設定します。
パラメーター
説明
PVCタイプ
[クラウドディスク] または [NAS] を選択できます。 この例では、NASが選択されています。
名前
永続ボリュームクレーム (PVC) の名前。 ボリューム名はクラスター内で一意である必要があります。
割り当てモード
この例では、Existing Volumesが選択されています。
説明PVが作成されていない場合は、[割り当てモード] を [ボリュームの作成] に設定し、PVの作成に必要なパラメーターを設定します。 詳細については、「PVの作成」をご参照ください。
既存のボリューム
[PVの選択] をクリックします。 使用するPVを見つけて、[操作] 列の [選択] をクリックします。
容量
PVCが主張する容量。
説明PVCによって要求される容量は、PVCに結合されるPVの容量を超えることはできない。
作成をクリックします。
PVCの作成後、PVCリストでPVCを表示できます。 PVCは、対応するPVに結合されます。
ステップ3: アプリケーションの作成
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[デプロイメント] ページの右上隅にある [イメージから作成] をクリックします。
アプリケーションパラメーターを設定します。
この例では、ボリュームパラメータを設定する方法を示します。 その他のパラメーターの詳細については、「デプロイを使用したステートレスアプリケーションの作成」をご参照ください。
ACKサーバーレスクラスター用にローカルボリュームとクラウドボリュームを設定できます。
ローカルストレージの追加: [PVタイプ] ドロップダウンリストから、ConfigMap、Secret、またはEmptyDirを選択できます。 次に、マウントソースとコンテナパスのパラメーターを設定して、ボリュームをコンテナパスにマウントします。 詳しい情報は、『Volumes』をご参照ください。
PVCの追加: クラウドボリュームを追加できます。
この例では、NASボリュームがコンテナ内の /tmpパスにマウントされています。
他のパラメーターを設定し、作成をクリックします。
アプリケーションの作成後、ボリュームを使用してアプリケーションデータを保存できます。
kubectlを使用して静的にプロビジョニングされたNASボリュームをマウントする
次のコマンドを実行して、静的にプロビジョニングされた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のみをサポートします。
次のコマンドを実行して、静的にプロビジョニングされた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に結合するために使用されます。
次のコマンドを実行して、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の名前。
次のコマンドを実行して、アプリケーションを実行するポッドを照会します。
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ファイルシステムを使用してデータを永続化できることを確認する
デプロイされたアプリケーションとマウントされたNASファイルシステム内のファイルを照会します。
次のコマンドを実行して、デプロイされたアプリケーションの名前を照会します。
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
次のコマンドを実行して、ポッドの /dataパス内のファイルを照会します。 例としてポッドの
nas-static-5b5cdb85f6-n ****
を使用します。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data
出力は返されません。 これは、/dataパスにファイルが存在しないことを示します。
次のコマンドを実行して、ポッド
nas-static-5b5cdb85f6-n ****
の /dataパスにnasという名前のファイルを作成します。kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas
次のコマンドを実行して、ポッド
nas-static-5b5cdb85f6-n ****
の /dataパス内のファイルを照会します。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data
期待される出力:
nas
次のコマンドを実行してポッドを削除します。
kubectl delete pod nas-static-5b5cdb85f6-n****
別のCLIを開き、次のコマンドを実行して、ポッドの削除と再作成の方法を表示します。
kubectl get pod -w -l app=nginx
ポッドの削除後もファイルが存在することを確認します。
次のコマンドを実行して、再作成されたポッドの名前を照会します。
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-static-5b5cdb85f6-n ****
の /dataパス内のファイルを照会します。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data
期待される出力:
nas
nasファイルはまだ /dataパスに存在します。 これは、データがNASファイルシステムに永続化されることを示します。
NASファイルシステム内のデータがポッド間で共有できることを確認する
アプリケーション用に作成されたポッドと、マウントされたNASファイルシステム内のファイルを照会します。
次のコマンドを実行して、アプリケーション用に作成されたポッドを照会します。
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
次のコマンドを実行して、各ポッドの /dataパス内のファイルを照会します。
kubectl exec nas-static-5b5cdb85f6-n **** -- ls /data kubectl exec nas-static-c5bb4746c-4 **** -- ls /data
次のコマンドを実行して、ポッドの /dataパスにnasという名前のファイルを作成します。
kubectl exec nas-static-5b5cdb85f6-n **** -- touch /data/nas
次のコマンドを実行して、各ポッドの /dataパス内のファイルを照会します。
次のコマンドを実行して、ポッド
nas-static-5b5cdb85f6-n ****
の /dataパス内のファイルを照会します。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data
期待される出力:
nas
次のコマンドを実行して、ポッド
nas-static-c5bb4746c-4 ****
の /dataパス内のファイルを照会します。kubectl exec nas-static-c5bb4746c-4**** -- ls /data
期待される出力:
nas
一方のポッドの /dataパスにファイルを作成すると、もう一方のポッドの /dataパスにもファイルを見つけることができます。 これは、NASファイルシステムのデータが2つのポッドで共有されていることを示します。