Apsara File Storage NAS (NAS) は、複数の Pod 間で共有アクセスを提供する分散ファイルシステムです。アプリケーションで永続的かつパフォーマンス専有型の共有ストレージが必要な場合 (たとえば、複数の Pod が同じデータに同時に読み書きする必要がある場合など) に、NAS 永続ボリュームを使用します。
3 つのプロビジョニングアプローチが利用可能です:
| アプローチ | 使用する状況 |
|---|---|
| 静的プロビジョニング | すでに NAS ファイルシステムがあり、PVC アノテーションを介して直接参照する場合。 |
| 動的プロビジョニング | NAS ファイルシステムがない場合。StorageClass が構成を定義し、PVC が作成されるとシステムが自動的にファイルシステムを作成します。 |
| インライン NFS ボリューム | PVC や PV を使用せずに、Pod spec で NAS ファイルシステムを直接マウントする場合。PVC と PV の管理オーバーヘッドがなく、構成が簡単です。 |
ほとんどのユースケースでは、ストレージ構成とアプリケーションのデプロイメントを分離できるため、静的または動的プロビジョニングが推奨されます。
前提条件
開始する前に、以下を確認してください:
-
お使いの ACS クラスターに managed-csiprovisioner コンポーネントがインストールされています。確認するには、ACS コンソール でクラスター管理ページに移動し、[運用] > [アドオン] を選択して、[ストレージ] タブで managed-csiprovisioner を探してください。
制限事項
| 制限事項 | 詳細 |
|---|---|
| プロトコル | NFSv3 のみがサポートされています。SMB プロトコルによるマウントはサポートされていません。 |
| ネットワーク範囲 | NAS ファイルシステムは、同じ VPC 内の Pod にのみマウントできます。VPC 間のマウントはサポートされていません。同じ VPC 内でゾーン間のアクセスが必要な場合、ゾーン間のマウントはサポートされています。 |
注意事項
-
共有書き込みにはアプリケーションレベルの同期が必要です。NAS は共有ストレージを提供し、単一の NAS ボリュームを複数の Pod に同時にマウントできます。複数の Pod が同時に同じデータに書き込む場合、アプリケーションでデータ同期を処理する必要があります。
-
securityContext.fsgroup を設定しないでください。 NASファイルシステムの
/ルートディレクトリでは、権限、所有者、またはグループの変更をサポートしていません。Pod仕様でfsgroupを設定すると、マウントが失敗します。 -
使用中のマウントターゲットを削除しないでください。アクティブなマウントターゲットを削除すると、ノードのオペレーティングシステムが応答しなくなる可能性があります。
既存の NAS ファイルシステムを永続ボリュームとして使用
すでに NAS ファイルシステムがある場合は、静的プロビジョニングを使用します。システムは PVC アノテーションのマウントターゲットアドレスに基づいて静的永続ボリューム (PV) を作成し、PVC を自動的にバインドします。
ステップ 1: NAS ファイルシステム情報の取得
-
ACS Pod で使用されている VPC ID と vSwitch ID を取得します。次のコマンドを実行して acs-profile ConfigMap を読み取ります:
-
ACS コンソールにログインします。
-
「[クラスター]」ページで、クラスター名をクリックします。
-
左側のナビゲーションウィンドウで、[設定] > [ConfigMap] を選択します。
-
名前空間を [kube-system] に設定し、acs-profile を見つけ、[YAML の編集] をクリックします。
-
vpcIdおよびvSwitchIdsの値をコピーします。
kubectl get cm -n kube-system acs-profile -o yaml出力で
vpcIdフィールドとvSwitchIdsフィールドを探します。または、ACS コンソールからこれらの値を取得します: -
-
NAS ファイルシステムに互換性があることを確認し、そのマウントターゲットアドレスを取得します。
-
「NAS コンソール」にログインし、[ファイルシステム一覧] をクリックします。
-
ご利用の NAS ファイルシステムを見つけ、以下を確認します:

