このトピックでは、コンテナコンピューティングサービス (ACS) に NAS ファイルシステム (NAS) をマウントする方法と、NAS の共有ストレージとデータ永続性機能を確認する方法について説明します。
シナリオ
NAS は、共有アクセス、スケーラビリティ、高信頼性、高パフォーマンスを特徴とする分散ファイルシステムサービスです。 NAS は、データ共有と高 IOPS が必要なシナリオに適しています。 コストとパフォーマンスの要件に基づいて、適切なファイルシステムタイプとストレージタイプを選択できます。 詳細については、「汎用型 NAS ファイルシステム」、「超高速型 NAS ファイルシステム」、および「ファイルシステムを選択する」をご参照ください。
汎用型 NAS ファイルシステムと超高速型 NAS ファイルシステムでは、マウント接続、ファイルシステムの数、ファイル共有プロトコルの制限が異なります。 詳細については、「制限」をご参照ください。
NAS ファイルシステムが既に存在するかどうかによって、次のいずれかの方法を選択して NAS ボリュームをマウントおよび使用できます。
使用可能な NAS ファイルシステムが既にある場合は、直接マウントして共有できます。 詳細については、「既存の NAS ファイルシステムをストレージボリュームとして使用する」をご参照ください。
使用可能な NAS ファイルシステムがない場合は、StorageClass を介して自動的に作成し、使用するためにマウントできます。 詳細については、「新しい NAS ファイルシステムをストレージボリュームとして作成する」をご参照ください。
前提条件
managed-csiprovisioner コンポーネントが ACS クラスタにインストールされています。
ACS コンソールの ACS クラスタ管理ページに移動します。 クラスタ管理ページの左側のナビゲーションウィンドウで、 を選択します。 [ストレージ] タブで、managed-csiprovisioner がインストールされているかどうかを確認できます。
制限
SMB プロトコルを使用する NAS ファイルシステムはマウントできません。
NAS ファイルシステムを複数のポッドにマウントする場合、ポッドは同じ VPC にデプロイする必要があります。 異なる VPC のポッドに NAS ファイルシステムをマウントすることはできません。
説明同じ VPC 内では、NAS ファイルシステムをゾーンをまたいでマウントできます。
NFSv3 プロトコルのみを使用して NAS ファイルシステムをマウントできます。
考慮事項
NAS は共有ストレージサービスです。 NAS ボリュームを複数のポッドにマウントできます。 この場合、NAS ファイルシステム内のデータが複数のポッドによって変更された場合、アプリケーションはポッド間でデータを同期できる必要があります。
NAS ファイルシステムをマウントするときは、アプリケーションの YAML ファイルで
securityContext.fsgroupを構成しないでください。 そうしないと、マウントが失敗する可能性があります。説明NAS ファイルシステムの
/ディレクトリは、権限、所有者、またはグループの変更をサポートしていません。NAS ファイルシステムをマウントした後、マウントポイントを削除しないでください。 そうしないと、オペレーティングシステムのハングの問題が発生する可能性があります。
既存の NAS ファイルシステムをストレージボリュームとして使用する
ステップ 1:NAS ファイルシステム情報を取得する
ACS ポッドで使用される VPC と vSwitch の ID を取得します。
説明次の手順では、コンソールで情報を取得する方法について説明します。 また、
kubectl get cm -n kube-system acs-profile -o yamlコマンドを実行して、acs-profile の YAML ファイルを表示し、vpcIdフィールドとvSwitchIdsフィールドからポッドで使用される VPC ID と vSwitch ID を取得することもできます。ACS コンソール にログオンします。
[クラスタ] で、クラスタの名前をクリックして、クラスタ管理ページに移動します。
左側のナビゲーションバーで、 を選択します。
[ConfigMap] ページで、上部の名前空間を [kube-system] に変更し、acs-profile を見つけて、[YAML を編集] をクリックします。
vpcIdフィールドとvSwitchIdsフィールドから、ポッドで使用される VPC ID と vSwitch ID を取得します。
既存の NAS ファイルシステムが要件を満たしていることを確認し、マウントポイントアドレスを取得します。
NAS コンソール にログオンし、左側のナビゲーションウィンドウで [ファイルシステムリスト] をクリックします。
ターゲット NAS ファイルシステムを見つけ、リージョン、ゾーン、およびプロトコルタイプが要件を満たしていることを確認します。
NAS ファイルシステムは VPC をまたいでマウントできません。つまり、リージョンをまたいで使用できません。 既存の NAS ファイルシステムのリージョンが ACS クラスタのリージョンと同じであることを確認してください。
同じ VPC 内では、NAS ファイルシステムをゾーンをまたいでマウントできます。 ただし、パフォーマンス向上のために、ACS クラスタ内のポッドと同じゾーンを使用することをお勧めします。
NAS ファイルシステムのプロトコルタイプが [NFS] であることを確認します。 SMB プロトコルを使用する NAS ファイルシステムはマウントできません。

