|
ステートフル アプリケーションのデータ ストレージをより適切にサポートするために、Kubernetes は、HostPath と EmptyDir によって提供される基本的なデータ永続化ソリューションに加えて、ストレージ管理用の PV、PVC、および StorageClass リソース オブジェクトを提供します。 PVはPersistent Volume(永続ボリューム)の略で、基盤となるデータストレージを抽象化したものです。PVは管理者によって作成、保守、構成されます。PVはCeph、NFS、ClusterFSといった基盤となるデータストレージ実装方法と関連しており、共有ストレージとのインターフェースとなるプラグインメカニズムによって完結します。 PVCはPersistent Volume Claim(永続ボリューム要求)の略です。PVは、基盤となるデータストレージをカプセル化するインターフェースと考えることができます。PVCはインターフェースを呼び出してデータストレージ操作を実行します。PVCはPVのリソースを消費します。 StorageClassは、高速ストレージや低速ストレージなど、ストレージデバイスの様々なニーズに対応するように設計されています。StorageClassを定義することで、管理者はストレージデバイスを特定のリソースタイプとして定義できます。ユーザーはStorageClassの記述に基づいて、様々なストレージリソースの具体的な特性を直感的に理解できるため、アプリケーションの特性に応じて適切なリソースを適用できます。 ストレージシステムのインストールNFS、Ceph、GlusterFS、FastDFSなど、様々なストレージシステムから選択できます。どのシステムを使用するかは、企業のニーズによって異なります。ここではNFSを使用し、そのインストール方法について簡単に説明します。 1. 設置サービス $ yum install nfs - utils rpcbind - y 2.共有ディレクトリを作成する $ mkdir /data/k8s -p 3. NFS設定ファイルを構成する $ vim /etc/exports 4. サービスを開始する $ systemctl rpcbind を起動します 5. テスト $ ショーマウント -e 192.168.205.128
PVPV (永続ボリューム) は、管理者が事前に構成することも、StorageClass を通じて動的にプロビジョニングすることもできる Kubernetes ストレージ デバイスです。 PVはクラスターリソースです。`kubectl explain pv`コマンドを使用すると、PVの構成を確認できます。構成には、主にストレージ容量、アクセスモード、ストレージタイプ、リサイクル情報などの重要な情報が含まれます。例えば、以下のようになります。 apiバージョン: v1 パラメータの説明: 1. accessMode: アクセスモード(ReadWriteOnce、ReadOnlyMany、ReadWriteMany など)。
2. 容量: 永続ボリュームのリソースと容量の説明。設定または要求できるリソースはストレージサイズのみです。 3. persistentVolumeReclaimPolicy: これは再利用ポリシー、つまり永続ボリュームの解放ポリシーです。以下の内容が含まれます。
作成後の PV のステータスは次のようになります。 $ kubectl でPV を取得 現在のPVステータスは「利用可能」で、いつでも使用可能です。PVには合計4つのステータスがあります。
PV を作成しただけでは直接使用することはできません。要求を行うには PVC (Persistent Volume Claim) を使用する必要があります。 PVCPVC(Persistent Volume Claim)は、ユーザーのストレージニーズを表現するために使用されます。PVCを要求すると、PVリソースが消費されます。ヘルプドキュメントは、kubectl explain pvc でご覧いただけます。 前のセクションではPVを作成しました。次に、以下のようにPVCを宣言する必要があります。 apiバージョン: v1 仕様パラメータの説明: 1. accessModes: 主にボリュームのアクセス モードを定義します。 2. リソース: 主にボリュームに必要な最小限のリソースを定義します。 3. dataSource: プロバイダーがボリューム スナップショット機能を持っている場合にボリュームを作成し、そこにデータを復元するかどうかを定義します。そうでない場合は、ボリュームを作成しません。 4. セレクター: バインドされたボリュームのタグ クエリを定義します。 5. storageClassName: 定義されたストレージクラスの名前 6. volumeMode: ボリュームの種類を定義します。 7. volumeName: バインドする PV の名前とリンク。 作成後、以下に示すように PV と PVC のステータスを確認します。 $ kubectl でPVC を取得する 上記のように、PVCはBound状態にあり、BoundされたVOLUMEはmy-pv01です。その後、PVの状態がAvailableからBoundに変わり、CLAIMはdefault/pvc-testになります(defaultは名前空間名です)。 上記では、作成したPVにバインドされたPVCを作成しました。ここで別のPVCを作成するとどうなるでしょうか?上記のPVCファイルをコピーし、以下のように名前を変更してみましょう。 apiバージョン: v1 次に、次のように PVC のステータスを確認します。 $ kubectl でPVC を取得する 先ほど作成した pvc-test2 のステータスが Pending 状態になっていることがわかります。これは、クラスター内で宣言されたすべての PV が使い果たされ、PVC が要求時に適切な PV を見つけられなかったため、この状態になっているためです。要件を満たす新しい PV を作成すると、この PVC は Bound 状態になります。以下を参照してください。 $ kubectl でPV を取得 PVCはPVに任意に適用することはできません。以下の要件を満たす必要があります。(1) PVC適用モードはPVの適用モードと一致している必要があります。例えば、PVCモードがReadWriteOnceでPVモードがReadWriteManyの場合、適用は成功しません。(2) PVC適用容量はPVの容量以下である必要があります。そうでない場合、適用は成功しません。(3) PVは1つのPVCにのみバインドできます。 さらに、PVC 容量要件が利用可能な PV 容量より少ない場合、バンドルされた容量が利用可能な PV 容量になります。 ストレージクラス前述のPVモードとPVCモードでは、まず運用担当者がPVを作成し、次に開発者が1対1のボンディングを行うためのPVCを定義する必要があります。しかし、PVCリクエストが数万件に達すると、数万個のPVを作成する必要があり、運用担当者にとって非常に大きなコストがかかります。Kubernetesは、PV作成のテンプレートとして機能するStorageClassと呼ばれるPVを自動作成する仕組みを提供しています。 具体的には、StorageClass は次の 2 つの部分を定義します。
これら 2 つの情報を使用して、Kubernetes はユーザーが送信した PVC に基づいて対応する StorageClass を見つけ、StorageClass によって宣言されたストレージ プラグインを呼び出して必要な PV を作成します。 ここではNFSを例に挙げます。NFSを使用するには、nfs-client用のオートローダー(ここではProvisionerと呼びます)が必要です。このプログラムは、既に設定済みのNFSサーバーを使用して永続ボリューム(PV)を自動的に作成します。つまり、PVを自動的に作成してくれるのです。注:
NFSプロビジョナーをインストールする1. ServiceAccount を作成し、NFS Provisioner を承認します。 --- 2. NFSプロビジョナーを作成する --- 実行後、次のように NFS プロビジョナーのステータスを確認します。 $ kubectl でpo を取得 StorageClassを使用するNFSプロビジョナーはすでに作成されています。これで、以下のようにStorageClassを直接作成できます。 api バージョン: storage.k8s.io/v1 各 StorageClass には、StorageClass が PersistentVolume を動的に割り当てる必要があるときに使用される provisioner、parameters、および reclaimPolicy フィールドが含まれています。 StorageClass を設定する際に reclaimPolicy が指定されていない場合、デフォルトは Delete です。また、Retain もあります。 StorageClassオブジェクトの命名は重要です。ユーザーはこの名前を使用して、特定のクラスの生成を要求します。StorageClassオブジェクトが作成されると、管理者はその名前とその他のパラメータを設定します。一度作成されると、オブジェクトは更新できません。 `kubectl apply -f sc.yaml` を使用して StorageClass を作成します。結果は次のようになります。 $ kubectl でsc を取得する 次のように、動的ストレージを使用して PVC を要求できるようになりました。 apiバージョン: v1 以下に示すように、`kubectl apply -f pvc-from-sc.yaml` を使用して PVC の作成ステータスを確認します。 $ kubectl でPVC を取得する PV が自動的に作成され、PVC にバインドされたことがわかります。 使いやすさを考慮して、クラスターにデフォルトのStorageClassが設定されている場合があります。これにより、必要に応じてデフォルトの動的ストレージを使用できるようになり、宣言する必要はありません。設定方法は次のとおりです。 $ kubectl patch ストレージクラスnfs - p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' `@storageclass.kubernetes.io/is-default-class` アノテーションを追加することで、特定の StorageClass をデフォルトとしてマークできます。クラスター内にデフォルトの StorageClass が存在し、ユーザーが storageClassName を指定せずに PersistentVolumeClaim を作成すると、DefaultStorageClass アドミッションコントローラは、デフォルトのストレージクラスを指す storageClassName フィールドを自動的に追加します。
デフォルトの StorageClass を無効にするには、次のようにアノテーションを false に設定するだけです。 $ kubectl patch ストレージクラスnfs - p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}' Pod で PVC を使用する場合は、次のように直接宣言できます。 apiバージョン: v1 コンテナに入り、マウント ディレクトリに出力できます。次に例を示します。 $ kubectl exec -it nginx -- / bin / bash 次に、対応する NFS ディレクトリをチェックして、一致しているかどうかを確認します。 $ cd / data / k8s / default - pvc - from - sc - pvc - a4a71b8c - 5664-4d1a - b286-9e4 adcf6f96a これは、ポッドが永続性を正常に使用したことを示します。 要約Kubernetesではステートレスアプリケーションの使用を推奨していますが、一部の特殊なアプリケーションではデータの永続性が依然として不可欠です。データの永続性確保の難しさは、少数のPVやPVCを作成することではなく、Cephなどのバックエンドストレージシステムにあります。バックエンドストレージとしてCephを使用する場合は、問題発生時のトラブルシューティングを容易にするために、Cephに精通している必要があります。これらのストレージシステムに精通していない場合、使用時に多くの問題が発生する可能性があります。 |