-
NAS ファイルシステムが ACS クラスターと同じリージョンにあること。NAS ファイルシステムは、リージョンや VPC をまたいでマウントすることはできません。
-
NAS ファイルシステムは、[NFS] プロトコルを使用します。SMB はサポートされていません。
-
最高のパフォーマンスを得るには、NAS ファイルシステムが Pod と同じゾーンにあることが推奨されます。同じ VPC 内であれば、ゾーン間のマウントはサポートされています。
-
-
マウントターゲットアドレスを取得します:
-
ファイルシステム ID をクリックして、ファイルシステムの詳細ページを開きます。
-
左側のナビゲーションウィンドウで、[マウントターゲット] をクリックします。
-
マウントポイントが以下の要件を満たしていることを確認し、そのアドレスをコピーします。> [注意] 汎用型 NAS では、マウントポイントが自動的に作成されます。超高速型 NAS ファイルシステムでは、マウントポイントを手動で作成する必要があります。適切なマウントポイントがない場合は、「マウントポイントの管理」をご参照ください。

-
マウントターゲットが Pod と同じ VPC にあること。VPC が異なる場合、マウントは失敗します。
-
最高のパフォーマンスを得るには、マウントターゲットの vSwitch が Pod で使用されている vSwitch と一致することが推奨されます。
-
マウントポイントのステータスは [利用可能] です。
-
-
-
ステップ 2: PVC の作成
kubectl
-
次の内容を
nas-pvc.yamlとして保存します。*****-mw*.cn-shanghai.nas.aliyuncs.comを実際の マウントターゲットアドレス に置き換えます。重要この PVC を適用すると、システムはまず、
アノテーション内の NAS 構成に基づいて静的 PV を作成し、その後、PVC を作成してその PV にバインドします。パラメーター 説明 csi.alibabacloud.com/mountpointマウントする NAS ディレクトリを指定します。 ルートディレクトリ (/) をマウントする場合は、マウントターゲットアドレス (例: <b>-.region.nas.aliyuncs.com`) を入力します。 特定のサブディレクトリをマウントする場合は、サブディレクトリのパス (例:`-**.region.nas.aliyuncs.com:/dir) を追加します。 指定したサブディレクトリが存在しない場合は、自動的に作成されます。csi.alibabacloud.com/mount-optionsマウントオプションです。 nolock,tcp,noresvportを使用します。accessModesアクセスモードです。 ReadWriteManyを指定すると、複数の Pod による同時読み書きが可能になります。storagePod に割り当てられるストレージ容量です。 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主要なパラメーター:
-
PVC を作成します:
kubectl create -f nas-pvc.yaml -
PV が作成されたことを確認します:
kubectl get pvc期待される出力:
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 1m58s -
PVC が PV にバインドされていることを確認します:
kubectl get 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 が作成されると、その PVC は [永続ボリューム要求] ページに「[バインド済み]」のステータスで表示され、自動的に作成された PV にリンクされます。
パラメーター 説明 例 PVC タイプ NAS を選択します。 NAS 名前 PVC の名前を指定します。 nas-pvc 割り当てモード マウントターゲットドメイン名を使用 を選択します。 マウントターゲットドメイン名で作成 ボリュームプラグイン CSI がデフォルトで選択されます。 CSI 容量 Pod に割り当てるストレージ容量です。 20 GiB アクセスモード ReadWriteManyまたはReadWriteOnceです。ReadWriteMany マウントターゲットドメイン名 マウントする NAS ディレクトリです。ルートディレクトリ ( /) をマウントする場合はマウントターゲットアドレスを入力し、サブディレクトリをマウントする場合はサブディレクトリパスを追加します (例:**-**.region.nas.aliyuncs.com:/dir)。指定したサブディレクトリが存在しない場合、自動的に作成されます。350514**-mw*.cn-shanghai.nas.aliyuncs.com