マウントポイントが要件を満たしていることを確認し、マウントポイントアドレスを取得します。
ファイルシステム ID をクリックします。
ファイルシステムの詳細ページの左側のナビゲーションウィンドウで、[マウントポイント] をクリックします。
[マウントポイント] セクションで、既存のマウントポイントが要件を満たしていることを確認し、マウントポイントアドレスを取得します。
説明汎用 NAS ファイルシステムのマウントポイントはシステムによって自動的に作成されます。 ただし、超高速型 NAS ファイルシステムのマウントポイントは手動で作成する必要があります。
既存のマウントポイントが要件を満たしていない場合は、新しく作成できます。 詳細については、「マウントポイントを管理する」をご参照ください。
マウントポイントの VPC は、ACS クラスタ内のポッドで使用される VPC と同じである必要があります。 そうしないと、マウントは失敗します。
パフォーマンス向上のために、マウントポイントの vSwitch は、ACS クラスタ内のポッドで使用される vSwitch と同じにすることをお勧めします。
マウントポイントのステータスは [アクティブ] です。

ステップ 2:PVC を作成する
kubectl
nas-pvc.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-pvc annotations: csi.alibabacloud.com/mountpoint: *******-mw***.cn-shanghai.nas.aliyuncs.com csi.alibabacloud.com/mount-options: nolock,tcp,noresvport spec: accessModes: - ReadWriteMany resources: requests: storage: 20Gi storageClassName: alibaba-cloud-nasフィールドの説明:
重要上記の YAML テンプレートに基づいて PVC を作成すると、システムは最初に
annotationsフィールドの NAS 構成に基づいて静的 PV を作成し、次に PV に関連付けられた PVC を作成します。パラメーター
説明
csi.alibabacloud.com/mountpointマウントする NAS ファイルシステムのディレクトリ。 このパラメーターは、以前に作成された NAS ファイルシステムとの関連付けに使用されます。
****-****.<region>.nas.aliyuncs.comなどのマウントポイントアドレスを入力すると、NAS ファイルシステムのルートディレクトリ(/)がマウントされます。****-****.<region>.nas.aliyuncs.com:/dirなどのマウントポイントアドレスとサブディレクトリを入力すると、NAS ファイルシステムの/dirディレクトリがマウントされます。/dirディレクトリが存在しない場合は、システムによって自動的に作成されます。
csi.alibabacloud.com/mount-optionsNAS ファイルシステムのマウントに必要なパラメーター。
nolock,tcp,noresvportを使用することをお勧めします。accessModesアクセスモード。
storageポッドに割り当てられるストレージ容量。 これは、作成する NAS ボリュームの容量を指します。
PVC を作成します。
kubectl create -f nas-pvc.yamlPV を確認します。
kubectl get pv次の出力は、作成した PVC の構成で指定された NAS ファイルシステムに関する情報に基づいて、PV が自動的に作成されたことを示しています。 情報には、ファイルシステムのマウントポイントが含まれています。
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nas-ea7a0b6a-bec2-4e56-b767-47222d3a**** 20Gi RWX Retain Bound default/nas-pvc alibaba-cloud-nas 1m58sPVC を表示します。
kubectl get pvc次の出力は、PV が PVC に自動的にバインドされていることを示しています。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE nas-pvc Bound nas-ea7a0b6a-bec2-4e56-b767-47222d3a**** 20Gi RWX alibaba-cloud-nas <unset> 2m14s
コンソール
ACS コンソール にログオンします。
[クラスタ] で、クラスタの名前をクリックして、クラスタ管理ページに移動します。
クラスタ管理ページの左側のナビゲーションウィンドウで、 を選択します。
[永続ボリュームクレーム] ページで、[作成] をクリックします。
表示されるダイアログボックスで、パラメーターを構成し、[作成] をクリックします。
パラメーター
説明
例
[PVC タイプ]
[NAS] を選択します。
NAS
[名前]
PVC のカスタム名を指定します。 名前は、UI に表示される形式の要件に従う必要があります。
nas-pvc
[割り当てモード]
[マウントポイントドメイン名を使用] を選択します。
マウントポイントドメイン名を使用
[ストレージドライバ]
[CSI] がデフォルトで選択されています。
CSI
[合計]
ポッドに割り当てられるストレージ容量。 これは、NAS ボリュームの容量でもあります。
20Gi
[アクセスモード]
ReadWriteMany または ReadWriteOnce を選択できます。
ReadWriteMany
[マウントポイントドメイン名]
マウントする NAS ファイルシステムのディレクトリ。
****-****.<region>.nas.aliyuncs.comなどのマウントポイントアドレスを入力すると、NAS ファイルシステムのルートディレクトリ(/)がマウントされます。****-****.<region>.nas.aliyuncs.com:/dirなどのマウントポイントアドレスとサブディレクトリを入力すると、NAS ファイルシステムの/dirディレクトリがマウントされます。/dirディレクトリが存在しない場合は、システムによって自動的に作成されます。
350514****-mw***.cn-shanghai.nas.aliyuncs.com
作成が完了すると、[永続ボリュームクレーム] ページに新しく作成された PVC が表示されます。 PVC は、自動的に作成された PV (NAS ストレージボリューム) にバインドされています。 対応する PV の詳細は、[永続ボリューム] ページで確認できます。


