高いディスク I/O スループットとデータ共有が必要なシナリオでは、ファイルストレージ NAS (NAS) を永続ストレージボリュームとして使用できます。このトピックでは、動的にプロビジョニングされた NAS ボリュームをマウントする方法について説明します。また、動的にプロビジョニングされた NAS ボリュームを使用してデータを永続化できるかどうか、および動的にプロビジョニングされた NAS ボリューム内のデータをポッド間で共有できるかどうかを確認する方法についても説明します。
背景情報
NAS は、共有アクセス、スケーラビリティ、高信頼性、高パフォーマンスを特徴とする分散ファイルシステムサービスです。 NAS は、データ共有と高 IOPS が必要なシナリオに適しています。詳細については、「ストレージの概要」をご参照ください。
Alibaba Cloud Container Service for Kubernetes (ACK) は、動的にプロビジョニングされた NAS ボリュームと静的にプロビジョニングされた NAS ボリュームをサポートしています。このトピックでは、動的にプロビジョニングされた NAS ボリュームをマウントする方法について説明します。静的にプロビジョニングされた NAS ボリュームをマウントする方法の詳細については、「静的にプロビジョニングされた NAS ボリュームをマウントする」をご参照ください。
前提条件
managed-csiprovisioner コンポーネントが ACK クラスタにインストールされていること。
ACK コンソールの ACK クラスタ管理ページに移動します。クラスタ管理ページの左側のナビゲーションウィンドウで、 を選択します。[ストレージ] タブで、managed-csiprovisioner がインストールされているかどうかを確認できます。
制限事項
サーバーメッセージブロック (SMB) プロトコルを使用する NAS ファイルシステムはマウントできません。
NAS ファイルシステムを複数のポッドにマウントする場合、ポッドは同じ VPC にデプロイする必要があります。異なる VPC のポッドに NAS ファイルシステムをマウントすることはできません。
説明同じ VPC 内の異なるゾーンにまたがって NAS ボリュームをマウントできます。
NAS ファイルシステムのマウントには、NFSv3 プロトコルのみ使用できます。
使用上の注意
NAS は共有ストレージサービスです。 1 つの NAS ファイルシステムを複数のポッドにマウントできます。NAS ファイルシステムが複数のポッドにマウントされている場合、ファイルシステム内のデータはポッドによって共有されます。この場合、NAS ファイルシステム内のデータが複数のポッドによって変更された場合、アプリケーションはポッド間でデータを同期できる必要があります。
NAS ファイルシステムをアプリケーションにマウントする場合、アプリケーションの YAML ファイルに
securityContext.fsgroupパラメータを追加しないでください。追加すると、NAS ファイルシステムのマウントに失敗する可能性があります。説明NAS ファイルシステムの
/ディレクトリにアクセスするための権限を付与することはできません。ディレクトリが属するユーザーアカウントとユーザーグループは変更できません。NAS ファイルシステムをマウントした後、NAS ファイルシステムのマウントポイントを削除しないでください。削除すると、オペレーティングシステムのハングの問題が発生する可能性があります。
動的にプロビジョニングされた NAS ボリュームをマウントする
手順 1:StorageClass を作成する
ACK クラスタに接続します。詳細については、「クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する」および「Cloud Shell で kubectl を使用して ACK クラスタを管理する」をご参照ください。
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 ファイルシステムは、異なるリージョンとゾーンをサポートしています。ビジネスのストレージ要件、ACK クラスタのリージョン、ACK クラスタ内のポッドで使用される 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パラメータの値に基づいてポッドの VPC ID と vSwitch ID を取得します。
パラメータ
説明
volumeAsfilesystemのみがサポートされています。これは、NAS ファイルシステムが自動的に作成されることを示します。各 NAS ボリュームは、NAS ファイルシステムに対応しています。fileSystemTypeNAS ファイルシステムのタイプ。
standard(デフォルト): 汎用型 NAS ファイルシステム。詳細については、「汎用型 NAS ファイルシステム」をご参照ください。extreme: 超高速型 NAS ファイルシステム。詳細については、「超高速型 NAS ファイルシステム」をご参照ください。
storageTypeNAS ファイルシステムのストレージタイプ。
汎用型 NAS ファイルシステムの場合、次の値がサポートされています。
Performance(デフォルト)Capacity
超高速型 NAS ファイルシステムの場合、次の値がサポートされています。
standard(デフォルト)advanced
regionIdNAS ファイルシステムが属するリージョンの ID。リージョン ID は、ACK クラスタのリージョン ID と同じである必要があります。
zoneIdNAS ファイルシステムが属するゾーンの ID。ACK クラスタ内のポッドで使用される vSwitch に基づいてゾーンを選択します。
説明同じ VPC 内の異なるゾーンにまたがって NAS ボリュームをマウントできます。最適なパフォーマンスを得るには、同じゾーンを選択することをお勧めします。
vpcId、vSwitchIdNAS ファイルシステムのマウントポイントが属する VPC と vSwitch の ID。ACK クラスタ内のポッドで使用される VPC と vSwitch の ID に設定します。
accessGroupNameNAS ファイルシステムのマウントポイントが属する権限グループ。デフォルト値:
DEFAULT_VPC_GROUP_NAME。provisionerドライバのタイプ。パラメータは
nasplugin.csi.alibabacloud.comに設定する必要があります。これは、Alibaba Cloud が NAS 用に提供する Container Storage Interface (CSI) プラグインが使用されることを示します。reclaimPolicy永続ボリューム (PV) の再利用ポリシー。
Retainのみがサポートされています。これは、PV が削除されたときに、関連する NAS ファイルシステムとマウントポイントが保持されることを示します。StorageClass を作成します。
kubectl create -f nas-sc.yamlStorageClass を表示します。
kubectl get sc予期される出力:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE alicloud-nas-fs nasplugin.csi.alibabacloud.com Retain Immediate false 13m ......
手順 2:PVC を作成する
次の内容を 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ポッドに割り当てられるストレージ容量。これは、作成する NAS ボリュームの容量を指します。
説明超高速型 NAS ファイルシステムの最小容量制限は 100 GiB です。StorageClass で定義されている NAS ファイルシステムタイプが超高速型 NAS ファイルシステムの場合、
storageパラメータの値は 100 GiB 以上である必要があります。そうでない場合、対応する PV を作成できません。storageClassName関連付ける StorageClass の名前。
永続ボリューム要求 (PVC) を作成します。
kubectl create -f nas-pvc-fs.yamlPVC を表示します。
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 ボリュームをマウントする
nas-test-fs.yaml という名前のファイルを作成し、次の内容をファイルに追加します。
次の YAML テンプレートは、2 つのポッドを含むデプロイメントの作成方法の例を示しています。2 つのポッドは、
nas-pvc-fsという名前の PVC を使用してストレージリソースを申請します。2 つのポッドは、/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デプロイメントを作成し、NAS ボリュームをマウントします。
kubectl create -f nas-test-fs.yamlデプロイメントによってプロビジョニングされたポッドがデプロイされているかどうかを確認します。
kubectl get pod | grep nas-test次の出力は、2 つのポッドが作成されたことを示しています。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40sマウントパス内のファイルを表示します。
次のコマンドを実行して、マウントパス内のファイルを表示します。NAS ファイルシステムのマウントディレクトリ内のデータが返されるはずです。デフォルトでは、データは返されません。
kubectl exec nas-test-****-***a -- ls /data
NAS ファイルシステムに基づいてデータの共有と永続化が有効になっているかどうかを確認する
前の例で作成したデプロイメントは 2 つのポッドをプロビジョニングし、NAS ファイルシステムがポッドにマウントされます。次の手順を実行して、データの共有と永続化が有効になっているかどうかをテストします。
一方のポッドでファイルを作成し、もう一方のポッドからファイルにアクセスします。アクセスに成功した場合、データ共有は有効になっています。
デプロイメントを再作成します。再作成されたポッドから NAS ボリュームにアクセスして、元のデータが NAS ファイルシステムにまだ存在するかどうかを確認します。データがまだ存在する場合、データの永続化は有効になっています。
ポッド情報を表示します。
kubectl get pod | grep nas-test予期される出力:
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40sデータ共有が有効になっているかどうかを確認します。
ポッドにファイルを作成します。
この例では、
nas-test-****-***aポッドを使用します。kubectl exec nas-test-****-***a -- touch /data/test.txtもう一方のポッドから作成したファイルにアクセスします。
この例では、
nas-test-****-***bポッドを使用します。kubectl exec nas-test-****-***b -- ls /data次の出力は、nas-test-****-***a ポッドで作成した
test.txtファイルに nas-test-****-***b ポッドからアクセスできることを示しています。test.txt
データの永続化が有効になっているかどうかを確認します。
デプロイメントを再作成します。
kubectl rollout restart deploy nas-testポッドが再作成されたら、再作成されたポッドを確認します。
kubectl get pod | grep nas-test予期される出力:
nas-test-****-***c 1/1 Running 0 67s nas-test-****-***d 1/1 Running 0 49s再作成されたポッドにログインし、ファイルがファイルシステムにまだ存在するかどうかを確認します。
この例では、
nas-test-****-***cポッドを使用します。kubectl exec nas-test-****-***c -- ls /data次の出力は、ファイルがまだ NAS ボリュームに存在し、再作成されたポッドのマウントディレクトリからアクセスできることを示しています。
test.txt