File Storage NAS の動的プロビジョニングを使用すると、ワークロードのストレージをオンデマンドで自動的にプロビジョニングできるため、事前に PV を作成する必要がなくなります。この機能は、データの永続性と共有を提供し、複数の Pod が同時に読み書きできるようにし、Web アプリケーションやログ保持などのユースケースでストレージ管理を簡素化します。
仕組み
動的ボリュームでは、アプリケーションが PVC を作成すると、システムはオンデマンドで新しいストレージボリュームと対応する PV を自動的に作成します。このプロビジョニングは、PVC で指定された StorageClass によって決定されます。このモードは、より高い柔軟性を提供し、ストレージボリュームの自動拡張をサポートします。
マウントモード
マウントモードは、StorageClass の volumeAs パラメーターで指定できます。このパラメーターは、PV と NAS ファイルシステムの関係を定義します。
|
マウントモード |
説明 |
シナリオ |
|
subpath モードでは、各 PV は NAS ファイルシステム内の一意のサブディレクトリにマッピングされます。このモードはデータ分離を容易にします。 |
|
|
|
sharepath モードでは、すべての PV は StorageClass で定義された同じ NAS ディレクトリにマッピングされます。したがって、この StorageClass を使用するすべての PVC は同じ共有ディレクトリにアクセスします。 |
異なる名前空間にまたがる複数の Pod が同じ NAS サブディレクトリをマウントする必要があります。 |
|
|
filesystem (非推奨) |
filesystem モードでは、各 PV ごとに新しい専用の NAS ファイルシステムインスタンスが動的に作成されます。 |
このモードは、パフォーマンスとセキュリティの観点から厳密な分離を必要とするアプリケーションに適しています。アプリケーションごとに独立した NAS ファイルシステムとマウントターゲットを動的に作成および削除できますが、コストが高くなります。 |
ワークフロー
NAS 動的ボリュームをマウントするためのワークフローは次のとおりです。
|
|
|
前提条件
-
csi-plugin および csi-provisioner コンポーネントがインストールされていること。
CSI コンポーネントはデフォルトでインストールされています。インストールされたままであることを確認してください。インストール状況は ページで確認できます。CSI コンポーネントを最新バージョンにアップグレードすることを推奨します。
-
subpath および sharepath を使用するには、次の要件を満たす Apsara File Storage NAS ファイルシステムが必要です。そうでない場合は、ファイルシステムを作成してください。
NAS には、マウント接続性、ファイルシステム数、プロトコルの種類に関する制限事項があります。
-
プロトコルタイプ:NFS のみがサポートされています。
-
Virtual Private Cloud (VPC):Apsara File Storage NAS ファイルシステムは、クラスターと同じ VPC 内にある必要があります。Apsara File Storage NAS はクロスゾーンマウントをサポートしますが、VPC 間マウントはサポートしません。
-
マウントポイント:クラスターと同じ VPC 内にあり、アクティブなマウントターゲットを追加します。詳細については、「マウントターゲットの管理」をご参照ください。マウントターゲットアドレスをメモしておきます。
-
(オプション) 暗号化タイプ:ボリューム内のデータを暗号化するには、Apsara File Storage NAS ファイルシステムを作成する際に暗号化タイプを設定します。
-
注意事項
-
マウントターゲットを削除しない:ノードの I/O エラーを防ぐため、対応するボリュームが使用中の間は NAS コンソールでマウントターゲットを削除しないでください。
-
同時書き込み:NAS は共有ストレージを提供します。複数の Pod が同じボリュームをマウントする場合、アプリケーションは同時書き込みによる潜在的なデータ整合性の問題を処理する必要があります。
NAS への同時書き込みに関する制限事項の詳細については、「複数のプロセスが同じログファイルに書き込む」および「ECS インスタンス間で更新されたファイルコンテンツの読み取り遅延」をご参照ください。
-
マウントパフォーマンス:アプリケーションで
securityContext.fsgroupパラメーターを設定すると、kubelet はボリュームがマウントされた後に再帰的にchmodまたはchownを実行し、Pod の起動時間が大幅に増加します。マウントパフォーマンスを最適化するには、「NAS ボリュームに関するよくある質問」をご参照ください。
方法 1:subpath を使用したボリュームのマウント
この方法では、CSI プロビジョナーが各 PersistentVolumeClaim (PVC) のために NAS ファイルシステム内に専用のサブパスを自動的に作成します。このサブパスが PersistentVolume (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 のマウントオプション。デフォルトでは、ボリュームは NFSv3 を使用してマウントされます。
vers=4.0のようなオプションで異なるバージョンを指定できます。異なる NAS タイプでサポートされている NFS プロトコルの詳細については、「NFS プロトコル」をご参照ください。parameters.volumeAsボリュームのプロビジョニングモード。
subpathに設定します。parameters.serverマウントする NAS マウントターゲットとサブパスを
<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 ボリュームを使用すると、コントローラーのタスクキューが満杯になり、新しい 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 コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
作成する をクリックし、クラスター内で一意の名前を 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 のマウントオプション。デフォルトでは、ボリュームは NFSv3 を使用してマウントされます。
vers=4.0のようなオプションで異なるバージョンを指定できます。異なる NAS タイプでサポートされている NFS プロトコルの詳細については、「NFS プロトコル」をご参照ください。StorageClass が作成されると、ストレージクラス リストで確認できます。
-
2. PVC の作成
PersistentVolumeClaim (PVC) は、アプリケーションからのストレージ要求であり、関連する StorageClass をトリガーして、一致する PersistentVolume (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 ディレクトリクォータを設定し、PV の利用可能な容量を制限します。 -
-
PVC を作成します。
kubectl create -f nas-pvc.yaml -
PV を確認します。
kubectl get pv期待される出力は次のようになり、StorageClass が自動的に PersistentVolume (PV) をプロビジョニングし、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 の使用 を選択します。
既存のストレージクラス
ストレージクラスの選択 をクリックし、作成した StorageClass を選択します。
合計容量
ストレージボリュームの必要な容量。デフォルトでは、この宣言はリソース要求として機能し、Pod が利用できる実際のストレージ容量を制限しません。
NAS ファイルシステムの容量制限は、その仕様によって決まります。詳細については、「汎用 NAS」および「エクストリーム NAS」をご参照ください。
ただし、StorageClass の
allowVolumeExpansionがtrueに設定されている場合、この値は厳密に適用されるハードリミットになります。CSI プラグインは、この設定に基づいて NAS ディレクトリクォータを設定し、PV の利用可能な容量を制限します。アクセスモード
アクセスモード。有効な値:
-
ReadWriteMany(デフォルト):ボリュームは多くのノードから読み書き可能としてマウントできます。 -
ReadWriteOnce:ボリュームは単一のノードから読み書き可能としてマウントできます。 -
ReadOnlyMany:ボリュームは多くのノードから読み取り専用としてマウントできます。
-
3. アプリケーションの作成と NAS のマウント
PVC が作成された後、ボリュームをアプリケーションにマウントできます。このセクションでは、同じ PVC を参照する 2 つの Deployment を作成し、複数の Pod が同じ NAS サブパスを共有できるようにする方法を示します。
kubectl
同じ PVC を参照する 2 つの Deployment を作成し、NAS ファイルシステムの同じサブパスを共有できるようにします。
同じ NAS ファイルシステムから異なるサブパスを異なる Pod にマウントするには、サブパスごとに一意の StorageClass と対応する PVC を作成する必要があります。
-
次の内容で
nginx-1.yamlとnginx-2.yamlという名前の 2 つのファイルを作成します。両方のアプリケーションの構成はほぼ同じです。どちらも同じ PVC を参照します。
-
-
2 つの Deployment を作成します。
kubectl create -f nginx-1.yaml -f nginx-2.yaml -
Pod のステータスを確認します。
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 を検査して、正しい PersistentVolumeClaim (PVC) を使用していることを確認します。
<podName>を各 Pod の実際の名前で置き換えてください。kubectl describe pod <podName> | grep "ClaimName:"期待される出力では、両方の Pod が同じ PVC を使用しており、NAS ファイルシステムの同じサブパスを共有していることが確認されます。
コンソール
次の手順を繰り返して、同じ PVC を使用する 2 つの Deployment を作成し、NAS ファイルシステムの同じサブパスを共有できるようにします。
ACK クラスターページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
イメージを使用して作成 をクリックし、画面の指示に従ってアプリケーションを設定および作成します。
主要なパラメーターは以下に説明されています。他のパラメーターはデフォルト値のままにできます。詳細については、「ステートレスアプリケーション (Deployment) の作成」をご参照ください。
セクション
パラメーター
説明
基本情報
Replicas:
Deployment のレプリカ数。
コンテナー
画像
アプリケーションのデプロイに使用されるイメージのアドレス。
リソースリクエスト
コンテナが必要とする vCPU およびメモリリソース。
データボリューム
PVC を追加 をクリックし、パラメーターを設定します。
-
マウントソース:作成した PVC を選択します。
-
コンテナーパス:NAS ファイルシステムがマウントされるコンテナ内のパスを入力します。
デプロイが完了したら、デプロイメント ページでアプリケーション名をクリックし、ポッド タブを確認して、Pod が正常に実行されていること (ステータスが Running) を確認できます。
-
ストレージが共有され、永続的であることを確認するには、「共有ストレージと永続ストレージの検証」をご参照ください。
方法 2:sharepath モードを使用したマウント
このモードでは、この StorageClass を使用する PVC のために PV が作成される際、プロビジョナーは新しいディレクトリを作成しません。代わりに、すべての PV は StorageClass で定義されたパスを使用し、各 PV を同じ NAS ディレクトリにマッピングします。
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 のマウントオプション。デフォルトでは、ボリュームは NFSv3 を使用してマウントされます。
vers=4.0のようなオプションで異なるバージョンを指定できます。異なる NAS タイプでサポートされている NFS プロトコルの詳細については、「NFS プロトコル」をご参照ください。parameters.volumeAsボリュームのプロビジョニングモード。
sharepathに設定します。parameters.serverマウントする NAS マウントターゲットとサブパスを
<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 を選択します。
パラメーター
説明
アタッチポイントの選択
NAS ファイルシステムのマウントターゲット。
ストレージボリュームモード
ボリュームのプロビジョニングモード。この例では、sharepath モードを有効にする 共有ディレクトリ を選択します。
マウントのパス
マウントする NAS サブディレクトリ。このパラメーターが指定されていない場合、デフォルトでルートディレクトリがマウントされます。
ディレクトリが NAS ファイルシステムに存在しない場合、自動的に作成されてからマウントされます。
-
汎用 NAS:ルートディレクトリは
/です。 -
エクストリーム NAS:ルートディレクトリは
/shareです。サブディレクトリをマウントする場合、pathは/shareで始まる必要があります (例:/share/data)。
リクレームポリシー
sharepathモードの場合、これは Retain である必要があります。マウントオプション
NFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、ボリュームは NFSv3 を使用してマウントされます。
vers=4.0のようなオプションで異なるバージョンを指定できます。異なる NAS タイプでサポートされている NFS プロトコルの詳細については、「NFS プロトコル」をご参照ください。 -
2. PVC の作成
PersistentVolumeClaim (PVC) は、アプリケーションからのストレージ要求であり、関連する StorageClass をトリガーして、一致する PersistentVolume (PV) を動的にプロビジョニングし、バインドします。
名前空間をまたいでデータを共有するには、2 つの異なる名前空間に同じ名前の PVC を作成します。PVC は名前を共有しますが、異なる名前空間にあるため、別々のリソースです。StorageClass は各 PVC に対して個別の PV をプロビジョニングし、両方の PV は NAS ファイルシステム上の同じ共有ディレクトリを指します。
kubectl
-
ns1とns2の 2 つの名前空間を作成します。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 ディレクトリクォータを設定し、PV の利用可能な容量を制限します。 -
-
PVC を作成します。
kubectl create -f pvc.yaml -
PV のステータスを確認し、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 の名前。名前は名前空間内で一意である必要があります。
割り当てモード
StorageClass の使用を選択します。
既存のストレージクラス
ストレージクラスの選択 をクリックし、作成した StorageClass を選択します。
容量
ストレージボリュームの必要な容量。デフォルトでは、この宣言はリソース要求として機能し、Pod が利用できる実際のストレージ容量を制限しません。
NAS ファイルシステムの容量制限は、その仕様によって決まります。詳細については、「汎用 NAS」および「エクストリーム NAS」をご参照ください。
ただし、StorageClass の
allowVolumeExpansionがtrueに設定されている場合、この値は厳密に適用されるハードリミットになります。CSI プラグインは、この設定に基づいて NAS ディレクトリクォータを設定し、PV の利用可能な容量を制限します。アクセスモード
アクセスモード。有効な値:
-
ReadWriteMany(デフォルト):ボリュームは多くのノードから読み書き可能としてマウントできます。 -
ReadWriteOnce:ボリュームは単一のノードから読み書き可能としてマウントできます。 -
ReadOnlyMany:ボリュームは多くのノードから読み取り専用としてマウントできます。
-
-
前の手順に従って、
ns2名前空間にもう 1 つの 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.yaml -
Pod のステータスを確認します。
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 2m11s -
Pod の詳細な構成を確認して、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 をマウントします。-
名前空間ドロップダウンリストから 名前空間 を選択し、 イメージによる作成 をクリックします。
-
画面の指示に従ってアプリケーションを作成します。
主要なパラメーターは以下に説明されています。他のパラメーターはデフォルト値のままにします。詳細については、「ステートレスワークロード (Deployment) の作成」をご参照ください。
セクション
パラメーター
説明
基本情報
Replicas:
Deployment のレプリカ数。
コンテナー
画像
アプリケーションのデプロイに使用されるイメージのアドレス。
リソースリクエスト
必要な vCPU およびメモリリソース。
データボリューム
PVC を追加 をクリックし、パラメーターを設定します。
-
マウントソース:作成した PVC を選択します。
-
コンテナーパス:NAS ファイルシステムがマウントされるコンテナ内のパス (例:/data) を入力します。
-
-
-
前の手順に従って、
ns2名前空間にもう 1 つの Deployment を作成し、対応する PVC をマウントします。デプロイメント ページに戻ります。`ns1` および `ns2` の名前空間で、各デプロイメントのステータスを確認し、Pod が実行中であり、正しい PVC がマウントされていることを確認します。
結果を検証するには、「共有ストレージと永続ストレージの検証」をご参照ください。
方法 3:filesystem モードでのボリュームのマウント
filesystem モードでは、アプリケーション専用の NAS ファイルシステムとマウントターゲットを動的に作成および管理できます。sharepath モードとは異なり、filesystem モードで作成された各 PV は、個別の NAS ファイルシステムインスタンスに対応します。
filesystem タイプの各 PV は、専用の NAS ファイルシステムと 1 つのマウントターゲットに対応します。
-
デフォルトでは、
filesystemタイプの PV を削除しても、対応する NAS ファイルシステムとマウントターゲットは保持されます。PV が削除されたときに NAS ファイルシステムとマウントターゲットを自動的に削除するには、StorageClass に次のパラメーターを追加します。-
reclaimPolicy: Delete -
parameters.deleteVolume: "true"
-
-
ACK 専用クラスターを使用する場合、csi-provisioner に必要な権限を付与します。
1. StorageClass の作成
2. PVC の作成
3. アプリケーションの作成と NAS のマウント
共有ストレージと永続ストレージの検証
アプリケーションを正常にデプロイした後、ストレージボリュームが期待どおりに機能することを確認できます。このセクションでは、subpath モードを使用して nas-test-1 と nas-test-2 を作成する例で検証します。
|
共有ストレージ |
永続ストレージ |
|
共有ストレージを検証するには、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などのプロトコルバージョンを使用すると、一部のシナリオでパフォーマンスとファイルロック機能が向上する場合があります。大規模なファイル I/O を伴うワークロードでは、異なるrsizeとwsizeの値をテストして、読み取りおよび書き込みスループットを最適化します。
-
-
運用と信頼性
-
ヘルスチェックの設定:アプリケーション Pod の liveness プローブを設定して、マウントポイントが正常であることを確認します。マウントポイントが応答しなくなった場合、ACK は自動的に Pod を再起動し、ストレージボリュームの再マウントをトリガーします。
-
モニタリングとアラートの設定:コンテナストレージモニタリングを使用してアラートを設定し、ストレージボリュームの問題やパフォーマンスボトルネックを迅速に検出します。
-
リソースのリリース
NAS ストレージボリュームが不要になった場合は、予期しない課金を避けるために、次の順序で関連リソースを解放してください。
-
ワークロードの削除
-
操作:NAS ストレージボリュームを使用するすべてのワークロード (Deployment や StatefulSet など) を削除します。これにより、アプリケーション 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 オブジェクト、バックエンドの共有ディレクトリ、およびすべてのデータは保持されます。 -
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状態のときに削除できます。この操作は Kubernetes クラスターから PV 定義を削除するだけで、バックエンドの NAS ファイルシステムからデータを削除することはありません。 -
コマンド例:
kubectl delete pv <your-pv-name>
-
-
バックエンド NAS ファイルシステムの削除 (オプション)
-
subpathおよびsharepathモード:「ファイルシステムの削除」をご参照ください。この操作は NAS 上のすべてのデータを完全に削除し、データは回復できません。注意して進めてください。この操作を実行する前に、NAS にビジネス上の依存関係がないことを確認する必要があります。 -
filesystemモード:PVC を削除したときにバックエンドの NAS ファイルシステムが自動的に削除されない場合は、「ファイルシステムの削除」を参照して、対応するファイルシステムを見つけて手動で削除してください。
-
関連ドキュメント
-
NAS ストレージボリュームのマウントまたは使用中に問題が発生した場合は、トラブルシューティングのために次のドキュメントをご参照ください。
-
CNFS を使用して NAS ファイルシステムを独立して管理し、パフォーマンスと QoS 制御を向上させることができます。詳細な手順については、「CNFS を使用した NAS ファイルシステムの管理」をご参照ください。
-
subpath を使用してマウントされた NAS ストレージボリュームは、ディレクトリクォータをサポートします。詳細については、「動的 NAS ストレージボリュームのディレクトリクォータの設定」をご参照ください。