NAS ボリュームは、データの永続性によって Pod が再作成された際のデータ損失を防ぎ、データ共有によって複数の Pod からの同時読み書きアクセスを可能にします。Container Service for Kubernetes (ACK) では、既存の NAS ファイルシステムを静的な PersistentVolume としてワークロードにマウントすることができます。
静的ボリューム:NAS ファイルシステムなどの既存のストレージリソースを表す PV を事前に作成する必要があります。アプリケーションはストレージを要求するために PVC を作成し、その後、システムはこの PVC を適切な事前プロビジョニング済みの PV にバインドします。これは、既存のストレージリソースを管理する一般的な方式です。ただし、バインドされた PVC はデフォルトでオンライン拡張をサポートしません。
自動ボリューム拡張を使用するには、「動的 NAS ボリュームの使用」または「CNFS を使用した NAS ボリュームの自動拡張」をご参照ください。
動的ボリューム: PV を事前に作成する必要はありません。アプリケーションが PVC を作成すると、システムは PVC で指定された StorageClass に基づき、オンデマンドで新しいボリュームと対応する PV を自動的にプロビジョニングします。このアプローチは柔軟性が高く、ボリューム拡張をサポートします。
ワークフロー
この図は、ACK クラスターで静的 NAS ストレージボリュームをマウントするワークフローを示しています。
|
前提条件
csi-plugin と csi-provisioner コンポーネントがインストールされていること。
CSI コンポーネントはデフォルトでインストールされています。インストールされていることを確認してください。インストール状況は、 ページで確認できます。CSI コンポーネントは、最新バージョンへアップグレードすることを推奨します。
NAS ファイルシステムが次の条件を満たしていること。満たしていない場合は、ファイルシステムを作成するか、動的にプロビジョニングされた NAS ボリュームを使用してください。
NAS には、マウント接続性、ファイルシステム数、プロトコルタイプに関する制限があります。
[プロトコルタイプ]:NFS である必要があります。
[VPC]:NAS ファイルシステムはクラスターと同じ VPC に存在する必要があります。NAS はアベイラビリティーゾーンをまたぐマウントをサポートしますが、VPC をまたぐマウントはサポートしません。
[マウントポイント]:クラスターと同じ VPC にマウントターゲットを追加してください。ステータスは [利用可能] である必要があります。詳細については、マウントターゲットの管理をご参照ください。マウントターゲットアドレスを記録してください。
(オプション) [暗号化タイプ]:ボリュームデータを暗号化するには、NAS ファイルシステムの作成時に暗号化タイプを設定します。
使用上の注意
ノードの I/O エラーを防ぐため、対応するボリュームが使用されている間は、NAS コンソールでマウントターゲットを削除しないでください。
同時書き込み:NAS は共有ストレージを提供します。複数の Pod が同じボリュームをマウントする場合、アプリケーション側で同時書き込みによる潜在的なデータ整合性の問題を処理する必要があります。
NAS への同時書き込みの制限に関する詳細については、「複数のプロセスによる同一ログファイルへの書き込み」および「複数の ECS インスタンス間で更新されたファイル内容を読み取る際のレイテンシー」をご参照ください。
マウントパフォーマンス:アプリケーションで
securityContext.fsgroupパラメーターを設定すると、ボリュームがマウントされた後に kubelet が再帰的にchmodまたはchownを実行するため、Pod の起動時間が大幅に長くなります。マウントパフォーマンスを最適化するには、「NAS ボリュームのよくある質問」をご参照ください。
ステップ 1:PersistentVolume の作成
PersistentVolume (PV) を作成して、既存の NAS ファイルシステムをクラスターで利用できるようにします。
kubectl
pv-nas.yamlという名前のファイルを次の内容で作成します。apiVersion: v1 kind: PersistentVolume metadata: # PV の名前。クラスター内で一意である必要があります。 name: pv-nas # PV のラベル。PVC との照合に使用されます。 labels: alicloud-pvname: pv-nas spec: capacity: # この容量は照合のみに使用されます。実際の容量は NAS ファイルシステムによって決まります。 storage: 5 Gi accessModes: - ReadWriteMany # PV のリクレームポリシー。 persistentVolumeReclaimPolicy: Retain csi: # ドライバー。NAS ボリュームを使用する場合、この値は固定です。 driver: nasplugin.csi.alibabacloud.com # metadata.name と同じである必要があります。 volumeHandle: pv-nas volumeAttributes: server: "0c47****-mpk25.cn-shenzhen.nas.aliyuncs.com" # この値を NAS マウントターゲットのアドレスに置き換えてください。 # マウントする NAS サブディレクトリ。サブディレクトリが存在しない場合は、自動的に作成されます。 path: "/csi" mountOptions: - nolock,tcp,noresvport - vers=3パラメーター
説明
storagePV の容量です。この値は PersistentVolumeClaim (PVC) との照合にのみ使用され、実際に利用可能な容量を制限するものではありません。アプリケーションで利用可能なストレージ容量は、NAS ファイルシステムの合計容量によって制限されます。
NAS ファイルシステムの最大容量は、その仕様によって決まります。詳細については、「汎用 NAS」および「エクストリーム NAS」をご参照ください。
accessModesアクセスモードです。有効な値は次のとおりです。
ReadWriteMany(デフォルト):複数のノードから読み取り/書き込みとしてマウントできます。ReadWriteOnce:単一のノードから読み取り/書き込みとしてマウントできます。ReadOnlyMany:複数のノードから読み取り専用としてマウントできます。
persistentVolumeReclaimPolicyPV のリクレームポリシーです。このポリシーは、バインドされている PersistentVolumeClaim (PVC) が削除された際の、PV およびバックエンド NAS データの動作を定義します。
Retain(推奨):PVC が削除された後、PV はReleasedステータスになります。バックエンドの NAS データは保持され、手動で削除する必要があります。Delete:関連する PVC が削除されると、PV も削除されます。このポリシーにはarchiveOnDeleteが必要です。ただし、静的 PV はarchiveOnDeleteをサポートしていません。そのため、このポリシーをDeleteに設定しても、PVC を削除しても PV や NAS ファイルシステム上のファイルは削除されません。archiveOnDeleteを設定する方法については、「動的にプロビジョニングされた NAS ボリュームの使用」をご参照ください。
driverドライバーです。Alibaba Cloud NAS CSI プラグインを使用する場合は、このパラメーターを
nasplugin.csi.alibabacloud.comに設定します。volumeHandleバックエンドストレージシステムにおける、ボリュームの一意な識別子です。これは PV 名 (
metadata.name) と同じである必要があります。複数の PV を使用する場合、この値は PV ごとに一意である必要があります。serverNAS マウントターゲットのアドレスです。
マウントターゲットアドレスを確認する方法については、「マウントターゲットの管理」をご参照ください。
pathマウントする NAS サブディレクトリです。このパラメーターを指定しない場合、デフォルトでルートディレクトリがマウントされます。
NAS ファイルシステムにディレクトリが存在しない場合は、自動的に作成されてからマウントされます。
汎用 NAS:ルートディレクトリは
/です。エクストリーム NAS:ルートディレクトリは
/shareです。サブディレクトリをマウントする場合、pathは/shareから始まる必要があります (例:/share/data)。
mountOptionsNFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、ボリュームは NFSv3 を使用してマウントされます。
vers=4.0のようなオプションで異なるバージョンを指定できます。異なる NAS タイプでサポートされている NFS プロトコルの詳細については、「NFS プロトコル」をご参照ください。PV を作成します。
kubectl create -f pv-nas.yamlPV のステータスとプロパティを確認します。
kubectl get pv期待される出力:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pv-nas 5Gi RWX Retain Available <unset> 25s出力は、容量 5 Gi の PV が正常に作成され、ステータスが
Availableであることを示しています。これは、まだ PersistentVolumeClaim (PVC) にバインドされていないことを意味します。
コンソール
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
永続ボリューム ページで、作成する をクリックします。表示されたダイアログボックスで、パラメーターを設定してから 作成する をクリックします。
パラメーター
説明
[ストレージタイプ]
NAS を選択します。
[ボリューム名:]
PV の名前です。クラスター内で一意である必要があります。
[容量]
PV の容量です。この値は PersistentVolumeClaim (PVC) との照合にのみ使用され、実際に利用可能な容量を制限するものではありません。アプリケーションで利用可能なストレージ容量は、NAS ファイルシステムの合計容量によって制限されます。
NAS ファイルシステムの最大容量は、その仕様によって決まります。詳細については、「汎用 NAS」および「エクストリーム NAS」をご参照ください。
[アクセスモード]
アクセスモードを設定します。有効な値は次のとおりです。
ReadWriteMany:複数のノードから読み取り/書き込みとしてマウントできます。
ReadWriteOnce:単一のノードから読み取り/書き込みとしてマウントできます。
[CNFS を使用するかどうか]
Container Network File System (CNFS) を使用して、自動運用管理、キャッシュアクセラレーション、パフォーマンスモニタリングの機能を利用するかどうかを指定します。
CNFS を使用して既存の NAS ファイルシステムを管理する方法については、「CNFS 管理の NAS ファイルシステムの作成 (推奨)」をご参照ください。
[マウントポイントドメイン名:]
このパラメーターは、CNFS が無効の場合にのみ表示されます。
NAS マウントターゲットのアドレスです。
アドレスを取得する方法については、「マウントターゲットの管理」をご参照ください。
[アタッチポイントの選択]:以前に追加したマウントターゲットのアドレスを選択します。
[カスタム]:カスタムドメイン名をマウントアドレスとして使用します。カスタムドメイン名がターゲットの NAS マウントターゲットに解決されることを確認してください。
[詳細オプション (選択してください)]
[マウントのパス]
マウントする NAS サブディレクトリです。このパラメーターを指定しない場合、デフォルトでルートディレクトリがマウントされます。
NAS ファイルシステムにディレクトリが存在しない場合は、自動的に作成されてからマウントされます。
汎用 NAS:ルートディレクトリは
/です。エクストリーム NAS:ルートディレクトリは
/shareです。サブディレクトリをマウントする場合、pathは/shareから始まる必要があります (例:/share/data)。
[再利用ポリシー]
Retain (デフォルト):PVC が削除されても、PV と NAS ファイルは削除されません。手動で削除する必要があります。
Delete:関連する PVC が削除されると、PV も削除されます。このポリシーには
archiveOnDeleteが必要です。ただし、静的 PV はarchiveOnDeleteをサポートしていません。そのため、このポリシーをDeleteに設定しても、PVC を削除しても PV や NAS ファイルシステム上のファイルは削除されません。archiveOnDeleteを設定する方法については、「動的にプロビジョニングされた NAS ボリュームの使用」をご参照ください。
[マウントオプション]
NFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、ボリュームは NFSv3 を使用してマウントされます。
vers=4.0のようなオプションで異なるバージョンを指定できます。異なる NAS タイプでサポートされている NFS プロトコルの詳細については、「NFS プロトコル」をご参照ください。[タグ]
PV に適用するラベルです。
PV が作成されると、永続ボリューム ページで確認できます。
Step 2: Create a PVC
Create a Persistent Volume Claim (PVC) to request persistent storage for your application.
kubectl
Create a file named
pvc-nas.yamlto bind to the previously created PV.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas # The PVC name, which must be unique within the namespace. spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas # Matches the PV created earlier by its label.Parameter
Description
accessModesThe access mode. Valid values:
ReadWriteMany(default): The volume can be mounted as read-write by many nodes.ReadWriteOnce: The volume can be mounted as read-write by a single node.ReadOnlyMany: The volume can be mounted as read-only by many nodes.
storageThis value is used to find a matching PV and does not limit the actual storage capacity.
The maximum capacity of a NAS file system is determined by its specifications. For more information, see General-purpose NAS and Extreme NAS.
matchLabelsSpecifies the label used to select a PV for binding.
Create the PVC.
kubectl create -f pvc-nas.yamlCheck the status of the PVC.
kubectl get pvcExpected output:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-nas Bound pv-nas 5Gi RWX <unset> 5sThe output shows that the pvc-nas PVC is Bound to the pv-nas PV and is ready for use by an application.
Console
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
On the [永続ボリュームクレーム] page, click [作成する] and configure the parameters as described in the following table.
Parameter
Description
[ボリュームタイプ]
Select [NAS].
[名前]
The PVC name, which must be unique within the namespace.
[割り当てモード]
Select Existing Persistent Volume.
This topic uses the PV created in the previous step. If you have not created a PV, you can set the [割り当てモード] to [ボリュームの作成].
[既存ボリューム]
Select the previously created PV.
[容量]
This value is used to find a matching PV and does not limit the actual storage capacity.
The maximum capacity of a NAS file system is determined by its specifications. For more information, see General-purpose NAS and Extreme NAS.
[アクセスモード]
The access mode. Valid values:
ReadWriteMany(default): The volume can be mounted as read-write by many nodes.ReadWriteOnce: The volume can be mounted as read-write by a single node.ReadOnlyMany: The volume can be mounted as read-only by many nodes.
ステップ 3:アプリケーションの作成と NAS のマウント
PVC を作成した後、バインドされた PV をアプリケーションにマウントできます。
kubectl
次の内容で
deploy.yamlという名前のファイルを作成します。このマニフェストは、以前に作成した PVC を参照します。この設定により、NAS の共有ストレージ機能を検証できます。
Deployment を作成します。
kubectl create -f deploy.yamlPod のステータスを確認します。
kubectl get pod -l app=nginx予想される出力:
NAME READY STATUS RESTARTS AGE nas-test-****-***a 1/1 Running 0 32s nas-test-****-***b 1/1 Running 0 32s
コンソール
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
デプロイメント ページで、イメージによる作成 をクリックし、アプリケーションパラメーターを設定します。
次の表で、主要なパラメーターについて説明します。他のパラメーターはデフォルト値のままでかまいません。詳細については、「ステートレスワークロード (Deployment) の作成」をご参照ください。
カテゴリ
パラメーター
説明
[基本情報]
[名前]
Deployment の名前。
[Replicas:]
Deployment のレプリカ数。
この設定により、NAS の共有ストレージ機能を検証できます。
[コンテナー]
[イメージ名]
アプリケーションイメージのアドレス。
[リソースリクエスト]
要求される vCPU とメモリリソース。
[ボリューム]
PVC を追加 をクリックし、パラメーターを設定します。
[マウントソース]:以前に作成した PVC を選択します。
[コンテナパス]:NAS ファイルシステムをマウントするコンテナ内のパス (例:
/data)。
デプロイが完了したら、展開 ページに移動し、アプリケーション名をクリックします。ポッド タブで、Pod が [実行中] 状態であることを確認します。
共有ストレージと永続ストレージの検証
アプリケーションをデプロイした後、ボリュームが期待どおりに動作することを検証します。
共有ストレージ | 永続ストレージ |
共有ストレージを検証するには、一方の Pod でファイルを作成し、もう一方の Pod でそのファイルを確認します。
| 永続ストレージを検証するには、Deployment を再起動し、新しい Pod でデータが永続化されているかを確認します。
|
本番稼働準備
セキュリティとアクセス管理
権限グループを使用したアクセスコントロール: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 を再起動し、ストレージボリュームの再マウントをトリガーします。
監視とアラートの設定:コンテナストレージの監視を使用してアラートを設定し、ストレージボリュームの問題やパフォーマンスのボトルネックを速やかに検出できるようにしてください。
Retainリクレームポリシーの使用:本番環境のデータの場合、PV のpersistentVolumeReclaimPolicyをRetainに設定してください。これにより、対応する PVC が削除された際に、バックエンド NAS ファイルシステム上のデータが誤って失われることを防ぎます。
リソースの解放
想定外の課金を避けるため、NAS ボリュームが不要になった場合は、次の順序でリソースを解放します。
ワークロードの削除
NAS ボリュームを使用している Deployment や StatefulSet などのアプリケーションをすべて削除します。この操作により、Pod からボリュームがアンマウントされ、すべての読み取りおよび書き込みアクセスが停止します。
コマンド例:
kubectl delete deployment <your-deployment-name>
PVC の削除
アプリケーションに関連付けられている PVC を削除します。PVC が削除されると、バインドされた PV がどうなるかは、その
persistentVolumeReclaimPolicyによって決まります。リクレームポリシー:
Retain(推奨): PVC を削除すると、バインドされていた PV はReleased状態になります。PV オブジェクトとバックエンド NAS ファイルシステム上のデータは保持されるため、手動で削除する必要があります。Delete: PVC を削除すると、対応する PV オブジェクトも削除されます。次の点に注意してください。PV が NAS ファイルシステムのルートディレクトリを指している場合、誤削除を防ぐため、ファイルシステム上のデータは保持されます。
静的 PV の
volumeHandleがpathのサフィックスである場合 (例:volumeHandleがappで、pathが/exports/appの場合)、PVC を削除すると、バックエンド NAS ファイルシステム上のサブディレクトリが自動的に削除されます。この機能は慎重に使用してください。
コマンド例:
kubectl delete pvc <your-pvc-name>
PV の削除
ステータスが
AvailableまたはReleasedの場合に、PV を削除できます。この操作では、Kubernetes クラスターから PV 定義のみが削除され、バックエンド NAS ファイルシステム上のデータは削除されません。コマンド例:
kubectl delete pv <your-pv-name>
バックエンド NAS ファイルシステムの削除 (オプション)
ファイルシステムの削除をご参照ください。この操作により、NAS ファイルシステム上のすべてのデータが完全に削除され、元に戻すことはできません。続行する前に、ファイルシステムに依存するワークロードがないことを確認してください。
参考資料
NAS ボリュームのマウントまたは使用時に問題が発生した場合は、次のドキュメントをご参照ください。
CNFS を使用すると、NAS ファイルシステムを独立して管理し、パフォーマンスを向上させ、QoS 制御を提供できます。詳細については、「CNFS による NAS ファイルシステムの管理」をご参照ください。