NAS の動的にプロビジョニングされたボリュームを使用すると、システムは要求に応じてワークロード用のストレージスペースを自動的に作成および割り当てます。永続ボリューム (PV) を事前に作成する必要はありません。このアプローチは、複数の Pod による同時読み書きアクセスなどのデータ永続化と共有アクセスの両方の要件を満たし、Web アプリケーション、ログの保持、および同様のユースケースのストレージ管理を簡素化します。
仕組み
永続ボリューム要求 (PVC) を作成すると、システムは PVC で指定された StorageClass を使用して、新しい PV とそれに対応するストレージボリュームを自動的に作成します。このモデルはより柔軟で、自動ボリューム拡張をサポートします。
マウントモード
マウントモードは、StorageClass の volumeAs パラメーターを使用して設定できます。このパラメーターは、各 PV が NAS ファイルシステムにどのようにマッピングされるかを定義します。
マウントモード | 説明 | ユースケース |
サブディレクトリモード。各 PV は、1 つの NAS ファイルシステム内の専用サブディレクトリにマッピングされます。これにより、データの隔離に役立ちます。 |
| |
共有ディレクトリモード。すべての PV は、StorageClass で定義された同じ NAS ディレクトリにマッピングされます。この StorageClass を参照するすべての PVC は、NAS ファイルシステム上の同じ共有ディレクトリを指します。 | 異なる名前空間にまたがる複数の Pod が、同じ NAS サブディレクトリをマウントする必要があります。 | |
filesystem (非推奨) | ファイルシステムモード。各 PV は、新しく作成された独立した NAS ファイルシステムインスタンスにマッピングされます。 | パフォーマンスやセキュリティのために厳密な隔離が必要です。システムは、アプリケーション用に独立した NAS ファイルシステムとマウントポイントを動的に作成および削除します。このオプションはコストが高くなります。 |
一般的なワークフロー
NAS の動的にプロビジョニングされたボリュームをマウントする主な手順は次のとおりです。
|
事前準備
csi-plugin および csi-provisioner コンポーネントがインストールされていること。
CSI コンポーネントはデフォルトでインストールされています。手動でアンインストールされていないことをご確認ください。インストール状況は ページで確認できます。CSI コンポーネントをアップグレードして最新バージョンにします。
subpath または sharepath モードを使用する場合、まず以下の条件を満たす NAS ファイルシステムを作成する必要があります。そうでない場合は、新しいファイルシステムを作成する必要があります。詳細については、「ファイルシステムの作成」をご参照ください。
NAS には、マウント接続性、ファイルシステム数、プロトコルの種類に関する制限事項があります。
プロトコルタイプ:NFS のみ。
Virtual Private Cloud (VPC):NAS ファイルシステムは、ご利用のクラスターと同じ VPC 内にある必要があります。NAS はゾーン間のマウントをサポートしますが、VPC 間のマウントはサポートしません。
マウントポイント:ご利用のクラスターと同じ VPC 内にあり、アクティブなステータスのマウントポイントを追加します。詳細については、「マウントポイントの管理」をご参照ください。マウントポイントのアドレスを記録しておきます。
(オプション) 暗号化タイプ:ストレージボリューム上のデータを暗号化するには、NAS ファイルシステムを作成する際に暗号化タイプを設定できます。
注意事項
マウントポイントを削除しないこと:ボリュームが使用中の間は、NAS コンソールで対応するマウントポイントを削除しないでください。削除すると、ノードの I/O 例外が発生する可能性があります。
同時書き込み:NAS は共有ストレージサービスです。複数の Pod が同じボリュームをマウントする場合、アプリケーションは同時書き込みによって引き起こされる可能性のあるデータ整合性の問題を処理する必要があります。
NAS での同時書き込みの制限に関する詳細については、「複数のプロセスまたはクライアントが同時に同じログファイルに書き込むときに発生する可能性のある例外を防ぐにはどうすればよいですか?」および「ファイルの読み書きに関する問題」をご参照ください。
マウントパフォーマンス:アプリケーションで
securityContext.fsgroupを設定すると、kubelet はマウント後にchmodまたはchownコマンドを再帰的に実行します。これにより、Pod の起動時間が大幅に増加する可能性があります。最適化に関する詳細については、「NAS 永続ボリュームに関するよくある質問」をご参照ください。
方法 1:subpath を使用したマウント
このモードでは、各 PVC は NAS ファイルシステム内に専用のサブディレクトリを自動的に作成し、それを PV として使用します。
CSI コンポーネントのバージョンは 1.31.4 以降である必要があります。コンポーネントのアップグレード方法の詳細については、「CSI コンポーネントのアップグレード」をご参照ください。
NAS ファイルシステムを作成し、マウントポイントのアドレスを取得していること。
1. StorageClass の作成
StorageClass は、動的ボリュームのプロビジョニングテンプレートとして機能します。ストレージリソースの取得元と動作を定義します。
kubectl
次の内容で
alicloud-nas-subpath.yamlという名前のファイルを作成します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: # StorageClass 名。クラスター内で一意である必要があります。 name: alicloud-nas-subpath mountOptions: - nolock,tcp,noresvport - vers=3 parameters: # subpath に設定します。 volumeAs: subpath # server フィールドのフォーマット:<nas-server-address>:/<path> server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s" archiveOnDelete: "true" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain allowVolumeExpansion: trueパラメーター
説明
mountOptionsNFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、NAS は NFS v3 を使用してマウントします。別のバージョンを指定するには、
vers=4.0を使用します。NAS タイプごとにサポートされている NFS バージョンについては、「NFS プロトコル」をご参照ください。parameters.volumeAsマウントモード。
subpathに設定します。parameters.serverNAS マウントポイントのアドレスとマウントするサブディレクトリのパス。フォーマット:
<nas-server-address>:/<path>。<nas-server-address>:NAS ファイルシステムのマウントポイントのアドレス。詳細については、「マウントポイントの管理」をご参照ください。:/<path>:マウントする NAS サブディレクトリ。未設定の場合、またはサブディレクトリが存在しない場合は、デフォルトでルートディレクトリがマウントされます。汎用型 NAS:ルートディレクトリは
/です。超高速型 NAS:ルートディレクトリは
/shareです。サブディレクトリをマウントする場合、pathは/shareで始まる必要があります (例:/share/data)。
parameters.archiveOnDeletePVC を削除したときに、バックエンドストレージ内のファイルとディレクトリを完全に削除するかどうかを決定します。
reclaimPolicyがDeleteの場合にのみ適用されます。NAS は共有ストレージサービスであるため、このオプションには確認プロンプトが表示されます。
true(デフォルト):ファイルとディレクトリは削除されません。代わりに、archived-{pvName}.{timestamp}の形式で名前が変更され、アーカイブされます。false:バックエンドの対応するディレクトリとデータは完全に削除されます。これにより、NAS サブディレクトリとその内容のみが削除され、NAS ファイルシステム自体は削除されません。
NAS ファイルシステムを削除するには、「ファイルシステムの削除」をご参照ください。
PV の作成と削除が頻繁に行われるシナリオでは、これを
falseに設定すると、CSI コントローラーのタスクキューがブロックされ、新しい PV が作成できなくなる可能性があります。詳細については、「NAS の動的にプロビジョニングされたボリュームを使用すると、CSI コントローラーのタスクキューが満杯になり、新しい PV を作成できない」をご参照ください。provisionerドライバーのタイプ。Alibaba Cloud NAS CSI コンポーネントを使用する場合、このパラメーターは
nasplugin.csi.alibabacloud.comに固定されます。reclaimPolicyPV のリサイクルポリシー。
Delete(デフォルト):PVC を削除すると、システムはarchiveOnDeleteの設定に従ってバックエンドストレージデータを処理します。Retain:PVC を削除しても、PV と NAS ファイルはそのまま残ります。手動で削除する必要があります。偶発的なデータ損失を防ぐために、高いセキュリティが求められるシナリオで使用します。
allowVolumeExpansion汎用型 NAS のみでサポート
PVC の容量を変更することで、この StorageClass によって作成された PV のオンライン拡張を許可します。
この StorageClass は、NAS のディレクトリクォータを使用して PV 容量を正確に管理および制限します。オンラインで拡張するには、PVC の
spec.resources.requests.storageフィールドを編集します。詳細については、「NAS の動的にプロビジョニングされたボリュームのディレクトリクォータの設定」をご参照ください。NAS ディレクトリクォータの適用は非同期です。PV の作成または拡張直後に、高速で大量の書き込みを行うと、クォータが完全に有効になる前にクォータを超える可能性があります。詳細については、「制限事項」をご参照ください。
StorageClass を作成します。
kubectl create -f alicloud-nas-subpath.yaml
コンソール
ACK コンソールにログインします。ACK コンソール。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[作成] をクリックします。クラスター内の StorageClass に一意の名前を入力し、[ボリュームタイプ] を NAS に設定します。プロンプトに従って StorageClass の作成を完了します。
以下の表に、主な設定項目を説明します。
設定項目
説明
マウントポイントの選択
NAS ファイルシステムのマウントポイントのアドレス。
ボリュームモード
ボリュームアクセスモードです。この例では、[サブディレクトリ](サブパス)を選択します。システムはマウントパスの下に自動的にサブディレクトリを作成します。データは
<NAS マウントポイント>:<マウントパス>/<pv-name>/の下に保存されます。マウントパス
マウントする NAS ファイルシステムのサブディレクトリ。このパラメーターを設定しない場合、デフォルトでルートディレクトリがマウントされます。
ディレクトリが NAS ファイルシステムに存在しない場合、自動的に作成されてマウントされます。
汎用型 NAS ファイルシステム:ルートディレクトリは
/です。超高速型 NAS ファイルシステム:ルートディレクトリは
/shareです。サブディレクトリをマウントする場合、pathは/shareで始まる必要があります (例:/share/data)。
リサイクルポリシー
PV のリサイクルポリシー。
Delete(デフォルト):PVC を削除すると、システムはarchiveOnDeleteの設定に従ってバックエンドストレージデータを処理します。Retain:PVC を削除しても、PV と NAS ファイルはそのまま残ります。手動で削除する必要があります。偶発的なデータ損失を防ぐために、高いセキュリティが求められるシナリオで使用します。
マウントオプション
NFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、NAS は NFS v3 を使用してマウントします。別のバージョンを指定するには、
vers=4.0を使用します。NAS タイプごとにサポートされている NFS バージョンについては、「NFS プロトコル」をご参照ください。StorageClass が作成された後、[ストレージクラス] リストで確認できます。
2. PVC の作成
PVC は、アプリケーションのストレージ要求を表します。StorageClass の動的プロビジョニングメカニズムをトリガーして、一致する PV を自動的に作成およびバインドします。
kubectl
次の内容で
nas-pvc.yamlという名前のファイルを作成します。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc spec: accessModes: - ReadWriteMany # バインドする StorageClass を指定します。 storageClassName: alicloud-nas-subpath resources: requests: # 必要なボリューム容量を宣言します。 storage: 20Giパラメーター
説明
accessModesアクセスモード。有効な値:
ReadWriteMany(デフォルト):ボリュームは多くのノードから読み書き可能としてマウントできます。ReadWriteOnce:ボリュームは単一のノードから読み書き可能としてマウントできます。ReadOnlyMany:ボリュームは多くのノードから読み取り専用としてマウントできます。
storageClassNameバインドする StorageClass。
storage必要なボリューム容量を宣言します。デフォルトでは、これはリソース要求として機能し、Pod が利用できる実際のストレージスペースを制限しません。
NAS の最大容量は仕様によって異なります。詳細については、「汎用型 NAS」および「超高速型 NAS」をご参照ください。
ただし、StorageClass で
allowVolumeExpansionがtrueに設定されている場合、この値はハードリミットになります。CSI ドライバーは、この制限を強制するために NAS ディレクトリクォータを設定します。PVC を作成します。
kubectl create -f nas-pvc.yamlPV を表示します。
kubectl get pv期待される出力:PV は自動的に作成され、StorageClass に基づいて PVC にバインドされます。
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE nas-a7540d97-0f53-4e05-b7d9-557309****** 20Gi RWX Retain Bound default/nas-csi-pvc alicloud-nas-subpath <unset> 5m
コンソール
詳細ページの左側ナビゲーションウィンドウで、 を選択します。
[永続ボリューム要求] ページで、[作成] をクリックします。 PVC を設定し、[作成] をクリックします。
設定項目
説明
永続ボリューム要求タイプ
NAS を選択します。
名前
PVC 名。名前空間内で一意である必要があります。
割り当てモード
「[ストレージクラスを使用した動的作成]」を選択します。
既存のストレージクラス
[ストレージクラスの選択] をクリックし、前に作成した StorageClass を選択します。
合計
必要なボリューム容量を宣言します。デフォルトでは、これはリソース要求として機能し、Pod が利用できる実際のストレージスペースを制限しません。
NAS の最大容量は仕様によって異なります。詳細については、「汎用型 NAS」および「超高速型 NAS」をご参照ください。
ただし、StorageClass で
allowVolumeExpansionがtrueに設定されている場合、この値はハードリミットになります。CSI ドライバーは、この制限を強制するために NAS ディレクトリクォータを設定します。アクセスモード
アクセスモード。有効な値:
ReadWriteMany(デフォルト):ボリュームは多くのノードから読み書き可能としてマウントできます。ReadWriteOnce:ボリュームは単一のノードから読み書き可能としてマウントできます。ReadOnlyMany:ボリュームは多くのノードから読み取り専用としてマウントできます。
3. アプリケーションの作成と NAS のマウント
PVC を作成した後、バインドされた PV をアプリケーションにマウントします。このセクションでは、同じ PVC を参照して同じ NAS サブディレクトリを共有する 2 つの Deployment を作成する方法について説明します。
kubectl
2 つの Deployment を作成し、同じ PVC をマウントして、同じ NAS ファイルシステムの同じサブディレクトリを共有します。
同じ NAS ファイルシステムの異なるサブディレクトリを複数の Pod にマウントするには、サブディレクトリごとに個別の StorageClass と対応する PVC を作成し、それぞれの PVC を個別にマウントする必要があります。
次の内容で
nginx-1.yamlとnginx-2.yamlという名前の 2 つのファイルを作成します。両方のアプリケーションの設定はほぼ同じです。どちらも同じ PVC を参照します。
2 つの Deployment を作成します。
kubectl create -f nginx-1.yaml -f nginx-2.yamlPod のステータスを確認できます。
kubectl get pod -l app=nginx期待される出力
NAME READY STATUS RESTARTS AGE nas-test-1-b75d5b6bc-***** 1/1 Running 0 51s nas-test-2-b75d5b6bc-***** 1/1 Running 0 44s両方の Pod の詳細設定を確認し、PVC がマウントされていることを確認します。
<podName>を実際の Pod 名に置き換えてください。kubectl describe pod <podName> | grep "ClaimName:"期待される出力では、両方の Pod が同じ PVC をマウントし、同じ NAS サブディレクトリを共有しています。
コンソール
以下の手順を繰り返して 2 つの Deployment を作成し、同じ PVC をマウントして同じ NAS サブディレクトリを共有します。
「ACK クラスター」ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[イメージから作成] をクリックします。指示に従ってアプリケーションを設定し、作成します。
以下の表に、主なパラメーターを説明します。他のパラメーターはデフォルト値のままにします。詳細については、「Deployment の作成」をご参照ください。
設定項目
パラメーター
説明
アプリケーションの基本
レプリカ
Deployment のレプリカ数。
コンテナー設定
イメージ名
アプリケーションのデプロイに使用するイメージアドレス。
必須リソース
必要な vCPU とメモリリソース。
ボリューム
[クラウドストレージ要求の追加] をクリックし、構成を完了します。
マウントソース:以前に作成した PVC を選択します。
コンテナーパス:NAS ファイルシステムがマウントされるコンテナー内のパスを入力します。
デプロイメントが完了すると、[ステートレス] ページでアプリケーション名をクリックし、[コンテナーグループ] タブで Pod が正常に Running していることを確認できます。Pod のステータスは Running である必要があります。
共有ストレージと永続ストレージを検証するには、「共有ストレージと永続ストレージの検証」をご参照ください。
方法 2:sharepath を使用したマウント
このモードでは、この StorageClass から作成されたすべての PVC は、StorageClass で定義された同じ NAS ディレクトリを使用します。個々の PV 用に新しいディレクトリは作成されません。
1. StorageClass の作成
StorageClass は、動的ボリュームのプロビジョニングテンプレートとして機能します。ストレージリソースの取得元と動作を定義します。
kubectl
次の内容で alicloud-nas-sharepath.yaml という名前のファイルを作成します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-sharepath mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: sharepath # server フィールドのフォーマット:<nas-server-address>:/<path> server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retainパラメーター
説明
mountOptionsNFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、NAS は NFS v3 を使用してマウントします。別のバージョンを指定するには、
vers=4.0を使用します。NAS タイプごとにサポートされている NFS バージョンについては、「NFS プロトコル」をご参照ください。parameters.volumeAsマウントモード。
sharepathに設定します。parameters.serverNAS マウントポイントのアドレスとマウントするサブディレクトリのパス。フォーマット:
<nas-server-address>:/<path>。<nas-server-address>:NAS ファイルシステムのマウントポイントのアドレス。詳細については、「マウントポイントの管理」をご参照ください。:/<path>:マウントする NAS サブディレクトリ。未設定の場合、またはサブディレクトリが存在しない場合は、デフォルトでルートディレクトリがマウントされます。汎用型 NAS:ルートディレクトリは
/です。超高速型 NAS:ルートディレクトリは
/shareです。サブディレクトリをマウントする場合、pathは/shareで始まる必要があります (例:/share/data)。
provisionerドライバーのタイプ。Alibaba Cloud NAS CSI コンポーネントを使用する場合、このパラメーターは
nasplugin.csi.alibabacloud.comに固定されます。reclaimPolicyPV のリサイクルポリシー。sharepath の場合、これを
Retainに設定します。StorageClass を作成します。
kubectl create -f alicloud-nas-sharepath.yaml
コンソール
「[作成]」をクリックします。クラスター内の StorageClass に一意の名前を入力し、「[ボリュームタイプ]」を NAS に設定します。プロンプトに従って StorageClass の作成を完了します。
設定項目
説明
マウントポイントの選択
NAS ファイルシステムのマウントポイントのアドレス。
ボリュームモード
ボリューム アクセス モード。この例では、[共有ディレクトリ] (sharepath) を選択します。
マウントパス
マウントする NAS ファイルシステムのサブディレクトリ。このパラメーターを設定しない場合、デフォルトでルートディレクトリがマウントされます。
ディレクトリが NAS ファイルシステムに存在しない場合、自動的に作成されてマウントされます。
汎用型 NAS ファイルシステム:ルートディレクトリは
/です。超高速型 NAS ファイルシステム:ルートディレクトリは
/shareです。サブディレクトリをマウントする場合、pathは/shareで始まる必要があります (例:/share/data)。
リサイクルポリシー
sharepath の場合、これを
Retainに設定します。マウントオプション
NFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、NAS は NFS v3 を使用してマウントします。別のバージョンを指定するには、
vers=4.0を使用します。NAS タイプごとにサポートされている NFS バージョンについては、「NFS プロトコル」をご参照ください。
2. PVC の作成
PVC は、アプリケーションのストレージ要求を表します。StorageClass の動的プロビジョニングメカニズムをトリガーして、一致する PV を自動的に作成およびバインドします。
名前空間をまたいでデータを共有できるようにするため、このセクションでは、2 つの異なる名前空間に同じ名前の PVC を作成する方法について説明します。PVC は名前を共有しますが、別々の名前空間に存在するため、独立したリソースです。同じ StorageClass を使用して、同じ NAS ファイルシステム上に独立した PV を取得します。
kubectl
`ns1` と `ns2` の名前空間を作成します。
kubectl create ns ns1 kubectl create ns ns2`ns1` と `ns2` の名前空間に同じ名前の PVC を作成するために、pvc.yaml という名前のファイルを作成します。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc namespace: ns1 spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-sharepath resources: requests: storage: 20Gi --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc namespace: ns2 spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-sharepath resources: requests: storage: 20Giパラメーター
説明
accessModesアクセスモード。有効な値:
ReadWriteMany(デフォルト):ボリュームは多くのノードから読み書き可能としてマウントできます。ReadWriteOnce:ボリュームは単一のノードから読み書き可能としてマウントできます。ReadOnlyMany:ボリュームは多くのノードから読み取り専用としてマウントできます。
storageClassNameバインドする StorageClass。
storage必要なボリューム容量を宣言します。デフォルトでは、これはリソース要求として機能し、Pod が利用できる実際のストレージスペースを制限しません。
NAS の最大容量は仕様によって異なります。詳細については、「汎用型 NAS」および「超高速型 NAS」をご参照ください。
ただし、StorageClass で
allowVolumeExpansionがtrueに設定されている場合、この値はハードリミットになります。CSI ドライバーは、この制限を強制するために NAS ディレクトリクォータを設定します。PVC を作成します。
kubectl create -f pvc.yamlPV のステータスを確認し、PV が自動的に作成され、PVC にバインドされたことを確認します。
kubectl get pv期待される出力:両方の PV のステータスは
Boundです。CLAIM列は、各 PV が異なる名前空間 (ns1/nas-csi-pvcとns2/nas-csi-pvc) の PVC にバインドされていることを示しています。NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE nas-0b448885-6226-4d22-8a5b-d0768c****** 20Gi RWX Retain Bound ns1/nas-csi-pvc alicloud-nas-sharepath <unset> 74s nas-bcd21c93-8219-4a11-986b-fd934a****** 20Gi RWX Retain Bound ns2/nas-csi-pvc alicloud-nas-sharepath <unset> 74s
コンソール
名前空間を作成します。
クラスター ページで、目的のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[名前空間とクォータ] をクリックします。
[作成] をクリックします。プロンプトに従って、
`ns1`および`ns2`の名前空間を作成します。
詳細ページの左側ナビゲーションウィンドウで、 を選択します。
`ns1` 名前空間に永続ボリューム要求を作成します。
[永続ボリューム要求] ページで、[名前空間] を ns1 に設定し、プロンプトに従って PVC を作成します。
設定項目
説明
永続ボリューム要求タイプ
NAS を選択します。
名前
PVC 名。名前空間内で一意である必要があります。
割り当てモード
[ストレージクラスを使用して動的に作成] を選択します。
既存のストレージクラス
[ストレージクラスの選択] をクリックし、以前に作成したストレージクラスを選択します。
合計
必要なボリューム容量を宣言します。デフォルトでは、これはリソース要求として機能し、Pod が利用できる実際のストレージスペースを制限しません。
NAS の最大容量は仕様によって異なります。詳細については、「汎用型 NAS」および「超高速型 NAS」をご参照ください。
ただし、StorageClass で
allowVolumeExpansionがtrueに設定されている場合、この値はハードリミットになります。CSI ドライバーは、この制限を強制するために NAS ディレクトリクォータを設定します。アクセスモード
アクセスモード。有効な値:
ReadWriteMany(デフォルト):ボリュームは多くのノードから読み書き可能としてマウントできます。ReadWriteOnce:ボリュームは単一のノードから読み書き可能としてマウントできます。ReadOnlyMany:ボリュームは多くのノードから読み取り専用としてマウントできます。
前の手順を繰り返して、`ns2` 名前空間に PVC を作成します。
PVC が作成されたら、[永続ボリューム要求] ページに戻り、
`ns1`および`ns2`名前空間内の PVC が自動的に作成された PV にバインドされていることを確認します。
3. アプリケーションの作成と NAS のマウント
PVC を作成した後、バインドされた PV をアプリケーションにマウントします。このセクションでは、2 つの名前空間にアプリケーションを作成し、それぞれの PVC をマウントして、StorageClass で定義された NAS サブディレクトリを共有する方法について説明します。
kubectl
次の内容で
nginx-ns1.yamlとnginx-ns2.yamlという名前の 2 つのファイルを作成します。両方のアプリケーションの設定はほぼ同じです。それぞれがそれぞれの名前空間の PVC をバインドします。
2 つの Deployment を作成します。
kubectl create -f nginx-ns1.yaml -f nginx-ns2.yamlPod のステータスを確認します。
kubectl get pod -A -l app=nginx期待される出力:
NAMESPACE NAME READY STATUS RESTARTS AGE ns1 nas-test-b75d5b6bc-***** 1/1 Running 0 2m19s ns2 nas-test-b75d5b6bc-***** 1/1 Running 0 2m11sPod の設定を確認し、PVC がマウントされていることを確認します。
<namespace-name>と<pod-name>を実際の名前空間と Pod 名に置き換えてください。kubectl describe pod -n <namespace-name> <pod-name> | grep "ClaimName:"期待される出力では、2 つの Pod はそれぞれ
ns1/nas-csi-pvcとns2/nas-csi-pvcをマウントしています。
コンソール
「ACK クラスター」ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
`ns1` 名前空間に Deployment を作成し、対応する PVC をマウントします。
[名前空間] を [ns1] に設定し、[イメージから作成] をクリックします。
プロンプトに従ってアプリケーションの作成を完了します。
以下の表に、主なパラメーターを説明します。他のパラメーターはデフォルト値のままにします。詳細については、「Deployment の作成」をご参照ください。
設定項目
パラメーター
説明
アプリケーションの基本
レプリカ
Deployment のレプリカ数。
コンテナー設定
イメージ名
アプリケーションのデプロイに使用するイメージアドレス。
必須リソース
必要な vCPU とメモリリソース。
ボリューム
[クラウドストレージ要求の追加] をクリックし、構成を完了します。
マウントソース:以前に作成した PVC を選択します。
コンテナーパス:NAS ファイルシステムがマウントされるコンテナー内のパス (例:/data) を入力します。
前の手順を繰り返して、`ns2` 名前空間に Deployment を作成し、対応する PVC をマウントします。
「[ステートレス]」ページに戻って、名前空間 ns1 および ns2 内の 2 つのデプロイメントのステータスを確認し、対応する PVC がマウントされた状態で Pod が正常に実行されていることを確認できます。
共有ストレージと永続ストレージを検証するには、「共有ストレージと永続ストレージの検証」をご参照ください。
方法 3:filesystem を使用したマウント
filesystem モードは、アプリケーション専用の NAS ファイルシステムとマウントポイントを動的に作成および管理する必要があるシナリオに適しています。sharepath モードとは異なり、filesystem モードで作成された各 PV は、独立した NAS ファイルシステムインスタンスにマッピングされます。
各 filesystem モードの PV は、1 つの独立した NAS ファイルシステムと 1 つのマウントポイントにマッピングされます。
デフォルトでは、filesystem モードの PV を削除しても、NAS ファイルシステムとマウントポイントは保持されます。PV と一緒にそれらを削除するには、StorageClass で次のように設定します。
reclaimPolicy: Deleteparameters.deleteVolume: "true"
ACK 専用クラスターを使用する場合、csi-provisioner に適切な権限を付与する必要があります。
1. StorageClass の作成
2. PVC の作成
3. アプリケーションの作成と NAS のマウント
共有ストレージと永続ストレージの検証
アプリケーションを正常にデプロイした後、ボリュームが期待どおりに機能することを確認できます。このセクションでは、subpath モードと nas-test-1 および nas-test-2 の Deployment を使用して検証します。
共有ストレージ | 永続ストレージ |
1 つの Pod でファイルを作成し、別の Pod でそれを確認して共有ストレージを検証します。
| Deployment を再起動し、新しい Pod でファイルを確認して永続ストレージを検証します。
|
本番のベストプラクティス
セキュリティとデータ保護
Retain リサイクルポリシーの使用:StorageClass で
reclaimPolicyをRetainに設定して、PVC を削除した際のバックエンドデータの偶発的な削除を防ぎます。権限グループによるアクセス制御の使用:NAS は権限グループを使用してネットワークアクセス権限を管理します。最小権限の原則に従ってください。権限グループには、クラスターノードのプライベート IP アドレスまたはそれらが属する vSwitch の CIDR ブロックのみを追加します。
0.0.0.0/0のような過度に広範な権限を付与することは避けてください。
パフォーマンスとコストの最適化
適切な NAS タイプの選択:「ファイルシステムタイプの選択」を参照して、アプリケーションの IOPS とスループット要件に基づいて NAS タイプを選択します。
マウントオプション (
mountOptions) の最適化:ワークロードの特性に基づいて NFS マウントパラメーターを調整します。たとえば、vers=4.0またはvers=4.1プロトコルバージョンを使用すると、一部のシナリオでパフォーマンスとファイルロック機能が向上する場合があります。大規模なファイルの読み書きには、rsizeおよびwsizeパラメーターを調整して読み書きパフォーマンスを最適化することをテストできます。
O&M と信頼性
ヘルスチェックの設定:アプリケーション Pod に liveness プローブを設定して、マウントポイントが正常かどうかを確認します。マウントに失敗した場合、ACK は自動的に Pod を再起動してボリュームの再マウントをトリガーできます。
モニタリングとアラート:コンテナーストレージモニタリングを使用してアラートを設定し、ボリュームの例外やパフォーマンスボトルネックを迅速に検出します。
リソースのクリーンアップに関するガイドライン
NAS ストレージボリュームが不要になった場合は、予期しない課金を避けるために、以下の順序で関連リソースを解放してください。
ワークロードの削除
操作:Deployment や StatefulSet など、NAS ストレージボリュームを使用するすべてのアプリケーションを削除します。これにより、Pod がボリュームをマウントしたり、ボリュームからデータを読み書きしたりすることが停止します。
コマンド例:
kubectl delete deployment <your-deployment-name>
PVC の削除
操作:アプリケーションに関連付けられている PVC を削除します。PVC を削除した後、バインドされた PV とバックエンド NAS の動作は、対応する StorageClass で定義されている
reclaimPolicyに依存します。subpath モード
reclaimPolicy: Retain:PVC を削除すると、バインドされた PV はReleased状態になります。PV オブジェクトと対応する NAS サブディレクトリおよびデータは保持されます。手動で削除する必要があります。reclaimPolicy: Delete:PVC を削除すると、バインドされた PV は自動的に削除されます。バックエンドの NAS サブディレクトリがどのように処理されるかは、archiveOnDeleteパラメーターに依存します。archiveOnDelete: "true":バックエンドデータは削除されません。代わりに、データはarchived-{pvName}.{timestamp}として名前が変更され、アーカイブされます。archiveOnDelete: "false":PV に対応するバックエンド NAS 上のサブディレクトリとそのすべてのデータが完全に削除されます。注意して使用してください。
ACK Serverless クラスターでは、権限の制限により、
reclaimPolicy: Deleteを設定しても、バックエンドの NAS ディレクトリとデータは削除もアーカイブもされません。PV オブジェクトのみが削除されます。
sharepath モード
reclaimPolicyはRetainのみをサポートします。PVC を削除すると、バインドされた PV はReleased状態になります。ディレクトリは共有ディレクトリであるため、PV オブジェクト、バックエンドの NAS 共有ディレクトリ、およびそのデータは保持されます。filesystem モード
reclaimPolicy: Retain:PVC を削除すると、バインドされた PV はReleased状態になります。PV オブジェクト、動的に作成されたバックエンドの NAS ファイルシステム、およびマウントポイントはすべて保持されます。reclaimPolicy: Delete:PVC を削除すると、バインドされた PV は自動的に削除されます。バックエンドの NAS ファイルシステムがどのように処理されるかは、deleteVolumeパラメーターに依存します。deleteVolume: "false":バックエンドの NAS ファイルシステムとマウントポイントは保持されます。手動で削除する必要があります。deleteVolume: "true":バックエンドの NAS ファイルシステムとマウントポイントは自動的に削除されます。注意して使用してください。
コマンド例:
kubectl delete pvc <your-pvc-name>
PV の削除
操作:PV のステータスが
AvailableまたはReleasedの場合に PV を削除できます。この操作は、Kubernetes クラスターから PV 定義を削除するだけです。バックエンドの NAS ファイルシステム上のデータは削除しません。コマンド例:
kubectl delete pv <your-pv-name>
バックエンド NAS ファイルシステムの削除 (オプション)
subpathおよびsharepathモード:詳細については、「ファイルシステムの削除」をご参照ください。この操作は、NAS 上のすべてのデータを完全に削除し、このデータは回復できません。この操作を実行する際は注意してください。この操作を実行する前に、NAS にビジネス上の依存関係がないことを確認する必要があります。filesystemモード:PVC を削除したときにバックエンドの NAS ファイルシステムが自動的に削除されない場合は、「ファイルシステムの削除」を参照して、対応するファイルシステムを見つけて手動で削除してください。
参考文献
NAS ストレージボリュームのマウントおよび使用時に問題が発生した場合は、トラブルシューティングのために以下のドキュメントをご参照ください。
CNFS を使用すると、NAS ファイルシステムを独立して管理でき、NAS ファイルシステムのパフォーマンスとサービス品質 (QoS) 制御が向上します。詳細については、「CNFS を使用した NAS ファイルシステムの管理」をご参照ください。
subpath モードでマウントされた NAS ボリュームは、ディレクトリクォータをサポートします。詳細については、「NAS の動的にプロビジョニングされたボリュームのディレクトリクォータの設定」をご参照ください。
