共有データと高い I/O パフォーマンスを必要とするアプリケーションでは、Apsara File Storage NAS (NAS) ファイルシステムを永続ボリューム (PV) として使用できます。このトピックでは、NAS ボリュームをアプリケーションにマウントし、NAS の共有ストレージとデータの永続性の特徴を検証する方法について説明します。
背景情報
NAS は、共有アクセス、スケーラビリティ、高い信頼性、および高いパフォーマンスを提供する分散ファイルシステムです。共有データと高い I/O パフォーマンスを必要とするアプリケーションに適しています。詳細については、「ストレージの概要」をご参照ください。
さまざまなタイプの NAS ファイルシステムのストレージ仕様、パフォーマンス、課金、サポートされているリージョンとゾーンの詳細については、「汎用型 NAS ファイルシステム」および「超高速型 NAS ファイルシステム」をご参照ください。
汎用型 NAS ファイルシステムと超高速型 NAS ファイルシステムでは、マウント接続性、ファイルシステムの数、プロトコルタイプに異なる制限があります。詳細については、「制限」をご参照ください。
NAS ファイルシステムを所有しているかどうかに応じて、次のいずれかの方法で NAS ボリュームをマウントして使用できます。
NAS ファイルシステムを所有している場合は、直接マウントして共有できます。詳細については、「既存の NAS ファイルシステムを永続ボリュームとして使用する」をご参照ください。
NAS ファイルシステムを所有していない場合は、StorageClass を使用して自動的に作成およびマウントできます。詳細については、「新しい NAS ファイルシステムを永続ボリュームとして作成する」をご参照ください。
前提条件
managed-csiprovisioner コンポーネントが ACS クラスターにインストールされています。
ACS コンソールの ACS クラスター管理ページに移動します。クラスター管理ページの左側のナビゲーションウィンドウで、 を選択します。[ストレージ] タブで、managed-csiprovisioner がインストールされているかどうかを確認できます。
制限
SMB プロトコルを使用する NAS ファイルシステムのマウントはサポートされていません。
NAS ファイルシステムは、同じ VPC 内の Pod にのみマウントできます。VPC をまたいだマウントはサポートされていません。
説明同じ VPC 内では、NAS ファイルシステムをゾーンをまたいでマウントできます。
NAS ファイルシステムのマウントには、NFSv3 プロトコルのみがサポートされています。
考慮事項
NAS は共有ストレージを提供します。単一の NAS ボリュームを複数の Pod にマウントできます。複数の Pod が同時に同じデータを変更する場合、アプリケーションでデータ同期を処理する必要があります。
NAS ボリュームをマウントするときは、アプリケーションの YAML ファイルで
securityContext.fsgroupを構成しないでください。構成すると、マウントが失敗する可能性があります。説明NAS ファイルシステムの
/ルートディレクトリの権限、オーナー、またはグループを変更することはできません。NAS ボリュームをマウントした後は、そのマウントポイントを削除しないでください。マウントポイントを削除すると、オペレーティングシステムが応答を停止する可能性があります。
既存の NAS ファイルシステムを永続ボリュームとして使用する
ステップ 1: NAS ファイルシステム情報を取得する
ACS Pod で使用される VPC ID と 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 クラスター内の Pod と同じゾーンにある NAS ファイルシステムを使用してください。
NAS ファイルシステムが [NFS] プロトコルを使用していることを確認します。SMB プロトコルを使用する NAS ファイルシステムはマウントできません。

マウントポイントが要件を満たしていることを確認し、そのアドレスを取得します。
ファイルシステム ID をクリックします。
ファイルシステムの詳細ページの左側のナビゲーションウィンドウで、[マウントポイント] をクリックします。
[マウントポイント] エリアで、既存のマウントポイントが要件を満たしていることを確認し、マウントポイントアドレスを取得します。
説明汎用型 NAS ファイルシステムのマウントポイントは自動的に作成されます。超高速型 NAS ファイルシステムのマウントポイントは手動で作成する必要があります。
既存のマウントポイントが要件を満たしていない場合は、新しいものを作成します。詳細については、「マウントポイントの管理」をご参照ください。
マウントポイントの VPC は、ACS クラスター内の Pod が使用する VPC と同じでなければなりません。そうでない場合、マウントは失敗します。
パフォーマンスを向上させるために、マウントポイントの vSwitch は、ACS クラスター内の Pod が使用する 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 を作成します。次に、システムは PVC を作成し、それを PV に関連付けます。パラメーター
説明
csi.alibabacloud.com/mountpointマウントする NAS ファイルシステムのディレクトリ。これにより、ボリュームが作成した NAS ファイルシステムに関連付けられます。
マウントポイントアドレス (
****-****.<region>.nas.aliyuncs.comなど) を入力すると、NAS ファイルシステムのルートディレクトリ (/) がマウントされます。マウントポイントアドレスとサブディレクトリ (
****-****.<region>.nas.aliyuncs.com:/dirなど) を入力すると、NAS ファイルシステムの/dirディレクトリがマウントされます。/dirディレクトリが存在しない場合は、自動的に作成されます。
csi.alibabacloud.com/mount-optionsマウントパラメーター。
nolock,tcp,noresvportを使用します。accessModesアクセスモード。
storagePod に割り当てるストレージ容量。これは、作成する 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出力は、PVC が自動的に作成された PV に関連付けられていることを示しています。
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 コンソールにログインします。
[クラスター] で、クラスターの名前をクリックしてクラスター管理ページに移動します。
クラスター管理ページの左側のナビゲーションウィンドウで、 を選択します。
[永続ボリューム要求] ページで、[作成] をクリックします。
ダイアログボックスで、パラメーターを構成し、[作成] をクリックします。
パラメーター
説明
例
ストレージ要求タイプ
[NAS] を選択します。
NAS
名前
PVC の名前を入力します。フォーマット要件については、ページ上のプロンプトをご参照ください。
nas-pvc
割り当てモード
[マウントポイントドメイン名で作成] を選択します。
マウントポイントドメイン名で作成
ストレージドライバー
デフォルトで [CSI] が選択されています。
CSI
合計容量
Pod に割り当てるストレージ容量。これは NAS ボリュームの容量です。
20 GiB
アクセスモード
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 が作成されると、[PersistentVolumeClaims] ページに表示されます。PVC は、NAS ボリュームである自動的に作成された PV にバインドされます。この PV の詳細は、[永続ボリューム] ページで表示できます。


