NAS ボリュームは、ポッドが再作成されてもデータが失われない**永続ストレージ**と、複数のポッドが同時にデータを読み書きできる**共有ストレージ**を提供します。ACK では、既存の NAS ファイルシステムをワークロードに静的ボリュームとしてマウントできます。
静的ボリュームでは、NAS ファイルシステムなどの既存のストレージリソースを表す永続ボリューム (PV) を事前に作成する必要があります。その後、アプリケーションがこの PV と一致・利用するための永続ボリューム要求 (PVC) を作成します。この方法は、既存のストレージリソースを管理する場合に最適です。ただし、バインド済みの PVC はデフォルトでオンラインでのサイズ変更をサポートしません。
自動ボリュームサイズ変更が必要な場合は、「動的 NAS ボリュームの使用」または「CNFS を使用した NAS ボリュームの自動サイズ変更」をご参照ください。
動的ボリュームでは、事前に PV を作成する必要はありません。アプリケーションが StorageClass を指定した PVC を作成すると、システムがオンデマンドで新しいストレージボリュームおよび対応する PV を自動的にプロビジョニングします。このアプローチは柔軟性が高く、ボリュームのサイズ変更もサポートします。
仕組み
以下の図は、ACK クラスター内での静的 NAS ボリュームのマウント手順を示しています。
|
前提条件
csi-plugin と csi-provisioner コンポーネントがインストールされています。
Container Storage Interface (CSI) コンポーネントはデフォルトでインストールされています。手動でアンインストールしていないことを確認してください。インストール状況は、ページで確認できます。CSI コンポーネントは最新バージョンへアップグレードすることを推奨します。
以下の条件を満たす既存の NAS ファイルシステムが必要です。該当しない場合は、新しいファイルシステムを作成するか、動的 NAS ボリュームを使用する必要があります。
NAS には、マウント接続性、ファイルシステム数、プロトコルの種類に関する制限事項があります。
プロトコルの種類:NFS のみがサポートされています。
VPC:NAS ファイルシステムはクラスターと同じ VPC 内にある必要があります。NAS は可用性ゾーン間のマウントをサポートしますが、VPC 間のマウントはサポートしません。
マウントポイント:クラスターと同じ VPC 内にあり、利用可能な状態のマウントポイントを追加します。詳細については、「マウントポイントの管理」をご参照ください。マウントターゲットアドレスを記録します。
(任意)暗号化の種類:ストレージボリュームのデータを暗号化する必要がある場合は、NAS ファイルシステムの作成時に暗号化の種類を設定します。
注意事項
マウントポイントを削除しないでください:ボリュームが利用中の場合、NAS コンソールで対応するマウントポイントを削除しないでください。これにより、ノード上で I/O 例外が発生する可能性があります。
同時書き込み:NAS は共有ストレージシステムです。複数のポッドが同一ボリュームをマウントする場合、アプリケーション側で同時書き込みによるデータ整合性の問題を処理する必要があります。
NAS の同時書き込みに関する制限事項の詳細については、「複数のプロセスまたはクライアントが同時に同一ログファイルに書き込む場合に発生する例外を防止する方法」および「ファイルの読み書きアクセスに関するよくある質問」をご参照ください。
マウントパフォーマンス:アプリケーションで
securityContext.fsgroupを設定している場合、kubelet はマウント後に再帰的にchmodまたはchown操作を実行します。これにより、Pod の起動時間が大幅に増加する可能性があります。最適化の詳細については、「NAS ボリュームに関するよくある質問」をご参照ください。
ステップ 1:PV の作成
既存の NAS ファイルシステムをクラスター内に登録するために PV を作成します。
kubectl
以下の内容で
pv-nas.yamlというファイルを作成します。apiVersion: v1 kind: PersistentVolume metadata: # PV の名前。クラスター内で一意である必要があります。 name: pv-nas # 後続の PVC とのマッチングに使用される PV のラベル。 labels: alicloud-pvname: pv-nas spec: capacity: # この容量宣言は識別子にすぎません。実際の容量は NAS ファイルシステムによって決定されます。 storage: 5Gi 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 の容量宣言です。この値は PVC とのマッチングに使用され、実際の利用可能な容量を制限するものではありません。アプリケーションが利用可能な最大ストレージ容量は、NAS ファイルシステムの合計容量です。
NAS の実際の容量制限は、その仕様によって決定されます。詳細については、「汎用 NAS」および「エクストリーム NAS」をご参照ください。
accessModesアクセスモードを指定します。有効な値は以下のとおりです。
ReadWriteMany(デフォルト):ボリュームを複数のノードで読み書き可能としてマウントできます。ReadWriteOnce:ボリュームを単一のノードで読み書き可能としてマウントできます。ReadOnlyMany:ボリュームを複数のノードで読み取り専用としてマウントできます。
persistentVolumeReclaimPolicyPV の再利用ポリシーです。PVC が削除された後の PV およびバックエンドの NAS データの処理方法を定義します。
Retain(推奨):PVC が削除されると、PV はReleased状態になります。バックエンドの NAS データは完全に保持され、手動で削除する必要があります。Delete:PVC を削除すると、対応する PV も削除されます。このポリシーはarchiveOnDeleteパラメーターとともに使用する必要があります。静的 PV はarchiveOnDeleteをサポートしないため、静的 PV の場合、このポリシーを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)。
mountOptionsPV を作成します。
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出力から、PV が 5 GiB の容量で正常に作成され、Available 状態(まだ PVC によって要求されていない状態)であることが確認できます。
コンソール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
永続ボリューム ページで、作成する をクリックします。表示されるダイアログボックスでパラメーターを設定し、作成する をクリックします。
パラメーター
説明
ストレージタイプ
NAS を選択します。
ボリューム名:
PV の名前です。クラスター内で一意である必要があります。
容量
PV の容量宣言です。この値は PVC とのマッチングに使用され、実際の利用可能な容量を制限するものではありません。アプリケーションが利用可能な最大ストレージ容量は、NAS ファイルシステムの合計容量です。
NAS の実際の容量制限は、その仕様によって決定されます。詳細については、「汎用 NAS」および「エクストリーム NAS」をご参照ください。
アクセスモード
アクセスモードを指定します。有効な値は以下のとおりです。
ReadWriteMany:ボリュームを複数のノードで読み書き可能としてマウントできます。
ReadWriteOnce:ボリュームを単一のノードで読み書き可能としてマウントできます。
CNFS の使用
CNFS を使用するかどうかを指定します。CNFS は、自動化された運用管理、キャッシュアクセラレーション、パフォーマンスモニタリングなどの高度な機能を提供します。
既存の NAS ファイルシステムを CNFS で管理する方法については、「CNFS で管理される NAS ファイルシステムの作成(推奨)」をご参照ください。
マウントポイントドメイン名:
CNFS が無効化されている場合のみ、このパラメーターを設定できます。
NAS のマウントターゲットアドレスです。
アドレスの取得方法については、「マウントポイントの管理」をご参照ください。
アタッチポイントの選択:事前に追加したマウントターゲットアドレスを選択します。
カスタム:カスタムドメイン名をマウントアドレスとして使用します。カスタムドメイン名から対象の NAS マウントターゲットへの DNS 解決が設定済みであることを確認してください。
高度なオプション(任意)
マウントパス
マウントする NAS のサブディレクトリです。指定しない場合、デフォルトでルートディレクトリがマウントされます。
ディレクトリが NAS ファイルシステムに存在しない場合、マウント前にシステムが自動的に作成します。
汎用 NAS:ルートディレクトリは
/です。エクストリーム NAS:ルートディレクトリは
/shareです。サブディレクトリをマウントする場合、pathは/shareで始める必要があります(例:/share/data)。
回収ポリシー
Retain(デフォルト):PVC が削除されると、PV は「Released」状態になりますが、バックエンドの NAS データは保持されます。PV オブジェクトとデータの両方を手動でクリーンアップする必要があります。
Delete:PVC が削除されると、対応する PV も削除されます。このポリシーは
archiveOnDeleteとともに使用する必要があります。ただし、静的 PV はarchiveOnDeleteをサポートしないため、静的 PV の場合、ポリシーをDeleteに設定しても、PVC の削除時に PV や NAS ファイルは実際に削除されません。archiveOnDeleteの設定については、「動的 NAS ボリュームの使用」をご参照ください。
マウントオプション
ラベル
PV のラベルです。
作成が完了すると、永続ボリューム ページで新しく作成された PV を確認できます。
ステップ 2:PVC の作成
PV からストレージを要求するために PVC を作成します。
kubectl
PV にバインドするための
pvc-nas.yamlというファイルを作成します。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas # PVC の名前。名前空間内で一意である必要があります。 spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas # ラベルを使用して、先ほど作成した PV と正確に一致させます。パラメーター
説明
accessModesアクセスモードです。有効な値は以下のとおりです。
ReadWriteMany(デフォルト):ボリュームを複数のノードで読み書き可能としてマウントできます。ReadWriteOnce:ボリュームを単一のノードで読み書き可能としてマウントできます。ReadOnlyMany:ボリュームを複数のノードで読み取り専用としてマウントできます。
storage要求するストレージ容量です。この値は PV とのマッチングに使用され、実際の容量を制限するものではありません。
NAS の実際の容量制限は、その仕様によって決定されます。詳細については、「汎用 NAS」および「エクストリーム NAS」をご参照ください。
matchLabels特定の PV にバインドするためのラベルセレクターを指定します。これは PV に設定されたラベルと一致する必要があります。
PVC を作成します。
kubectl create -f pvc-nas.yamlPVC のステータスを確認します。
kubectl get pvc期待される出力:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-nas Bound pv-nas 5Gi RWX <unset> 5s出力から、PVC が 5 GiB のストレージを正常に要求し、pv-nas PV にバインドされた Bound 状態であることが確認できます。これで、アプリケーションでマウントおよび利用する準備が整いました。
コンソール
クラスター管理ページの左側ナビゲーションウィンドウで、 を選択します。
永続ボリュームクレーム ページで、作成する をクリックし、プロンプトに従って PVC を設定します。
パラメーター
説明
ボリュームタイプ
NAS を選択します。
名前
PVC の名前です。名前空間内で一意である必要があります。
割り当てモード
既存のボリューム を選択します。
本トピックでは、先ほど作成した PV を使用します。PV を作成していない場合は、割り当てモード を 割り当てモード として選択できます。
既存ボリューム
先ほど作成した PV を選択します。
容量
要求するストレージ容量です。この値は PV とのマッチングに使用され、実際の容量を制限するものではありません。
NAS の実際の容量制限は、その仕様によって決定されます。詳細については、「汎用 NAS」および「エクストリーム NAS」をご参照ください。
アクセスモード
アクセスモードです。有効な値は以下のとおりです。
ReadWriteMany(デフォルト):ボリュームを複数のノードで読み書き可能としてマウントできます。ReadWriteOnce:ボリュームを単一のノードで読み書き可能としてマウントできます。ReadOnlyMany:ボリュームを複数のノードで読み取り専用としてマウントできます。
ステップ 3:アプリケーションの作成およびボリュームのマウント
PVC を作成した後、この PVC を使用して NAS ボリュームをマウントするアプリケーションを作成できます。
kubectl
PVC を参照する
deploy.yamlというファイルを作成します。このアプリケーションは、同一の NAS ファイルシステムをマウントする 2 つの Pod を作成し、後続の共有ストレージの検証を可能にします。
Deployment を作成します。
kubectl create -f deploy.yamlアプリケーション Pod のデプロイメントステータスを確認します。
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
コンソール
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
デプロイメント ページで、イメージによる作成 をクリックし、プロンプトに従ってアプリケーションを設定します。
以下の表は主なパラメーターを示しています。その他のパラメーターはデフォルト値のままにしてください。「デプロイメントの作成」をご参照ください。
セクション
パラメーター
説明
基本情報
名前
デプロイメントの名前です。
Replicas:
デプロイメントの Pod レプリカ数です。
複数のレプリカが同一の NAS ファイルシステムをマウントし、後続の共有ストレージの検証を可能にします。
コンテナー
イメージ名
アプリケーションイメージのアドレスです。
リソースリクエスト
必要な vCPU およびメモリリソースです。
ボリューム
PVC を追加 をクリックし、パラメーターを設定します。
マウントソース:先ほど作成した PVC を指定します。
コンテナー内のパス:NAS ファイルシステムをマウントするコンテナー内のパス(例:/data)です。
デプロイ後、ステートレス ページでアプリケーション名をクリックし、ポッド タブで、Pod のステータスが Running であることを確認します。
共有ストレージおよび永続ストレージの検証
アプリケーションをデプロイした後、ボリュームが想定通りに動作することを検証できます。
共有ストレージ | 永続ストレージ |
1 つの Pod でファイルを作成し、別の Pod でそのファイルを確認することで、データ共有を検証します。
| Deployment の Pod を再起動し、新しい 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 プローブを設定し、マウントポイントが正しく機能しているかを確認します。マウントが失敗した場合、Kubernetes が自動的に Pod を再起動し、ボリュームの再マウントをトリガーします。
モニタリングおよびアラート機能:アラートを設定してボリュームの異常やパフォーマンスボトルネックを迅速に検出できるよう、「コンテナストレージモニタリング」をご利用ください。
Retain再利用ポリシーの使用:本番環境のデータの場合、PV のpersistentVolumeReclaimPolicyをRetainに設定します。これにより、誤って PVC を削除した場合でも、バックエンドの NAS ファイルシステムにおけるデータ損失を防ぐことができます。
リソースのクリーンアップ
予期しない課金を回避するため、NAS ボリュームが不要になった場合、以下の順序でリソースを解放してください。
ワークロードの削除
操作:NAS ボリュームを使用するすべてのアプリケーション(例:デプロイメントまたは StatefulSet)を削除します。これにより、アプリケーション Pod からのボリュームのマウントが解除されます。
実行例:
kubectl delete deployment <your-deployment-name>
PVC の削除
[操作]: アプリケーション に関連付けられた PVC を削除します。そのバインドされた PV のその後の動作は、PV の
persistentVolumeReclaimPolicyによって異なります。再利用ポリシーの動作:
Retain(推奨):PVC が削除されると、バインド済みの PV はReleased状態になります。PV オブジェクトおよびバックエンドの NAS データは完全に保持され、手動で削除する必要があります。Delete:PVC が削除されると、対応する PV オブジェクトも削除されます。以下の点にご注意ください。PV が NAS のルートディレクトリを指している場合、バックエンドの NAS データは誤った削除を防ぐために保持されます。
静的 PV の
volumeHandleがpath値の末尾と一致する場合(例:volumeHandleがappで、pathが/exports/appの場合)、PVC の削除によりバックエンドの NAS サブディレクトリが自動的に削除されます。この設定は慎重に使用してください。
実行例:
kubectl delete pvc <your-pvc-name>
PV の削除
操作:PV が
AvailableまたはReleased状態のときに PV を削除できます。この操作は Kubernetes クラスター内での PV 定義のみを削除し、バックエンドの NAS ファイルシステム上のデータは削除しません。実行例:
kubectl delete pv <your-pv-name>
バックエンドの NAS ファイルシステムの削除(任意)
操作:「ファイルシステムの削除」をご参照ください。この操作は NAS ファイルシステム上のすべてのデータを完全に削除し、元に戻すことはできません。実行にあたっては極めて慎重に進めてください。実行前に、この NAS ファイルシステムに依存するサービスがないことを確認してください。
参照
NAS ボリュームのマウントまたは使用時に問題が発生した場合は、以下のドキュメントを参照してトラブルシューティングを行ってください。
CNFS を使用すると、NAS ファイルシステムを独立して管理でき、パフォーマンスおよび QoS 制御が向上します。詳細については、「CNFS を使用した NAS ファイルシステムの管理」をご参照ください。