ステップ 3: デプロイメントを作成し、NAS ボリュームをマウント
kubectl
-
次の内容を
nas-test.yamlとして保存します。このデプロイメントは、両方ともnas-pvcPVC を/dataにマウントする 2 つの Pod を作成します。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 -
デプロイメントを作成します:
kubectl create -f nas-test.yaml -
両方の Pod が実行中であることを確認します:
kubectl get pod | grep nas-test期待される出力:
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s -
NAS ファイルシステムがマウントされていることを確認します:
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-test [基本情報] [レプリカ] Pod レプリカの数です。 2 [コンテナ] [イメージ名] コンテナイメージのアドレスです。 registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest[コンテナ] [必須リソース] vCPU とメモリリソースです。 0.25 vCPU、0.5 GiB [ボリューム] — [PVC の追加] をクリックします。[マウントソース] を作成した PVC に設定し、[コンテナパス] をマウントパスに設定します。 マウントソース: nas-pvc、コンテナパス: /data -
デプロイメントを確認します:
-
[デプロイメント] ページで、デプロイメント名をクリックします。
-
[Pods] タブで、すべての Pod のステータスが [実行中] であることを確認します。
-
新しい NAS ファイルシステムを永続ボリュームとして作成
既存の NAS ファイルシステムがない場合は、動的プロビジョニングを使用します。StorageClass がファイルシステム構成を定義し、永続ボリューム要求 (PVC) が作成されるとシステムが自動的に作成します。
NAS ファイルシステムタイプ、ストレージクラス、およびプロトコルサポートは、リージョンとゾーンによって異なります。StorageClass を構成する前に、選択した NAS タイプでサポートされているリージョンとゾーンを確認してください:
-
仕様、パフォーマンス、課金、およびサポートされているリージョン: 「汎用型 NAS ファイルシステム」および「超高速型 NAS ファイルシステム」
-
マウント接続制限とプロトコルタイプ: 「使用制限」
ステップ 1: StorageClass の作成
-
以下の内容を
nas-sc.yamlとして保存し、プレースホルダー値をお客様の ACS クラスターの値に置き換えます。VPC ID および vSwitch ID を取得するには、次のコマンドを実行します:パラメーター 必須 説明 volumeAs必須 filesystemである必要があります。各 NAS ボリュームは、1 つの NAS ファイルシステムに対応します。fileSystemType必須 standard(デフォルト)、エクストリーム NAS の場合はextremeを指定します。storageType必須 ファイルシステムタイプ内のストレージクラスです。 汎用 NAS: Performance(デフォルト、コンピューティング最適化)またはCapacity(ストレージ最適化)。 エクストリーム NAS:standard(デフォルト、中間)またはadvanced。regionId必須 NAS ファイルシステムのリージョンです。ご利用の ACK クラスターのリージョンと一致させる必要があります。 zoneId必須 NAS ファイルシステムのゾーンです。Pod で使用する vSwitch に基づいてゾーンを選択してください。同一 VPC 内でのクロスゾーンマウントはサポートされていますが、同一ゾーンを使用することで、より高いパフォーマンスが得られます。 vpcId、vSwitchId必須 NAS マウントポイントの VPC および vSwitch ID です。ご利用の Pod で使用する VPC および vSwitch と一致させる必要があります。 accessGroupName任意 マウントポイントのアクセス許可グループです。デフォルト値は DEFAULT_VPC_GROUP_NAMEです。provisioner必須 nasplugin.csi.alibabacloud.comである必要があります。reclaimPolicy必須 有効な値は Retainのみです。PV が削除された場合、NAS ファイルシステムおよびマウントポイントは保持されます。kubectl get cm -n kube-system acs-profile -o yamlapiVersion: 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主要なパラメーター:
-
StorageClass を作成します:
kubectl create -f nas-sc.yaml -
StorageClass が作成されたことを確認します:
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として保存します。パラメーター 説明 accessModesアクセスモード。 storageClassName作成した StorageClass の名前と一致する必要があります。 storageNAS ボリュームのストレージ容量。超高速型 NAS ファイルシステムの場合、最小値は 100 GiB です。より小さい値を設定すると、PV の作成が妨げられます。 kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-pvc-fs spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-fs resources: requests: storage: 20Gi主要なフィールド:
-
PVC を作成します:
kubectl create -f nas-pvc-fs.yaml -
PVC がバインドされていることを確認します:
kubectl get pvc期待される出力:
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> 14sPVC は自動的にプロビジョニングされた PV にバインドされます。対応する NAS ファイルシステムは NAS コンソールで確認できます。
ステップ 3: デプロイメントを作成し、NAS ボリュームをマウント
-
以下の内容を
nas-test-fs.yamlとして保存します。このデプロイメントでは、nas-pvc-fsPVC を/dataにマウントする 2 つの Pod が作成されます。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 # マウント先アドレス。例: 7bexxxxxx-xxxx.ap-southeast-1.nas.aliyuncs.com path: / # NASファイルシステム内のディレクトリのパス。このディレクトリは既存のディレクトリかルートディレクトリである必要があります。汎用型 NAS のルートディレクトリは "/" です。超高速型 NAS ファイルシステムのルートディレクトリは "/share" です。 -
デプロイメントを作成します:
kubectl create -f nas-test-fs.yaml -
両方の Pod が実行中であることを確認します:
kubectl get pod | grep nas-test期待される出力:
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s -
NAS ファイルシステムがマウントされていることを確認します:
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 ファイルシステムをマウント
PVC や PV を作成せずに、Pod spec で直接 NAS ファイルシステムをマウントしたい場合は、インライン NFS ボリュームを使用します。このアプローチは、構成に必要なリソースが少なくて済みます。
ステップ 1: NAS マウントターゲットアドレスの取得
「ステップ 1: NAS ファイルシステム情報の取得」の手順に従って、マウントターゲットアドレスを取得します。
ステップ 2: デプロイメントの作成
-
次の内容を
nas-test-nfs.yamlとして保存し、serverの値を実際の マウントターゲットアドレス に置き換えてください。この デプロイメント は、インライン NFS ボリューム を使用して NAS ファイルシステム を/dataにマウントする 2 つの Pod を作成します。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 # マウントターゲットアドレス。例: 7bexxxxxx-xxxx.ap-southeast-1.nas.aliyuncs.com path: / # NAS ファイルシステム内のディレクトリのパス。ディレクトリは既存のディレクトリまたはルートディレクトリである必要があります。汎用型 NAS ファイルシステムのルートディレクトリは "/" です。超高速型 NAS ファイルシステムのルートディレクトリは "/share" です。 -
デプロイメントを作成します:
kubectl create -f nas-test-nfs.yaml -
両方の Pod が実行中であることを確認します:
kubectl get pod | grep nas-test期待される出力:
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s -
NAS ファイルシステムがマウントされていることを確認します:
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 ファイルシステムを共有する 2 つの Pod を作成します。これらの手順を使用して、共有ストレージとデータの永続性の両方が正しく機能することを確認します。
共有ストレージの確認
-
Pod 名を取得します:
kubectl get pod | grep nas-test出力例:
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s -
一方の Pod からファイルを作成します:
test.txt -
もう一方の Pod からファイルを読み取ります:
kubectl exec nas-test-****-***b -- ls /data期待される出力:
test.txttest.txtは両方の Pod から表示され、共有ストレージが機能していることを確認できます。
データの永続性の確認
-
デプロイメントを再起動して新しい Pod を作成します:
kubectl rollout restart deploy nas-test -
新しい Pod の準備が整うのを待ちます:
kubectl get pod | grep nas-test出力例:
nas-test-****-***c 1/1 Running 0 67s nas-test-****-***d 1/1 Running 0 49s -
新しい Pod からファイルを読み取ります:
kubectl exec nas-test-****-***c -- ls /data期待される出力:
test.txttest.txtは Pod が置き換えられた後も存在することから、NAS ファイルシステムが Pod の再起動をまたいでデータを永続化することが確認できます。