ステップ 3: アプリケーションを作成して NAS ボリュームをマウントする
kubectll
nas-test.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
次の YAML テンプレートは、2 つのポッドをプロビジョニングするデプロイメントを作成します。どちらのポッドも
nas-pvcという名前の PVC を介してストレージリソースをリクエストし、NAS ボリュームを/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デプロイメントを作成し、NAS ファイルシステムをデプロイメントにマウントします。
kubectl create -f nas-test.yamlデプロイメントによって作成されたポッドのステータスを確認します。
kubectl get pod | grep nas-test次の出力は、2 つのポッドが作成されたことを示しています。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40sマウントパスを表示します。
次のコマンドを実行して、マウントパス内のファイルを表示します。デフォルトでは、データは返されません。
kubectl exec nas-test-****-***a -- ls /data
コンソール
クラスタ管理ページの左側のナビゲーションウィンドウで、 を選択します。
[デプロイメント] ページで、[イメージから作成] をクリックします。
デプロイメントのパラメーターを設定し、[作成] をクリックします。
次の表に、いくつかのパラメーターについて説明します。その他のパラメーターにはデフォルト値を使用します。詳細については、「デプロイメントを作成する」をご参照ください。
構成ページ
パラメーター
説明
例
[基本情報]
[名前]
デプロイメントのカスタム名を入力します。名前は、UI に表示される形式の要件に従う必要があります。
nas-test
[レプリカ]
デプロイメントによってプロビジョニングされるポッドレプリカの数。
2
[コンテナー構成]
[イメージ名]
アプリケーションのデプロイに使用するイメージのアドレス。
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
[必要なリソース]
アプリケーションに必要な vCore の数とメモリの量を指定します。
0.25 vCore と 0.5 GiB のメモリ
[ボリューム]
[PVC を追加] をクリックし、パラメーターを構成します。
[マウントソース]: 作成した PVC を選択します。
[コンテナーパス]: コンテナー内の NAS ファイルシステムをマウントするパスを入力します。
マウントソース: nas-pvc
コンテナーパス: /data
アプリケーションがデプロイされているかどうかを確認します。
[デプロイメント] ページで、アプリケーションの名前をクリックします。
[ポッド] タブで、ポッドが正常に実行されていること (ステータスが Running であること) を確認します。
新しい NAS ファイルシステムをストレージボリュームとして作成する
ステップ 1:StorageClass を作成する
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 ファイルシステムは、異なるリージョンとゾーンをサポートしています。ビジネスのストレージ要件、ACS クラスタのリージョン、ACS クラスタ内のポッドで使用されている 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 ファイルシステムのタイプ。
storageTypeNAS ファイルシステムのストレージタイプ。
汎用型 NAS ファイルシステムの場合、次の値がサポートされています。
Performance(デフォルト):パフォーマンスCapacity:容量
超高速型 NAS ファイルシステムの場合、次の値がサポートされています。
standard(デフォルト):中間advanced:アドバンスト
regionIdNAS ファイルシステムが属するリージョンの ID。リージョン ID は、ACS クラスタのリージョン ID と同じである必要があります。
zoneIdNAS ファイルシステムが属するゾーンの ID。ACS クラスタ内のポッドで使用されている vSwitch に基づいてゾーンを選択します。
説明同じ VPC 内では、NAS ファイルシステムをゾーンをまたいでマウントできます。パフォーマンス向上のために、同じゾーンを選択することをお勧めします。
vpcId、vSwitchIdNAS ファイルシステムのマウントポイントが属する VPC と vSwitch の ID。ACS クラスタ内のポッドで使用されている VPC と vSwitch の ID に値を設定します。
accessGroupNameNAS ファイルシステムのマウントポイントが属する権限グループ。デフォルト値は
DEFAULT_VPC_GROUP_NAMEです。provisionerドライバタイプ。値を
nasplugin.csi.alibabacloud.comに設定します。これは、Alibaba Cloud NAS CSI プラグインが使用されていることを示します。reclaimPolicyPV の再利用ポリシー。
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 つのポッドをプロビジョニングする Deployment を作成します。どちらのポッドも
nas-pvc-fsという名前の PVC を介してストレージリソースをリクエストし、NAS ボリュームを/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-fsDeployment を作成し、NAS ファイルシステムをマウントします。
kubectl create -f nas-test-fs.yamlDeployment によって作成されたポッドのステータスを確認します。
kubectl get pod | grep nas-test次の出力は、2 つのポッドが作成されたことを示しています。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40sマウントパスを表示します。
次のコマンドを実行して、マウントパス内のファイルを表示します。デフォルトでは、データは返されません。
kubectl exec nas-test-****-***a -- ls /data
NAS の共有ストレージとデータ永続化機能を確認する
前の例で作成したデプロイメントは 2 つのポッドをプロビジョニングし、NAS ファイルシステムがポッドにマウントされます。次の方法で確認できます。
1 つのポッドにファイルを作成し、別のポッドからファイルを表示して、共有ストレージを確認します。
デプロイメントを再作成します。再作成されたポッドから 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次の出力は、新しく作成されたファイル
test.txtが共有されていることを示しています。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