ステップ 3: アプリケーションを作成し、NAS ボリュームをマウントする
kubectl
次の内容を含む nas-test.yaml という名前のファイルを作成します。
次の YAML ファイルは、2 つの Pod を持つ Deployment を作成します。両方の Pod は、
nas-pvcという名前の PVC からストレージリソースを要求し、ボリュームを/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-pvcDeployment を作成し、NAS ボリュームをマウントします。
kubectl create -f nas-test.yamlDeployment 内の Pod のステータスを確認します。
kubectl get pod | grep nas-test次の出力は、2 つの Pod が作成されたことを示しています。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40sマウントパスを確認します。
kubectl exec nas-test-****-***a -- df -h /data期待される出力:
Filesystem Size Used Avail Use% Mounted on 350514*****-mw***.cn-shanghai.nas.aliyuncs.com:/ 10P 0 10P 0% /data同様の出力が返された場合、ファイルシステムはマウントされています。
コンソール
クラスター管理ページの左側のナビゲーションウィンドウで、 を選択します。
[ステートレス] ページで、[イメージから作成] をクリックします。
Deployment パラメーターを構成し、[作成] をクリックします。
次の表に主要なパラメーターを説明します。他のパラメーターはデフォルト値のままにすることができます。詳細については、「Deployment を使用してステートレスアプリケーションを作成する」をご参照ください。
構成ページ
パラメーター
説明
例
アプリケーションの基本情報
アプリケーション名
Deployment の名前を入力します。フォーマット要件については、ページ上のプロンプトをご参照ください。
nas-test
レプリカ数
Deployment のレプリカ数を構成します。
2
コンテナー構成
イメージ名
アプリケーションをデプロイするイメージのアドレスを入力します。
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
必須リソース
必須の vCPU とメモリリソースを設定します。
0.25 vCPU, 0.5 GiB
ボリューム
[永続ボリューム要求の追加] をクリックし、パラメーターを構成します。
マウントソース: 作成した PVC を選択します。
コンテナーパス: NAS ファイルシステムをマウントするコンテナー内のパスを入力します。
マウントソース: nas-pvc
コンテナーパス: /data
アプリケーションの Deployment ステータスを確認します。
[ステートレス] ページで、アプリケーション名をクリックします。
[Pod] タブで、Pod のステータスが実行中であることを確認します。
新しい NAS ファイルシステムを永続ボリュームとして作成する
ステップ 1: StorageClass を作成する
パラメーターの説明に基づいて次の YAML 内容を変更し、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 ファイルシステムのさまざまなタイプとストレージクラスは、さまざまなリージョンとゾーンでサポートされています。NAS ファイルシステムとマウントポイントには、適切なリージョン、ゾーン、VPC、および vSwitch を選択する必要があります。選択は、ACS クラスターのリージョン、およびクラスター内の Pod の 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 ボリュームは 1 つの NAS ファイルシステムに対応します。fileSystemTypeNAS ファイルシステムのタイプ。
standard(デフォルト): 汎用型 NAS ファイルシステム。詳細については、「汎用型 NAS ファイルシステム」をご参照ください。extreme: 超高速型 NAS ファイルシステム。詳細については、「超高速型 NAS ファイルシステム」をご参照ください。
storageTypeNAS ファイルシステムのストレージクラス。
汎用型 NAS ファイルシステムでは、次の値がサポートされています。
Performance(デフォルト): コンピューティング最適化インスタンスCapacity: ストレージ最適化
超高速型 NAS ファイルシステムでは、次の値がサポートされています。
standard(デフォルト): 中間advanced: アドバンスト
regionIdNAS ファイルシステムが存在するリージョンの ID。リージョン ID は ACS クラスターのリージョン ID と同じでなければなりません。
zoneIdNAS ファイルシステムが存在するゾーンの ID。ACS クラスター内の Pod が使用する vSwitch に基づいてゾーンを選択します。
説明同じ VPC 内では、NAS ファイルシステムはゾーンをまたいでマウントできます。パフォーマンスを向上させるために、同じゾーンを選択することをお勧めします。
vpcId,vSwitchIdNAS ファイルシステムのマウントポイントが存在する VPC と vSwitch の ID。これらを ACS クラスター内の Pod が使用する VPC と vSwitch の ID に設定します。
accessGroupNameNAS ファイルシステムのマウントポイントの権限グループ。デフォルト値は
DEFAULT_VPC_GROUP_NAMEです。provisionerドライバーのタイプ。これは
nasplugin.csi.alibabacloud.comに設定する必要があります。これは、Alibaba Cloud NAS Container Storage Interface (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 という名前のファイルとして保存します。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-pvc-fs spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-fs resources: requests: storage: 20Gi次の表にパラメーターを説明します。
パラメーター
説明
accessModesアクセスモード。
storagePod に割り当てるストレージ容量。これは、作成する 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 つの Pod を含む Deployment を作成します。両方の Pod は、
nas-pvc-fsという名前の PVC からストレージを要求し、ボリュームを/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 内の Pod のステータスを確認します。
kubectl get pod | grep nas-test次の出力は、2 つの Pod が作成されたことを示しています。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40sマウントパスを確認します。
kubectl exec nas-test-****-***a -- df -h /data期待される出力:
Filesystem Size Used Avail Use% Mounted on 350514*****-mw***.cn-shanghai.nas.aliyuncs.com:/ 10P 0 10P 0% /data同様の出力が返された場合、ファイルシステムはマウントされています。
NFS ボリュームを使用して既存の NAS ファイルシステムをマウントする
ステップ 1: NAS ファイルシステム情報を取得する
NAS マウントポイントアドレスの取得方法の詳細については、「NAS ファイルシステム情報を取得する」をご参照ください。
ステップ 2: アプリケーションを作成し、NAS ボリュームをマウントする
次の内容で
nas-test-nfs.yamlという名前のファイルを作成します。次の YAML は、2 つの Pod を持つ Deployment を作成します。両方の Pod は、
nfs-nasという名前のボリュームを使用して、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: nfs-nas mountPath: /data volumes: - name: nfs-nas nfs: server: file-system-id.region.nas.aliyuncs.com # Alibaba Cloud NAS ファイルシステムのマウントポイントアドレス。これを実際の値に置き換えてください。例: 7bexxxxxx-xxxx.ap-southeast-1.nas.aliyuncs.com。 path: / # NAS ファイルシステム内のディレクトリのパス。ディレクトリは既存のディレクトリまたはルートディレクトリである必要があります。汎用型 NAS ファイルシステムのルートディレクトリは「/」です。超高速型 NAS ファイルシステムのルートディレクトリは「/share」です。Deployment を作成し、NAS ボリュームをマウントします。
kubectl create -f nas-test-nfs.yamlDeployment 内の Pod のステータスを確認します。
kubectl get pod | grep nas-test次の出力は、2 つの Pod が作成されたことを示しています。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40sマウントパスを確認します。
kubectl exec nas-test-****-***a -- df -h /data期待される出力:
Filesystem Size Used Avail Use% Mounted on 350514*****-mw***.cn-shanghai.nas.aliyuncs.com:/ 10P 0 10P 0% /data同様の出力が返された場合、ファイルシステムはマウントされています。
NAS の共有ストレージとデータの永続性を検証する
前の例で作成した Deployment には、同じ NAS ファイルシステムをマウントする 2 つの Pod が含まれています。次の手順を実行して、Deployment を検証できます。
1 つの Pod でファイルを作成し、もう 1 つの Pod からそのファイルを表示して、共有ストレージを検証します。
Deployment を再作成します。次に、新しい Pod から、ファイルシステム内のデータがまだ存在するかどうかを確認して、永続ストレージを検証します。
Pod 情報を表示します。
kubectl get pod | grep nas-test以下はサンプル出力です。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s共有ストレージを検証します。
1 つの Pod でファイルを作成します。
この例では、
nas-test-****-***aという名前の Pod を使用します。kubectl exec nas-test-****-***a -- touch /data/test.txtもう 1 つの Pod からファイルを表示します。
この例では、
nas-test-****-***bという名前の Pod を使用します。kubectl exec nas-test-****-***b -- ls /data出力は、新しいファイル
test.txtが共有されていることを示しています。test.txt
永続ストレージを検証します。
Deployment を再作成します。
kubectl rollout restart deploy nas-testPod を表示し、新しい Pod が作成されるのを待ちます。
kubectl get pod | grep nas-test以下はサンプル出力です。
nas-test-****-***c 1/1 Running 0 67s nas-test-****-***d 1/1 Running 0 49s新しい Pod から、ファイルシステム内のデータがまだ存在するかどうかを確認します。
この例では、
nas-test-c***という名前の Pod を使用します。kubectl exec nas-test-****-***c -- ls /data出力は、NAS ファイルシステム内のデータが永続化され、新しい Pod のマウントディレクトリから取得できることを示しています。
test.txt