Red Hat OpenShift 仮想マシンワークロード向けのデータ基盤(ODF)
VM ワークロード向けに Red Hat® OpenShift® Data Foundation (ODF) を導入します。具体的には、Cephストレージプールの構成、ストレージクラスの設定、ライブマイグレーションの有効化、およびバックアップソリューションの実装を行います。
Red Hat® OpenShift® Data Foundation (ODF) は、 IBM Cloud® Red Hat OpenShift Kubernetes Service 上の Red Hat OpenShift 仮想化用に検証され、サポートされているストレージ・ソリューションです。 Red Hat OpenShift Virtualization のストレージバックエンドとしては、ODF を使用することをお勧めします。
主な利点
- 仮想マシン向けの高性能:最適化されたブロックストレージは、仮想マシンのワークロードにおけるブートディスクおよびデータディスク向けに設計されており、レイテンシを低減し、高いIOPSを実現します。
- Red Hat OpenShift 仮想化向けに設計: Red Hat OpenShift および KubeVirt とのネイティブ統合により、スナップショット、クローン作成、ライブマイグレーション、バックアップ/復元をサポートし、Containerized Data Importer(CDI)ともシームレスに連携します。
- 高い耐障害性と可用性:ワーカーノード間でデータを複製する分散ストレージを採用し、ディスクやノードの障害から自動的に復旧するため、ストレージに単一障害点が存在しません。
- Red Hat OpenShift Kubernetes Service ベアメタルインフラに最適化:ローカルのNVMeディスクとSSDディスクを共有ストレージプールに集約し、外部ネットワークストレージへの依存を排除します。
- 包括的なサポートとライフサイクル管理: Red Hat OpenShift オペレーターを通じてインストールおよびアップグレードが行われ、監視およびアラート機能が統合されています。 IBM® と Red Hat® が共同で検証し、サポートしている。
- 仮想サーバーとコンテナのための統合ストレージ:ODFは単一プラットフォーム上で、これらのワークロードに一貫したストレージを提供します。
ODFとは?
ODFは、 Red Hat OpenShift のために構築されたSoftware-Defined Storageソリューションである。 ODFはCeph®を基盤としており、 Red Hat OpenShift オペレーターを通じて完全に統合され、ライフサイクル管理が行われます。 Cephは、汎用サーバーを拡張性が高く、耐障害性に優れたストレージクラスターに変えるオープンソースの分散ストレージシステムです。
ODFは同じプラットフォームから4種類のストレージを提供する:
- ブロックストレージ(RBD) – 仮想マシンのワークロード用ディスク
- ファイルストレージ ( CephFS ) – 共有ファイルシステム用
- オブジェクトストレージ(RGWおよび S3-compatible ) – オブジェクトワークロード向け
- NFS ( CephFS-backed ) – NFS 従来のクライアントや外部クライアント向けの輸出
ODFでは、 NFS は CephFS によってバックアップされ、Ceph NFS Ganeshaゲートウェイを通して公開される。 ゲートウェイは Rook の CephNFS カスタムリソースで管理される。 これは独立したストレージバックエンドではありません。 NFS プロトコルを介して、 CephFS へのアクセスを提供します。 主なユースケースは、 Red Hat OpenShift クラスター外のクライアント、または NFS を必要とするワークロードに対して、 NFS へのアクセスを提供することです。 NFS 仮想サーバーはブロックストレージ(RBD)を使用するため、仮想マシンのワークロード用ディスクには使用されません。
IBM Red Hat OpenShift Kubernetes Service において、ODFでは通常、ワーカーノード上のローカルディスクを使用して、 Red Hat OpenShift 内に高性能かつ耐障害性の高いストレージクラスターを構築します。
データ保護を理解する
ODFクラスタの計画と導入を行う前に、ODFがデータをどのように保護しているかを理解しておくことが重要です。 選択するデータ保護戦略は、ストレージ容量、パフォーマンス特性、フォールトトレランス、必要最小ノード数に影響します。
1つのODFクラスタが複数のCephプールを同時に実行でき、それぞれが異なるデータ保護ポリシーを持つ。 各プールは、独自の StorageClass を通してワークロードにアクセスする。 仮想マシンのワークロードを作成するときに、各ディスクに StorageClass。 たとえば、仮想マシンのワークロードでは、ルートディスクとして rep3 StorageClass を使用し、重要度の低いデータディスクには、 rep2 プールで構成された別の StorageClass を使用する場合があります。 このモデルは、クラスタ全体の、オール・オア・ナッシングの選択ではない。
VMware のチームにとって、このモデルは vSAN のストレージポリシーに類似しています。 vSAN, では、仮想マシンのワークロードごと、または VMDK ごとにストレージ・ポリシー(例: RAID-1 FTT=1, RAID-5 )を割り当てます。 ODFでは、PVCごとにCephプールにマップする StorageClass。 コンセプトは同じだが、同じクラスタ上の異なるワークロードは異なる保護レベルを持つことができる。
ODFは、Cephブロックプールに対して以下のデータ保護戦略をサポートします:
複製プール(デフォルト)
ODFのデフォルト設定では、3ウェイレプリケーションが使用されます。 すべてのデータは、異なるノードに3つのコピーとして保存され、最大2つのディスクまたはノードの同時障害からデータを保護します。
- 利点:シンプルなアーキテクチャ、高速な読み取り、迅速な復旧、および予測可能なレイテンシ。
- 使用量の増加: 3x 利用可能なデータ1バイトあたり、生のストレージ容量。
コピーが紛失した場合はどうなるのか( rep3 ):
| 残るコピー | Cephの状態 | I/O動作 | リスク |
|---|---|---|---|
| 3 / 3 | active+clean |
通常運転。 読み取り操作は、どのコピーからでも処理されます。 | ありません。 |
| 3つのうち2つ | active+degraded |
I/Oは正常に継続される。 Cephは、欠落しているコピーを別のOSDに直ちに再レプリケーションし、3つのコピーを復元します。 | 最小限だ。 データは2つの独立したOSDでまだ耐久性がある。 リカバリーは自動的に行われる。 |
| 1 / 3 | active+degraded または peered ( min_size による。) |
ODFのデフォルト設定 min_size=2 では、コピーが1つしか残っていない場合、Cephは影響を受けるプレースメントグループへのすべてのI/Oをブロックします。 一貫性を損なう恐れのある余分な書き込みを防ぎます。 それらのPGにデータが格納されている仮想サーバーでは、I/Oハングが発生します。 |
高い。 残っている1つのOSDには、データが1コピーのみ残っています。 復旧が完了する前にこれも失敗した場合、データは永久に失われてしまいます。 |
| 0 / 3 | incomplete |
I/O がブロックされています。 コピーは存在しない。 | データの消失。 データは永久に復元できない。 |
min_size パラメータは、CephがI/Oを許可する前に利用可能でなければならない最小コピー数を制御する。 ODFでは、デフォルトで rep3 プールに対して min_size=2 が設定されており、これは requireSafeReplicaSize: true を通じて強制されます。つまり、2つまたは3つのコピーが利用可能な場合、読み取りおよび書き込みは通常通り行われます。 利用可能なコピーが1つしかない場合、Cephはデータの不整合がさらに広がるのを防ぐため、I/Oをブロックします。
この動作は、可用性よりもデータの整合性を優先させる、意図的な安全対策です。
2つ目のコピーが失われてから再レプリケーションが完了するまでの期間が、最も危険な時期です。 この間、3回目の故障でデータが永久に失われる。 Cephの再レプリケーション速度は、利用可能なクラスタの帯域幅と空き容量に依存するため、キャパシティプランニングが重要となるのです。 負荷がかかりすぎている、あるいはほぼ満杯の状態にあるクラスタでは、再レプリケーションに時間がかかり、その結果、脆弱性が生じる期間が長引きます。
rep2 のプールでは、進行がより急速です。 コピーが1部失われた場合、残るコピーは1部のみとなる。 min_size=2 (デフォルト)では、欠落したOSDが復帰するか、新しいコピーがレプリケートされるまで、影響を受けるPGのI/Oは直ちにブロックされます。 min_size=1 を使用すると、残りの 1 つのコピーで I/O は継続されますが、2 度目の障害が発生すると、データが永久に失われてしまいます。
Red Hat OpenShift ( Kubernetes Service )のODFアドオンは、 ocs-storagecluster-cephblockpool を使用して、 rep3 プールのみを自動的に作成します。 Rep2 プールはこのアドオンによって作成されるものではありません。 replicated.size: 2 およびそれに対応する StorageClass を使用して、カスタム CephBlockPool
を手動で作成する必要があります。 詳細については、「 仮想化向けのカスタム StorageClass の作成 」を参照してください。
rep2 は rep3 に比べて耐障害性が低いため、ストレージの節約効果が、ワークロードにおけるリスクの増加に見合うかどうかを評価してください。
IBM 可用性とデータの耐久性を確保するため、すべての本番環境の仮想化ワークロードに対して、3ウェイレプリケーションを推奨しています。
消去符号化プール
ストレージ容量の効率が優先される環境のために、ODFは消去符号化(EC)プールもサポートしている。 ECはデータを k のデータチャンクと m のパリティチャンクに分割することで、レプリケーションと比較して生のストレージ使用量を削減しつつ、フォールトトレランスを確保します。
サポート状況: ODFにおけるRBDおよび CephFS 向けのイレイジャーコーディングは、開発者向けプレビュー機能であり、ODFで初めて導入されました 4.20。 開発者向けプレビュー機能は、本番環境での使用には対応していません。 また、これらは Red Hat お客様ケース管理の対象外となります。 ODF 4.20 が公開される前は、RGW(オブジェクトストレージ)ECのみが開発者向けプレビューとして利用可能でした(ODF 4.16 参照)。 基礎となるCephストレージエンジンは、Luminousリリース(2017年)以降、RBDのECオーバーライトをサポートしているが、ODFオペレータとその管理された導入モデルは、本番ブロックストレージワークロード用のECプールをまだ認証していない。 すべての本番環境の VM ストレージには、レプリケートされたプール( rep2 または rep3 )を使用するように計画し、ECプールについては、開発者プレビューの制限が許容できる非本番環境でのみ評価してください。
参考までに、利用可能なすべてのプールタイプを以下の表にまとめました。
| プール・タイプ | 構成 | Rawの利用増加 | フォールト・トレランス | 最低限必要なホスト |
|---|---|---|---|---|
| rep3 (デフォルト) | 3部 | 3.0x | 2回の故障に耐える | 3 |
| rep2 | 2枚 | 2.0x | 1回の故障に耐える | 2 |
| rep1 (非反発性) | 1コピー | 1.0x | ありません。 障害発生時のデータ損失 | 3 |
| ec-2-1 | k=2, m=1 | 1.5x | 1回の故障に耐える | 3 |
| ec-3-1 | k=3, m=1 | 1.33x | 1回の故障に耐える | 4 |
| ec-2-2 | k=2, m=2 | 2.0x | 2回の故障に耐える | 4 |
| ec-4-2 | k=4, m=2 | 1.5x | 2回の故障に耐える | 6 |
以下のリストは、消去符号化における主な考慮事項を示しています。
- ECプールは、パリティ計算や1回の操作あたりにより多くのチャンクを書き込む必要があるため、レプリケートプールよりも書き込みレイテンシが高くなります。
- ECプールは、競争力のあるシーケンシャル・リード・スループットを提供するが、ランダム・ライトIOPSが低下する可能性がある。
- 失敗ドメインの数は、少なくとも k+m 以上でなければならない。 3ノードのクラスタでは、 rep2、 rep3、および ec-2-1 のみが利用可能です。
- 6ノードのクラスタの場合、前述のすべてのプールタイプが利用可能です。
単一のレプリカプール(開発およびテスト用のみ、耐障害性なし)
ODFアドオン・バージョン 4.14 以降、 Red Hat OpenShift Kubernetes Service は、 addSingleReplicaPool パラメーターを通じて単一のレプリカ( rep1 )プールをサポートしています。 このパラメータを指定すると、データのレプリケーションを行わないCephの非耐障害性ブロックプールが作成され、各データブロックは1回だけ保存されます。
ODF をデプロイする際にシングルレプリカプールを有効にするには、次のコマンドを実行してください
ibmcloud oc cluster addon enable openshift-data-foundation -c <cluster_name> \
--version <version> \
--param "addSingleReplicaPool=true"
このコマンドは、追加の StorageClass:
ocs-storagecluster-ceph-non-resilient-rbd:WaitForFirstConsumerボリュームバインディングによるシングルレプリカブロックストレージ。
標準の replica-3 プール(ocs-storagecluster-cephblockpool )は、これを使用して引き続き作成されます。 非弾力性プールは、別途、オプトイン・オプションである。
1つのレプリカプールには、次のようなユースケースがあります。
- 開発およびテスト環境 ― データの永続性がそれほど重要ではなく、ストレージコストの削減が優先される環境。
- レプリケーション機能を組み込んだアプリケーション ― これらのアプリケーションは、アプリケーション層で独自のデータ冗長性を管理します。 これらのアプリケーションは、ノード間で複数のコピーを保持しているため、ストレージレベルのレプリケーションは冗長となります。
単一のレプリカ・プールはゼロ・フォールト・トレランスを提供する。 単一のOSDまたはノードの障害は、そのOSD上のすべてのデータについて、永久的で回復不能なデータ損失をもたらす。 IBM Cloud、このオプションはデータ損失、データ破損、システム不安定化のリスクを高めると、文書で明確に警告している。 詳細については、 Cephのドキュメントを参照してください。
制限事項
- ブロックストレージのみ:ファイルストレージは、レプリカが1つの場合はサポートされていません。
- 追加のディスクが必要: replica-3 プールで使用されるディスクとは別に、ノードごとに少なくとも1台の追加のNVMeディスクが必要です。 この追加ディスクがないと、 replica-1 OSDは起動せず、ストレージクラスタは進行状態のままである。
- 障害ドメインごとに1つのプール:ODFは、
WaitForFirstConsumerを使用してデータのローカリティを検証することによってバインドされたボリュームを持つ、障害ドメインごとに1つの非復旧性 CephBlockPool を作成します。 - 仮想マシンのワークロードのルートディスクには推奨されません:ルートディスクをホストするOSDに障害が発生すると、仮想マシンのワークロードが永久に失われます。 開発またはテスト仮想マシンのワークロードで、使い捨てのデータディスクのみに非復旧性プールを使用します。
本番環境の仮想化ワークロードについては、常に replica-3 (または少なくとも replica-2 )のプールを使用してください。
VMware vSAN 移行の比較
VMware vSAN™ から移行するチームにとって、これらの Ceph プールタイプは、おなじみの vSAN ストレージポリシーに対応しています:
| Cephプール | 最も近い vSAN 相当 | 利用を拡大する | フォールト・トレランス | 注記 |
|---|---|---|---|---|
| rep2 | RAID-1, FTT=1 | 2x | 1 失敗 | どちらの場合も、2つのコピーを保存するという点で直接的に同等です。 |
| rep3 | RAID-1, FTT=2 | 3x | 2 失敗 | どちらの場合も、3つのコピーを保存するという点で直接的に同等です。 |
| ec-2-1 | 直接の同等品なし | 1.5x | 1 失敗 | RAID-5 と同じシングル・パリティだが、2+1レイアウトを採用。 vSAN RAID-5 よりも使用率が高い。 |
| ec-3-1 | RAID-5 FTT=1 (3+1) | 1.33x | 1 失敗 | どちらの場合も、3つのデータチャンクと1つのパリティチャンクを使用するという点で直接的に同等です。 |
| ec-2-2 | 直接の同等品なし | 2x | 2 失敗 | RAID-6 のようなデュアルパリティだが、2+2のレイアウトを採用。 vSAN RAID-6。 |
| ec-4-2 | RAID-6 FTT=2 (4+2) | 1.5x | 2 失敗 | どちらの場合も、4つのデータチャンクと2つのパリティチャンクを使用するのが直接的な対応策です。 |
との主な違い vSAN:
- 最小ホストが小さい:Cephはクラスタクォーラムをデータ配置から分離します。 rep3 のプールに必要なホストは3台だけで済みます。これは、各ホストが1つの完全なコピーを保存するためです。 vSAN RAID-1 FTT=2 には5台のホストが必要です。
- rep2 標準の vSAN に準拠しています。 RAID-1: vSAN の導入事例のほとんどでは、2 つのコピーを保存する FTT=1 が使用されています。 Cephの rep2 がこれに直接相当します。
- ec-3-1 vSAN および に一致します。どちらも 3+1 構成を採用しており、 の使用率を実現しています。これは、単一障害耐性において最もスペース効率の高い選択肢です。 RAID-5: 1.33x
- ec-4-2 vSAN および に一致します。どちらも 4+2 レイアウトを採用しており、二重障害耐性を備えながら、 の使用率を実現しています。 RAID-6: 1.5x
- ec-2-1 また、 ec-2-2 には、 vSAN に直接対応する構成はありません。データチャンクの数が少ない、より小規模なCeph EC構成であり、これにより1バイトあたりの使用率は高くなりますが、必要なホスト数は少なくて済みます。 これらは、ストレージ効率を犠牲にする代わりに、必要なホスト数を少なくしています。
ODFクラスタの計画
データ保護の選択肢について理解したところで、ODF導入に向けたクラスタの規模設定とトポロジーの計画を進めることができます。
計画能力
ODFクラスタを計画する際は、選択したデータ保護ポリシーによるストレージの実際の使用量をアカウント。 使用可能な容量は、未加工のNVMe容量の合計よりも少ない。
使用可能容量の計算式は Usable capacity = Total raw NVMe capacity / Replication or EC overhead factor である。
ノードあたり8 x 3.2 TB NVMeドライブ(合計 76.8 TB raw)を搭載した3ノード・クラスターの計算例を以下に示します:
| データ保護 | 使用率 | 使用可能な容量 | ストレージ効率 |
|---|---|---|---|
| *ep3 (デフォルト) | 3.0x | 25.6 結核 | 33% |
| rep2 | 2.0x | 38.4 結核 | 50% |
| ec-2-1 | 1.5x | 51.2 結核 | 67% |
| rep1 (非反発性) | 1.0x | 76.8 結核 | 100% |
仮想マシンのワークロード容量の見積もり:30GBのルートディスクと100GBのデータディスクを持つ典型的な仮想マシンのワークロードは、130GBの使用可能なストレージを使用します。 rep3 を使用する場合、その仮想マシンのワークロードには 390 GB の生ストレージ容量が必要です。 前述の3ノードクラスターでは、この規模の仮想マシンワークロードを約196台プロビジョニングできるでしょう。 実際には、パフォーマンスを維持し、リカバリ作業をサポートするために、Cephの使用率を75%未満に抑える。
Cephのパフォーマンスは、クラスタの使用量が増えるにつれて低下します。 ODFは、いずれかのOSDの使用率が75%を超えた場合、「 CephOSDNearFull 」 Prometheus というアラートを発行します。 85%に達すると、Cephはネイティブの nearfull OSDフラグ(mon_osd_nearfull_ratio )を設定し、ODFは CephOSDCriticallyFull アラートを発火させます。 90%に達すると、Cephは影響を受けたOSDへのバックフィルおよびリカバリ操作を停止します(mon_osd_backfillfull_ratio )。95%に達すると、CephはOSDを full としてマークし(mon_osd_full_ratio )、すべての書き込みをブロックし、 HEALTH_ERR を発行します。 通常運用時には使用率が70%未満になるよう容量を計画し、ノードのメンテナンスや障害発生時にデータ復旧やリバランスを行うための余裕を確保してください。
現在のクラスタの使用状況を確認するには、次のコマンドを実行してください:
oc exec -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) -- ceph df
ワーカーノード数とトポロジー
IBM Cloud のODFアドオンで使用されるフェイルドメインのトポロジーは、クラスタの構成によって異なります:
- マルチゾーンクラスター(3つのアベイラビリティゾーン): 障害ドメインは「
zone」に設定されています。 ワーカーノードは各ゾーンに分散配置されており、ゾーン間のバランスを維持するためには、ODFを3の倍数ずつ拡張する必要があります。 可用性、パフォーマンス、およびデータの安全性を最適化するには、ODF ストレージクラスタで 3、6、または 9 ノードを使用してください。各ゾーンには、同じ数のノードが割り当てられます。 - シングルゾーンのクラスター、またはアベイラビリティゾーンが3つ未満のクラスター: 柔軟なスケーリングが自動的に有効になり、フェイルドメインは
hostに設定されます。 まずは3つのノードから始めて、1つずつノードを追加していくことができます。
ODFストレージクラスタに参加するノードはすべてベアメタルでなければならない。 同じODFクラスタ内で仮想化ノードとベアメタルノードを混在させることはサポートされていません。
マルチゾーンクラスターの場合、3の倍数ではない数のノードを追加すると、ゾーン間の不均衡が生じます。 ノードが4つある場合、1つのゾーンに2つのノードが割り当てられ、他のゾーンにはそれぞれ1つずつ割り当てられるため、OSDの負荷分散が不均一になり、データの配置が最適でなくなり、使用率が不均一になり、一部のOSDがアイドル状態になってしまう。
マルチゾーンクラスターの場合、ゾーントポロジーのバランスを保つために、常に3の倍数でスケールアウトしてください。
6ノードが生産に実用的な最小値である理由
ODF には最低 3 ノードが必要ですが、3 ノードのクラスタでは、計画的なメンテナンスを行うための余裕がありません。 3つのノードで rep3 を実行している際に、1つのノードがファームウェアの更新や Red Hat OpenShift のアップグレードのために隔離された場合、どのようなことが起こるかを考えてみましょう:
- 1つのノードがメンテナンス中です。 そのOSDがダウンしているため、Cephはそれらのコピーを利用不可としてマークします。 クラスタは「
active+degraded」状態に入り、残りの 2 つのノード間で 3 つのコピーを復元するために再レプリケーションを開始します。 - そのメンテナンス期間中に2つ目のノードに障害(ディスク障害、カーネルパニック、電源トラブルなど)が発生した場合、一部の配置グループには1つのコピーしか残らなくなります。 デフォルトの
min_size=2、CephはこれらのPGのI/Oをブロックする。 影響を受けた配置グループにデータがある仮想サーバーがフリーズする。 - メンテナンス中のノードと障害発生ノードの両方がダウンしたままの場合、これら2つのノードにコピーがあり、かつ同じノード上の3つ目のOSDにコピーがある配置グループは、コピー数が0となり、データの永久的な損失につながります。
このようなデータ損失を防ぐため、ODFクラスタの規模を、2つのノードが同時に失われた場合でも、すべてのデータが利用可能な状態を維持できるだけのOSDを確保できるようなサイズに設定してください。
| ノード | メンテナンス+故障 | 結果 |
|---|---|---|
| 3(最低) | メンテナンス中1+故障1=残り1 | I/O がブロックされた (min_size=2)。データ損失のリスク。 |
| 6(推奨) | メンテナンス中1+故障1=残り4 | Cephは4つのノードに対して再レプリケーションを行います。 I/Oは続ける。 データ損失のリスクがない。 |
| 9 | メンテナンス中1+故障1=残り7 | 再複製に十分な容量。 パフォーマンスへの影響は最小限。 |
rep3 を実行する本番用クラスタについては、6 ノードから開始してください。 このセットアップにより、 N+2、データの可用性やデータ損失のリスクを負うことなく、計画的なメンテナンス時に1ノード、予期せぬ障害時に1ノードの十分な容量を確保できるヘッドルームが提供される。 3ノードクラスタは、ダウンタイムやデータ損失を許容できる開発、テスト、概念実証にのみ使用してください。
次のコマンドを実行することで、クラスタ上のノードトポロジの割り当てを確認できます:
oc get nodes -l node-role.kubernetes.io/worker= \
-o custom-columns='NAME:.metadata.name,RACK:.metadata.labels.topology\.kubernetes\.io/rack'
デプロイには2つの方法があります。
-
選択肢A – 労働者プールをすべて活用する
- ODFコンフィギュレーション時にワーカープール名のみを指定する。
- マルチゾーンクラスターの場合、プールに3、6、または9個のベアメタルノード(3の倍数)が含まれていることを確認してください。 シングルゾーンクラスタの場合、最低3ノードが必要です。
-
オプション B – 特定のノードを選択する
- プール内のノード数がそれ以上ある場合、または一部のノードを「計算専用」のワークロード用に確保したい場合は、ODFに参加させるノードを選択してください。 マルチゾーンクラスターの場合は、3の倍数となるノード数を選択してください。シングルゾーンクラスターの場合は、3以上であれば任意のノード数が有効です。
ODF購読プラン
ご要件に最も適したプランをお選びください:
-
基本情報
- コストの削減
- 内部モードでの展開のみ
- ディザスタリカバリ、ストレッチクラスタ、および外部モードでの展開には対応していません
- テストおよび開発環境、概念実証(PoC)、あるいは小規模な導入に最適です
-
アドバンスト
- ディザスタリカバリ、ストレッチクラスタ、外部モードでの展開、高度なきめ細かな暗号化、マルチクラスタ対応などを含む充実した機能セット
- 仮想マシンを用いた生産環境の仮想化ワークロードに推奨されます
どちらのプランにも、ブロックプールでの BlueStore 圧縮、シンプロビジョニング、スナップショット、およびクローン機能が含まれています。 各プランの違いは、ストレージ効率に関する機能というよりは、災害復旧、暗号化の粒度、および導入の柔軟性に関するものです。
ODFは、Multicloud Object Gateway(MCG)を介したオブジェクトストレージに対してのみ重複排除をサポートする。 ブロックストレージは重複排除をサポートしていない。 このサポートは、「Essentials」プランと「Advanced」プランの両方に適用されます。 RBD用のアップストリームCeph重複排除はまだ実験的であり、ODFでの使用は認証されていません。
詳細については、「 ODFの基礎」と「ODFの応用 」を参照してください。
ODFの設定 Red Hat OpenShift Kubernetes Service
Red Hat OpenShift Red Hat OpenShift での仮想化 VPC クラスターでは、現在、ベアメタルのワーカーノードのみがサポートされています。 Kubernetes Service 仮想化ワーカーノードは、ODFストレージクラスタではサポートされていません。
Red Hat OpenShift Kubernetes Service クラスタに、 Red Hat CoreOS 上で稼働しているベアメタルサーバーを使用するワーカープールが少なくとも1つ含まれていることを確認してください。 Red Hat OpenShift。 Red Hat OpenShift 仮想化機能を利用するには、 4.17 以降のバージョンが必要です。 サポートされるベアメタルオプションには、 bx2d.metal.96x384、 cx2d.metal.96x192、
mx2d.metal.96x768 がある。
これらのベアメタルノードにODFストレージクラスタを導入し、ローカルのNVMeディスクを使用して、仮想マシンにハイパフォーマンスのブロックストレージを提供します。
VPC ベースの Red Hat OpenShift Kubernetes Service クラスターに ODF をデプロイする手順については、「 VPC クラスターに Red Hat OpenShift Data Foundation をデプロイする 」を参照してください。
ストレージ・タイプ
- ローカルストレージを選択します。
- ローカルストレージは、ベアメタルワーカーノードで利用可能なローカルNVMeインスタンスストレージを使用します。
- NVMeドライブは、仮想マシンのワークロード用ディスクに求められる低レイテンシと高いIOPS性能を実現します。
ODFリソースプロファイル
ODFは、Cephデーモン用に予約されるCPUとメモリを制御する3つのリソース割り当てプロファイルを提供します。
- リーン:最小限の資源配分。 リーン・プロファイルは、リソースに制約のある環境、テスト、開発、概念実証に適している。 生産環境の仮想化ワークロードには、Leanの使用は推奨されません。
- バランス: Red Hat OpenShift Kubernetes Service のデフォルトプロファイル。 Balancedプロファイルは、汎用ワークロードのリソース消費とパフォーマンスのバランスを提供する。
- パフォーマンス:Cephデーモンにより多くのCPUとメモリを割り当てることで、デーモン側のボトルネックが発生するリスクを低減します。 高いIOPSを必要とするワークロード、多数の仮想サーバー、および高負荷なアプリケーションに最適です。
ローカルのNVMeドライブを使用したベアメタル展開では、「 Performance 」リソースプロファイルを使用してください。 ノードあたり8台以上のNVMeドライブを搭載したベアメタルノードでは、ホストあたりのOSD数が多くなります。 「Balanced」プロファイルでは、基盤となるNVMeハードウェアが飽和状態に達する前に、CephデーモンのCPUおよびメモリの上限に達してしまうことが多く、その結果、IOPSが制限され、レイテンシが増加します。 「パフォーマンス」プロファイルは、ベアメタル環境における本番環境の Red Hat OpenShift 仮想化ワークロードに対して推奨される最低限のプロファイルです。
ODFインストール中に Red Hat OpenShift Webコンソールに表示されるリソース要件は、クラスタOSD数に基づいて動的に計算されます。 したがって、NVMeドライブの数が多ければ多いほど、それに応じてより多くのリソースが必要となります。 これらの値は固定されていません。 コンソールに表示される要件を、特定のクラスタ構成について常に確認してください。
プロファイルは、 Red Hat OpenShift ウェブ・コンソールの Configure Performance 画面から StorageSystem 作成時に選択します。 リソースが不足しているCephデーモンは、隠れたボトルネックとなり、基盤となるストレージハードウェアが提供できる水準よりもIOPSが低下したり、レイテンシが高くなったりする原因となる可能性があります。
ベアメタルサーバーのプロファイルを、選択したプロファイルに表示されるリソース要件に合わせます: IBM Cloud VPCベアメタルサーバプロファイル
ベアメタルサーバーでは、リソースのわずかなオーバーサブスクリプションはしばしば許容される。 ただし、表示されている最小要件を大幅に下回る設定を行わないでください。そうすると、ODFのパフォーマンスと安定性が低下します。
ノードあたりのOSDディスク数
- 各ベアメタルサーバーで利用可能なローカルNVMeドライブの台数を特定します。
- ノードごとに設定するOSDの数が、使用可能なNVMeドライブの数を上回らないようにしてください。
- 最適なパフォーマンスと障害の特定を確実にするため、NVMeドライブ1台につきOSDを1台配置することを推奨します。
- OSDディスクの数は、通常、ベアメタルノード1台あたりのNVMeドライブの数と一致するようにしてください。 UIに表示されるストレージ容量の計算値は、ローカルストレージ構成における実際の使用可能容量を反映していないため、無視して構いません。
StorageSystem の作成中にノードを選択する際は、クラスター内のすべてのノードを選択しないようにしてください。 すべてのノードを選択すると、 nodeSelector を指定しない LocalVolumeSet (LVS)が作成されます。 今後クラスタに追加されるワーカーノードは、たとえストレージ用として意図されていないものであっても、ODFによって自動的に検出されます。 予期せず検出されたノードは、LVSから手動で削除する必要があります。
これを防ぐには、専用ストレージワーカープール内のノードのみを選択するか、 StorageSystem の作成前に、それらのノードに cluster.ocs.openshift.io/openshift-storage ラベルが付与されていることを確認してください。
クラスタのデフォルト StorageClass
ODFの導入後、通常は followingStorageClasses が作成されます:
ocs-storagecluster-ceph-rbd:ブロックストレージocs-storagecluster-cephfs:ファイルストレージocs-storagecluster-ceph-rgw:オブジェクトストレージ
ワークロードが追加の設定なしで、ODF ベースの高性能な永続ブロックストレージを自動的に使用できるようにするには、デフォルトのストレージクラスとして「 Ceph RADOS ブロックデバイス (RBD) を使用する 」を選択するか、ODF アドオンのインストール後に、クラスタのデフォルトの StorageClass として「 RBD (ocs-storagecluster-ceph-rbd )」を手動で設定してください。
-
RBDをデフォルトとしてマークする:
oc patch storageclass ocs-storagecluster-ceph-rbd -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' -
必要に応じて、以前に設定したデフォルト設定から「default」を削除してください:
oc patch storageclass <previous-default-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
ODF設定チェックリスト
- クラスタに少なくとも1つのベアメタルサーバプールが含まれている
- Red Hat OpenShift バージョン 4.17 以降
- ODFアドオンとオペレータがインストールされ、実行されている
- ベアメタルサーバーには、十分な使用可能なローカルNVMeドライブがある
- 選択されたリソースプロファイルがノードの容量と一致する
- ODF ストレージクラスタは、最低 3 ノードで構成されます。マルチゾーンクラスタの場合は、3 の倍数(3、6、9、…)のノード数で構成する必要があります ゾーンのバランスを維持するため
- ODF参加ノードはすべてベアメタル
- RBD StorageClass を作成し、できればデフォルトに設定する
- ODFクラスタのステータスは「Ready」です(
oc get storagecluster -n openshift-storage) - Cephのヘルス状態は HEALTH_OK です (
oc -n openshift-storage rsh $(oc get pod -l app=rook-ceph-tools -o name) ceph status)
ODFで仮想サーバーを動かす
ODF上で仮想サーバーを実行するには、以下の情報を参照してください。
前提条件: Red Hat OpenShift 仮想化オペレーターをインストールする
IBM Cloud で Red Hat OpenShift の仮想化機能を使用する前に、 Red Hat OpenShift の Kubernetes Service クラスタに Red Hat OpenShift 仮想化オペレーターがインストールされていることを確認してください。
Red Hat OpenShift 仮想化オペレーターにより、 Kubernetes ネイティブの仮想マシンワークロード管理が可能になります。 また、必要なコントローラ、CRD、ストレージやネットワーキング・コンポーネントとの統合も提供する。
詳細は IBM Cloud の Red Hat OpenShift 仮想 化を参照。
仮想マシンのワークロードにODFストレージを使用する
Red Hat OpenShift Data Foundation (ODF) は、 Red Hat OpenShift 上で実行される仮想化ワークロードに、永続的なソフトウェア定義ストレージを提供する。 仮想マシンのストレージバックエンドとしてODFを使用する場合、パフォーマンス、安定性、および全機能の互換性を確保するためには、適切な StorageClass を選択することが極めて重要です。
以下の状況では、適切な StorageClass を指定する必要があります:
- 仮想サーバーが作成されます
- 仮想サーバーがインポートまたはクローンされます
- 仮想サーバーが、 Red Hat OpenShift Kubernetes Service クラスターへ移行されます
デフォルトの仮想化 StorageClass
Red Hat OpenShift Virtualization Operator がインストールされ、ODF クラスタが利用可能になると、仮想化ワークロード向けに最適化された StorageClass が自動的に作成されます
ocs-storagecluster-ceph-rbd-virtualization
この StorageClass :
- ランダムリード、ライト、持続的スループットなどのディスクI/Oパターンに合わせてチューニング
- 開始、停止、ライブマイグレーション、スナップショットなどの仮想化ライフサイクル操作で検証済み
- Red Hat OpenShift 仮想化環境は完全にサポートされており、本番環境での使用を推奨しています
ほとんどの場合、この StorageClass。
ライブマイグレーション・ストレージ要件
ライブマイグレーションは、稼働中の仮想マシンのワークロードを、ダウンタイムなしにワーカーノード間で移動させます。 ライブマイグレーションを成功させるためには、ソースノードとデスティネーションノードの両方から同時にストレージにアクセスできなければならない。 ライブマイグレーションを行うには、以下の設定が必要です。
ReadWriteMany仮想マシンのワークロードPVC上のアクセスモード。 Ceph RBDはブロックモードでRWXをサポートします。これはODF仮想化 StorageClass のデフォルト構成です。ocs-storagecluster-ceph-rbd-virtualization( StorageClass )には、RBDブロックモードによるReadWriteManyのサポートが事前に設定されています。 この StorageClass を使用する仮想サーバーは、余分な設定なしに移行できる。- 一般的な
ocs-storagecluster-ceph-rbdStorageClass は、デフォルトでReadWriteOnceアクセスモードを使用する。 RWO PVCを使用する仮想サーバーは、ライブマイグレーションを実行できません。 移行元ノードに接続したまま移行先ノードにPVCをマウントできないため、移行に失敗します。
ライブマイグレーションが必要な仮想サーバー用に customStorageClasses を作成する場合は、PVCが accessModes: [ReadWriteMany] および volumeMode: Block で作成されていることを確認してください。
ライブマイグレーションも必要だ:
- Red Hat OpenShift Virtualization Operator を適切な移行ポリシーで設定する
- デスティネーション・ノードで十分なCPUとメモリが利用可能であることを確認する
汎用RBDと比較した場合の仮想化特化 StorageClass
仮想マシンでは汎用の Ceph RBD( StorageClass, )を使用することも可能ですが、仮想化専用の StorageClass は、仮想マシンのワークロードディスク特有の I/O およびライフサイクルの特性に合わせて最適化されています。
| 局面 | 仮想化専用 StorageClass | ジェネリックRBD StorageClass |
|---|---|---|
| ワークロードの最適化 | 仮想マシンのワークロードのディスク・アクセス・パターンに合わせてチューニング | コンテナ化されたワークロードに最適化 |
| カーネルRBDマッピング | VM-friendly RBD-mapping options (例えば krbd:rxbounce) を使用する |
デフォルト・マッピング・オプションを使用する可能性がある |
| パフォーマンスの一貫性 | ゲストOSのI/Oのレイテンシをより予測しやすく | レイテンシーが増える可能性 |
| 仮想マシンのワークロード・ライフサイクル・オペレーション | 仮想マシンのワークロード開始、停止、ライブマイグレーション、スナップショットワークフローで検証済み | 仮想マシンのワークロード操作については明示的に検証されていない |
| サポート性 | Red Hat OpenShift 仮想化を完全にサポート、推奨 | サポートされているが、 VM ディスクには推奨されない |
| Day-2 業務 | アップグレードや移行時のリスクを軽減 | 予期せぬパフォーマンスのリスクが高まる |
汎用 RBD( StorageClasses )はコンテナワークロードには引き続き適していますが、本番の仮想化環境では、仮想化専用の StorageClass を使用することをお勧めします。
ワーカープールをコンピュートとストレージに分離
Red Hat OpenShift Kubernetes Service 上で、演算用とストレージ用の別々のワーカープールを実装するには、まず専用のワーカープールを備えたクラスタアーキテクチャを計画してください。 ODF用のストレージに最適化されたプロファイルを使用するストレージワーカープールを作成する。 次に、アプリケーション・ワークロード用にバランス・プロファイルまたはコンピュート最適化プロファイルを使用する1つまたは複数のコンピュート・ワーカー・プールを作成します。
ODF アドオンをインストールする際は、ストレージワーカープールを指定してください。これにより、ストレージワーカープールに属するノードに対して、ストレージ以外のポッドや仮想マシンがスケジューリングされないよう、自動的にテインが適用されます。
-
専用のストレージ・ワーカー・プールを作成する:
- IBM Cloud で、ストレージノード専用の新しいワーカープールを作成します。
- ストレージ向けに最適化されたベアメタルプロファイル(ローカルディスクまたは高I/Oプロファイル)を選択してください。
- 容量と回復力の必要性に基づいて、必要な数のワーカーノードを追加する。
-
ストレージノードにテイントを適用する:
- IBM Cloud から ODF アドオンを Red Hat OpenShift Kubernetes Service クラスタにインストールする際は、「 Capacity and worker Nodes 」セクションに進んでください。
- [ ワーカープール ] フィールドに、指定するストレージ・ワーカープールの名前を入力してください。
- Taint Nodes オプションを有効にする。
ODF アドオンのインストールが完了すると、選択したワーカープール内のすべてのノードに、
node.ocs.openshift.io/storage=true:NoScheduleというテイントが自動的に適用されます。ODF のインストール時に Taint Nodes オプションが選択されていない場合は、 Red Hat OpenShift の
oc adm taintコマンドを使用して、手動でストレージノードにテイントを適用することができます。oc get node -l ibm-cloud.kubernetes.io/worker-pool-name=<your storage workerpool name> -o=name | \ xargs -I {} oc adm taint nodes {} node.ocs.openshift.io/storage=true:NoSchedule -
ノードの汚染に成功したことを確認する:
- Red Hat OpenShift で、「 Compute」>「Nodes 」に移動します。
- を選択する。 Node を選択してステータスを確認し、 YAML タブをクリックする。
- Specs セクションで、以下のパラメーターの値をチェックする:
Taints: Key: node.ocs.openshift.io/storage Value: 'true' Effect: Noschedule
拡張構成
以下のセクションは、デフォルトのODF( StorageClasses, )の範囲を超えて、カスタムCephプールの作成、特定のパフォーマンスチューニングを施したカスタム StorageClasses の構築、および暗号化の有効化を行う必要があるチームを対象としています。
仮想化用のカスタム StorageClass の作成
シナリオによっては、特定のパフォーマンス、回復力、または容量要件を満たすために、カスタム StorageClass。
カスタム StorageClass 要件を作成するには、まずカスタム CephBlockPool を作成する必要があります。 カスタム・プールを作成する場合、プールに targetSizeRatio を設定する必要があります。 この設定がない場合、Cephのプレースメントグループ・オートスケーラーは、プールに対して1つのプレースメントグループのみを割り当てます。 この割り当てにより、すべてのI/Oが単一のOSDでボトルネックとなり、デフォルトのプールよりもパフォーマンスが低下します。
仮想化ワークロード用のカスタム StorageClass を作成する場合は、以下のパラメータが正しく構成されていることを確認します。
-
プロビジョナー
StorageClass では、ODFが提供するCeph RBD CSIプロビジョナーを使用する必要があります:
openshift-storage.rbd.csi.ceph.comこのプロビジョナは、ODFクラスタによってバックアップされるCeph RBDボリュームの動的プロビジョニングを可能にします。
-
ストレージ・プール
仮想マシ ンの ワー ク ロ ー ド デ ィ ス ク をバ ッ ク ア ッ プす る CephBlockPool を指定 し ます。 以下のいずれかのオプションを選択できます。
- デフォルトのブロックプール。 ODFによって作成されるデフォルトの3ウェイ複製Cephブロックプール:
ocs-storagecluster-cephblockpool ``` - 特注のブロックプール。 ユーザー定義の CephBlockPool。 パフォーマンスの落とし穴を避けるために、プールには以下の設定を含める必要がある: ```yaml apiVersion: ceph.rook.io/v1 kind: CephBlockPool metadata: name: my-custom-pool namespace: openshift-storage spec: failureDomain: zone # Default for multi-zone clusters — data copies spread across zones; use host for single-zone flexible-scaling clusters deviceClass: ssd # Match OSD device class enableCrushUpdates: true # Keep CRUSH rules current on topology changes enableRBDStats: true # Enable per-volume I/O monitoring replicated: size: 3 requireSafeReplicaSize: true targetSizeRatio: 0.1 # CRITICAL — prevents 1-PG bottleneck ``` The `targetSizeRatio` instructs the placement group autoscaler to proportionally preallocate placement groups based on the expected capacity share. Without it, the pool receives 1 PG and all I/O is funneled through a single OSD. -
画像の特徴
StorageClass には、ワークロードのパフォーマンスにとって重要なRBDイメージの特徴が含まれていなければならない:
imageFeatures: layering,deep-flatten,exclusive-lock,object-map,fast-diffRBD画像の特徴とその目的 特長 目的 exclusive-lockライトバック・キャッシングとシングル・ライターの最適化を有効にする。 この機能がない場合、書き込みIOPSは最大で 7x。 object-map疎な画像に対して、割り当てられたオブジェクトのビットマップ追跡を可能にする。 fast-diffスナップショットの差分と DataVolume クローン操作を高速化し、起動時間を短縮します。 deep-flattenクローンを平らにした後、完全に独立させる。 layeringDataVolume クローニングに必要なコピーオンライト・クローニングを有効にする。 -
地図オプション
mapOptions: krbd:rxbounceこのオプションは、Windows 仮想サーバーでカーネルの RBD ドライバーを使用する際に発生するデータ破損の問題を修正します。 互換性を確保するため、カーネルに対し、受信データに対してバウンスバッファを使用するよう強制します。 このオプションは、すべてのワークロードの StorageClasses で設定する必要があります。
-
完全なカスタム StorageClass の例
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-virt-sc provisioner: openshift-storage.rbd.csi.ceph.com parameters: clusterID: <your-cluster-id> pool: my-custom-pool imageFormat: "2" imageFeatures: layering,deep-flatten,exclusive-lock,object-map,fast-diff mapOptions: krbd:rxbounce csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner csi.storage.k8s.io/provisioner-secret-namespace: openshift-storage csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner csi.storage.k8s.io/controller-expand-secret-namespace: openshift-storage csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node csi.storage.k8s.io/node-stage-secret-namespace: openshift-storage csi.storage.k8s.io/fstype: ext4 reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: Immediateクラスタの
clusterIDを見つけるには、以下のコマンドを実行します:oc get sc ocs-storagecluster-ceph-rbd -o jsonpath='{.parameters.clusterID}'イレイジャー符号化プール(開発者プレビュー版のみ)については、 「データ保護の概要」を 参照し、ECプールを指す
dataPoolを追加し、poolはデフォルトのレプリケーションプールを指したままにしてください:parameters: pool: ocs-storagecluster-cephblockpool # Replicated pool for metadata dataPool: my-ec-pool # EC pool for data blocks
圧縮
ODFは、Cephブロックプールで BlueStore インライン圧縮をサポートし、ディスクが使用する未加工ストレージを削減できる。 圧縮はOSDレイヤーで透過的に行われるため、仮想マシンのワークロードやそのゲストOSは、データが圧縮されていることに気づきません。
仕組みについて
- チャンクの圧縮後のサイズが、元のサイズの 87.5 %以上にならない場合
- Cephは、ごくわずかな節約のためにCPUリソースを無駄にしないよう、データを解凍して保存します。
- 圧縮が有効になる前に書き込まれたデータは、遡って圧縮されることはありません。影響を受けるのは、新たに書き込まれるデータのみです。
圧縮アルゴリズム
| アルゴリズム | 一般的な省スペース | パフォーマンスへの影響 | 推奨 |
|---|---|---|---|
| Snappy | 16-23% | 12~38%のIOPS削減 | デフォルト。 スピードと節約のバランスが最高。 |
| lz4 | 小~中程度 | 最小のCPUコスト | CPU使用率を最小限に抑えるために使用する。 |
| ZLIB | 中間 | 中間 | スナッピーとzstdの中間。 |
| zstd | 36-50% | 21~66%のIOPS削減 | 圧縮率は最高だが、CPUコストが最も高い。 レイテンシーに敏感なワークロードには推奨されない。 |
圧縮の使用例
圧縮は、圧縮可能なデータ、テキスト、ログ、解凍済みのアプリケーションデータ、および空き領域のあるOSファイルシステムに対して最も効果的です。 以下のデータ状況においては、ほとんど、あるいはまったくメリットがありません:
- データはすでに圧縮されています
- データはアプリケーション層で暗号化されます
- 高エントロピーのデータを生成するワークロードによって生成されるデータ
VMとCeph OSDがノードを共有するハイパーコンバージドクラスターでは、圧縮処理によってCPU使用量が増加し、 VM のワークロードとの競合が生じます。 圧縮機能を有効にした後は、OSDのCPU使用率を監視し、Cephデーモンに余剰のCPUリソースを確保できるよう、パフォーマンスリソースプロファイルを検討してください。
カスタムの圧縮を有効にする CephBlockPool
圧縮を有効にするには、プールの「 パラメータ 」セクションで Compression_mode を設定してください:
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
name: compressed-block-pool
namespace: openshift-storage
spec:
failureDomain: zone # Default for multi-zone clusters; use host for single-zone flexible-scaling clusters
deviceClass: ssd
enableCrushUpdates: true
enableRBDStats: true
replicated:
size: 3
requireSafeReplicaSize: true
targetSizeRatio: 0.1
parameters:
compression_mode: "aggressive"
有効な Compression_mode の値については、以下を参照してください:
none:圧縮しない(デフォルト)。passive:クライアントが圧縮可能なデータであることを示唆したときに圧縮する。aggressive: クライアントからデータが圧縮不可能であるというヒントがない限り、圧縮を行う。 圧縮を有効にすることを推奨する。force:ヒントに関係なく、常に圧縮を試みる。
Red Hat OpenShift Webコンソールからデフォルトのプールで圧縮を有効にするには、以下の手順を実行する。
- [移動] ストレージ > データ基盤 > StorageSystems
- こちらを選択して StorageSystem を選択し、 BlockPools タブをクリックしてください
- プールのアクションメニューをクリックし、 ブロックプールの編集をクリックし、 圧縮チェックボックスを有効にします。
- 圧縮を有効にしたら、圧縮プールを参照する StorageClass を作成する。
詳細については、前述の StorageClass のカスタム例 を参照してください。 プール上の既存のPVCは影響を受けない。 プールへの新規書き込みのみが圧縮される。
暗号化
ODFは複数のレイヤーでデータアットレスト暗号化をサポートしており、個別に有効にすることができます。
- IBM Cloud インフラストラクチャの暗号化:物理NVMeドライブに対するフルディスク暗号化 - IBM Cloud によって管理されています。
- ODFクラスタ全体の暗号化:すべてのCeph OSDディスクは、dm-cryptを使用してデバイスレベルで暗号化されます。 ストレージクラスタのCRにある
encryption.clusterWide: trueを通じて有効化されます。 物理的なディスクの盗難から保護します。 - ODFのボリューム単位の暗号化:個々のRBDボリュームは LUKS2 で暗号化され、それぞれに独自のデータ暗号化キーが割り当てられます。 テナント間の分離と、きめ細かな鍵管理を実現します。
Red Hat OpenShift Kubernetes Service では、ODFは IBM Key Protect と統合され、クラスタ全体とボリュームごとの暗号化の両方の外部鍵管理サービスとして利用できる。 ボリュームごとの暗号化を有効にすると、ODFは自動的に -encrypted StorageClass のバリアント(たとえば ocs-storagecluster-ceph-rbd-encrypted )を作成する。
制限
次のような制限を考えてみよう。
Ceph CSIドライバは、暗号化されていないボリュームのスナップショットから暗号化ボリュームを作成できません。 この制限は、仮想マシンのワークロード作成に直接影響を及ぼします。 Red Hat OpenShift 仮想化機能では、事前にキャッシュされたゴールデンイメージからルートディスクをクローンすることで仮想マシンのワークロードを起動しますが、これらのゴールデンイメージは暗号化されていないボリュームとして保存されています。 ルートディスクに暗号化された StorageClass
を選択した場合、クローンは静かに失敗し、仮想マシンのワークロードは Provisioning で止まったままになります。
この制限を克服するには、ルート・ディスクに暗号化されていない StorageClass を使用します(クラスタ全体の暗号化は物理層でデータを保護します)。 ボリュームごとの暗号化が必要なデータディスクの場合は、暗号化された StorageClass を使用する2台目のディスクを追加します。 あるいは、 source: registry を使用して、暗号化されたPVCにオペレーティング・システム・イメージを直接インポートすることもできます。この場合、クローン・パスをバイパスし、そのPVCのスナップショットから再利用可能な暗号化データ・ソースを作成することができます。
IBM Key Protect での暗号化の設定についての詳細は、 Understanding Red Hat OpenShift Data Foundation を参照してください。
NVMeベアメタル環境におけるCephのパフォーマンスチューニング
Cephのデフォルト設定は、一般的なワークロードに合わせて最適化されています。 以下のパラメータ値は、 mx2d.metal.96x768 のベアメタルプロファイルで検証されており、同プロファイル上の VM ディスクワークロードにおいて、IOPSを大幅に向上させ、レイテンシを低減します。 別のベアメタルプロファイルを使用している場合は、これらを参考として、ご使用のプロファイルにおけるNVMeドライブの数や利用可能なCPU数に応じて値を調整してください。
| パラメーター | 推奨値 | 根拠 |
|---|---|---|
osd_memory_target |
8589934592 (8 GB) から 12884901888 (12 GB) へ |
各OSDが利用可能な BlueStore キャッシュの容量を増やします。 キャッシュを増やすと、読み取り増幅が軽減され、ランダム読み取りのIOPSが向上します。 デフォルトは4 GBですが、高密度のNVMeノードには不十分です。 |
osd_op_num_shards_ssd |
16 |
各シャードは、I/O 操作のキューを処理します。 コア数の多いベアメタルノードにおいて、シャード数を8から16に増やすことで、リクエストの並列処理能力が向上し、シャードごとのキューの深さが減少します。 |
osd_op_num_threads_per_shard_ssd |
2 |
シャードごとのワーカースレッドの数を制御します。 この値をシャード数とともに増やすと、NVMeドライブの同時I/Oスループットが向上します。 |
bluestore_prefer_deferred_size_ssd |
0 |
NVMe の遅延書き込みを無効にします。 書き込みの遅延は、WAL(Write-Ahead Log)を介した二重書き込みを引き起こし、オーバーヘッドが生じます。 NVMeドライブは、ランダム書き込み性能が十分に高速であるため、書き込みの遅延はかえって逆効果となります。 |
RocksDB rocksdb_write_buffer_size |
268435456 (256 MB) |
RocksDB のmemtableのサイズを拡大します。 書き込みバッファの容量を大きくすることで、( VM のプロビジョニングやスナップショット操作中に頻繁に発生する)メタデータの書き込みバーストをディスクへのフラッシュ前に吸収し、書き込みの停滞を軽減します。 |
RocksDB rocksdb_max_write_buffer_number |
16 から 32 へ |
メモリ内の書き込みバッファの最大数を制御します。 NVMeのデフォルト設定である64を16~32に減らすだけで十分であり、メモリへの負荷を軽減できます。 |
RocksDB rocksdb_max_background_jobs |
12 から 16 へ |
同時に実行されるコンパクションスレッドとフラッシュスレッドの数を制御します。 NVMeノードでこの値を大きく設定することで、持続的な書き込み負荷がかかった際に、 RocksDB のコンパクションがボトルネックになるのを防ぐことができます。 |
Ceph ツールボックス ポッドの ceph config set コマンドを使用して、各パラメータを適用します
TOOLS_POD=$(oc get pod -n openshift-storage -l app=rook-ceph-tools -o name)
# OSD memory and shard tuning
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd osd_memory_target 8589934592
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd osd_op_num_shards_ssd 16
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd osd_op_num_threads_per_shard_ssd 2
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd bluestore_prefer_deferred_size_ssd 0
# RocksDB tuning
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd rocksdb_write_buffer_size 268435456
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd rocksdb_max_write_buffer_number 16
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd rocksdb_max_background_jobs 12
適用後、設定が正常に反映されたことを確認してください:
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config dump | grep -E "osd_memory_target|osd_op_num_shards|bluestore_prefer_deferred|rocksdb"
ceph config set の変更を行う場合、OSDポッドを再起動する必要はありません。 Cephは設定を動的に適用します。 ただし、 BlueStore によるキャッシュの変更(osd_memory_target )は、各OSDポッドがリサイクルされて初めて完全に反映されます。 OSDポッドは、メンテナンス時間帯に、I/Oを中断することなく1つずつリサイクルすることができます。
ベンチマークの参考情報: 200台のVMと無制限のIOPSを備えた3ノードの mx2d.metal.96x768 クラスターでの内部テストの結果、16シャード、8 GBのOSDメモリ、および256 MBの RocksDB 書き込みバッファの組み合わせにより、約 194,000 IOPS および758 MB/sのスループットを達成したことが確認されました。
シャード数を8から16に増やすと、すべてのテスト構成において、IOPSの向上幅が常に最大となりました。
バックアップとデータ保護
バックアップとディザスタリカバリは、本番の仮想化環境にとって非常に重要である。 Red Hat OpenShift のODFによる仮想化において、バックアップは現在Ceph RBDに依存しています VolumeSnapshots。 各バックアップは、永続ボリュームのフルポイントインタイムスナップショットを作成する。
スナップショットベースのバックアップ
ODFは、Ceph RBDボリュームの Kubernetes VolumeSnapshots。 ディスクのスナップショットを取るには、以下のコマンドを使う:
oc apply -f - <<EOF
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: my-vm-snapshot
spec:
volumeSnapshotClassName: ocs-storagecluster-rbdplugin-snapclass
source:
persistentVolumeClaimName: my-vm-data-disk
EOF
VolumeSnapshots コピー・オン・ライトで、ほぼ即座に作成できる。 これらを使用して、仮想マシンのワークロードを以前の状態に復元したり、ディスクをクローンしたりすることができます。 Red Hat OpenShift Virtualizationには、構成やすべてのディスクを含む仮想マシンのワークロードの状態全体を、1回の操作でキャプチャする組み込みの VM スナップショットおよび復元APIも備わっています。
アプリケーション一貫性スナップショットのための仮想マシンのワークロードの静止
実行中の仮想マシンのワークロードのスナップショットを撮影する際は、ディスク上のデータが一貫性のある状態である必要があります。 静止させることなく、スナップショットは、部分的に書き込まれたトランザクション、ダーティバッファ、インフライトI/Oなど、その瞬間にディスク上にあるものをすべてキャプチャする。 この処理により、クラッシュ一貫性のあるスナップショットが生成されますが、復元時にはアプリケーションレベルの復旧が必要になる場合があります。
アプリケーションの一貫性を保ったスナップショットを作成するには、スナップショット作成前にゲストファイルシステムをフリーズし、作成後にフリーズを解除してください。 Red Hat OpenShift の仮想化機能では、QEMUゲストエージェントを使用してこのプロセスを自動化します。
スナップショットコントローラがQEMUゲストエージェントを検出します。 スナップショットを撮影する前に、 guest-fsfreeze-freeze コマンドを実行して、すべてのファイルシステムのI/Oを停止させます。ファイルシステムが凍結されている間に、 VolumeSnapshot が取得されます。 スナップショットが完了したら、 guest-fsfreeze-thaw コマンドでI/Oを再開する。 スナップショットのステータスは、達成された一貫性レベルを示しています。
各ステータスの意味については、次の表をご覧ください。
| 表示 | 意味 |
|---|---|
| GuestAgent | ゲストエージェントはファイルシステムのフリーズに成功しました。 スナップショットはアプリケーションと一貫性がある。 |
| NoGuestAgent | ゲストエージェントがインストールされていないか、準備ができていない。 スナップショットはクラッシュコンシステントにのみ対応する。 |
| QuiesceFailed | ファイルシステムのフリーズを試みましたが、失敗しました。 スナップショットはアプリケーションと整合していない可能性がある。 |
すべての本番用VMについては、QEMUゲストエージェントのインストールが推奨されます。 Linux のゲストでは、次のコマンドを実行してください。
# RHEL / CentOS / Fedora
sudo dnf install -y qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent
# Ubuntu / Debian
sudo apt-get install -y qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent
Windows ゲストの場合は、QEMU ゲストエージェントサービスを含む VirtIO ドライバパッケージをインストールします。
アプリケーション向けのカスタムフリーズ/スローフック:ファイルシステムのフリーズに加えて、さらなるクワイエシングが必要なデータベースやその他のステートフルアプリケーションについては、ゲスト仮想マシンのワークロード内の /etc/qemu-ga/fsfreeze-hook.d/ にカスタムフックスクリプトを配置してください。 これらのスクリプトは、ファイルシステムが凍結される前に「 freeze 」引数とともに、またファイルシステムの凍結が解除された後に「
thaw 」引数とともに、ゲストエージェントによって自動的に実行されます。 フックの実行ログは /var/log/qga-fsfreeze-hook.log に書き込まれる。
例えば、次のような PostgreSQL フリーズフックを /etc/qemu-ga/fsfreeze-hook.d/postgresql.sh :
#!/bin/bash
case "$1" in
freeze)
sudo -u postgres psql -c "SELECT pg_backup_start('snapshot');" 2>/dev/null || true
;;
thaw)
sudo -u postgres psql -c "SELECT pg_backup_stop();" 2>/dev/null || true
;;
esac
VMware 比較:この例は、アプリケーションの一貫性を保ったスナップショットを作成するために「 VMware Tools」で使用される、 VMware の「pre-freeze」および「post-thaw」スクリプトに類似しています。 QEMUのゲストエージェントは、スナップショット時のクワイエスシングにおいて、 VMware ツールと同じ役割を果たします。
ブロック・トラッキングの制限を変更
変更ブロック追跡(Changed Block Tracking)は、前回のバックアップ以降に変更されたブロックのみを特定することで、増分バックアップを可能にします。 VMware のVADP( vStorage データ保護用API)は、この仕組みを利用して効率的な増分バックアップを実現しています。
CBTは、 Red Hat OpenShift 仮想化上のODFおよびCeph RBDでは利用できません。 現在のバックアップはフルスナップショットに依存しているため、バックアップウィンドウが長くなったり、ストレージ使用量が増加したりする可能性があります。
CBTの開発は複数のレベルで進行中である:
| レイヤー | ステータス | 詳細 |
|---|---|---|
| Kubernetes CSI CBT API | アルファ ( Kubernetes 1.31 ) | スナップショット間で変更されたブロックを識別するため、 SnapshotMetadata CSIサービスを導入。 ブロックボリュームのみ。 |
| KubeVirt 増分バックアップ | 開発 | VEP 25は QEMUレベルのCBTをターゲットとして、 VM の増分バックアップを行う。 Alpha 予定 KubeVirt 1.7. |
| Ceph RBD | 基礎となる能力が存在する | Cephは差分スナップショット(rbd diff )をネイティブにサポートしていますが、CSI CBT APIとの統合は実装されていません。 |
Ceph RBDは、スナップショット間の変更されたブロックを特定する基盤となる rbd diff の機能をサポートしていますが、この機能は現時点では Kubernetes のCSI Changed Block Tracking APIを通じて公開されていません。 フルスタック(CSI CBT API + Ceph CSIドライバサポート + KubeVirt 統合)が整うまでは、ブロックレベルでの増分バックアップは利用できない。
バックアップ・ソリューション
いくつかのバックアップベンダーは、現在のスナップショットベースのモデル内で動作する、 Red Hat OpenShift 仮想化向けのソリューションを提供しています:
- Veeam® Kasten: Kubernetes- Red Hat OpenShift ODFの仮想化サポートと増分スナップショット機能を備えたネイティブ・データ保護。 詳細については、 Veeam Kastenリファレンス・アーキテクチャを参照してください。
- Trilio for Kubernetes : Red Hat OpenShift ODF統合による仮想化ワークロードのバックアップとリカバリ。 詳細については、 Trilio Red Hat OpenShift 仮想化サポートを参照してください。
- Red Hat OpenShift 仮想化をサポートする Veritas NetBackup: Enterprise バックアップ。 詳細については、以下を参照してください。 NetBackup- 包括的なエンタープライズデータ保護。
VMware マイグレーションに関する推奨事項
現在の VMware 環境がCBTベースの増分バックアップに依存している場合、以下の推奨事項を検討してください:
- フルスナップショットバックアップを計画する。 増分バックアップではなく、 VolumeSnapshots のフルバックアップに基づいて、バックアップウィンドウとストレージ要件を評価してください。
- Kubernetes ネイティブバックアップツールを評価する。 Veeam KastenおよびTrilioは、 Kubernetes および Red Hat OpenShift の仮想化環境向けに設計されており、現在のスナップショットモデル内で動作します。
- Cephのスナップショット効率を使用する。 Ceph RBDのスナップショットはコピー・オン・ライト方式を採用しており、スナップショット作成後は変更されたブロックのみを保存するため、フルコピーに比べてスナップショットの継続的な保存がより効率的になります。
Day-2 業務
IBM Cloud Red Hat OpenShift Kubernetes Service に ODF を導入したら、 Day-2 の運用に注力してください。 これらの運用には、ストレージインフラストラクチャを健全かつ高性能な状態に保ち、常に最新の状態を維持し、変化するワークロードの需要に対応できるよう、継続的な管理、監視、および保守作業が含まれます。 本ガイドでは、 Day-2 の運用における以下の3つの重要な側面に焦点を当てています:
- モニター
- のアップグレード
- 展開
ODFとCephの健全性を監視する
ODFストレージクラスタの定期的な監視は、可用性とパフォーマンスを維持するために不可欠です。 次のセクションでは、主要なコマンドとその出力について説明します。
Ceph全体の健全性をチェックする
ODFの健全性を保つ上で最も重要なコマンド:
TOOLS_POD=$(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name)
oc exec -n openshift-storage ${TOOLS_POD} -- ceph status
出力の解釈:
cluster:
id: a1b2c3d4-...
health: HEALTH_OK ← What you want to see
services:
mon: 3 daemons ← Should be 3 (quorum)
mgr: 1 active ← Manager daemon running
osd: 24 osds: 24 up, 24 in ← All OSDs healthy (should match your NVMe count)
data:
pools: 4 pools, 353 pgs
objects: 12.5k objects, 48 GiB
usage: 152 GiB used, 69 TiB / 70 TiB avail ← Cluster usage
健康状態:
| ステータス | 意味 | アクション |
|---|---|---|
HEALTH_OK |
すべてのコンポーネントが正常に動作し、すべてのデータが完全に複製されている。 | 特になし。 |
HEALTH_WARN |
重要ではない問題。 クラスターは稼働しているが、何か注意が必要だ。 | ceph health detail。 よくある原因:OSDがほぼフル、PGのリカバリーが劣化、MON間のクロックスキュー。 |
HEALTH_ERR |
重要な問題だ。 データの可用性や耐久性が危険にさらされる可能性がある。 | すぐに調査してください。 よくある原因OSDがダウンしている、PGが回復していない、クラスタが満杯。 |
詳細な警告を見るには、以下のコマンドを使用する:
oc exec -n openshift-storage ${TOOLS_POD} -- ceph health detail
OSDステータスの確認
OSDはストレージデーモンであり、NVMeドライブ1台につき1つのデーモンが存在します。 すべてのOSDは up 、 in の状態でなければならない。 ステータスを確認するには、次のコマンドを実行してください。
oc exec -n openshift-storage ${TOOLS_POD} -- ceph osd tree
以下の情報を確認する。
- すべてのOSDについて
up:OSDに「down」と表示される場合、NVMeドライブまたはそのデーモンに問題があります。 - すべてのOSD
in:out状態のOSDは、故障の可能性があるため、Cephがデータ配置の対象から除外したことを意味します。 - 重みの一貫性:同一ノード上のすべてのOSDは、同一の重みを持たなければならない。
クラスタの使用状況を確認する
クラスタの使用状況を確認するには、次のコマンドを実行してください。
oc exec -n openshift-storage ${TOOLS_POD} -- ceph df
重要な列:
- RAW USED:クラスタ全体の使用量。 最適な動作のためには70%以下に保つこと。
- プールごとの最大利用可能容量*:レプリケーションを考慮した上で、プールに書き込むことができる追加データの量。
プール統計の確認
プールの統計情報を確認するには、次のコマンドを実行してください。
oc exec -n openshift-storage ${TOOLS_POD} -- ceph osd pool stats
このコマンドは、プールごとのリアルタイムのI/O統計情報を出力し、どのプールに負荷がかかっているかを特定するのに役立ちます。
Red Hat OpenShift ウェブ・コンソールで監視
ODFは Red Hat OpenShift Webコンソールと統合され、以下の情報を提供します。
- 「ストレージ > データ基盤」ダッシュボードには、健全性ステータス、容量、およびパフォーマンス指標が表示されます。
- [監視] > [アラート] では、Ceph のヘルス警告に関する自動アラートが表示されます(例:
CephClusterNearFull、CephOSDDown、CephPGNotScrubbed)。 - 「Observe」>「Metrics」で、Ceph メトリクスに対する Prometheus ベースのクエリを確認します(例:
ceph_osd_op_r_latency、ceph_osd_op_w_latency)。
ODFのアップグレード Red Hat OpenShift Kubernetes Service
IBM Cloud Red Hat OpenShift Data Foundation (ODF) アドオンは、同一のマイナーリリース内での z-stream の更新を自動的に適用します。 これらのアップデートは IBM Cloud を通して管理される。
ただし、メジャーバージョンおよびマイナーバージョンのアップグレード(例: 4.18 → 4.19 )は自動的には行われません。 データの安全性とクラスタの安定性を確保するため、手動アップグレードの手順に従ってください。
Red Hat OpenShift Kubernetes Service クラスタ上でのODFのアップデートは、主に2つのフェーズで構成されます。
-
ODFワーカーノードをアップグレードまたは交換する。
- ODFは、ストレージコンポーネントをホストする専用またはラベル付きのワーカーノードに依存している。
- メジャーまたはマイナー・アップグレードの際には、これらのワーカー・ノードをアップグレードまたは交換して、ターゲットの Red Hat OpenShift とODFのバージョンに合わせる必要があります。
- このプロセスは、ODFポッド(Ceph OSD、MON、マネージャなど)が正しく再スケジュールされ、データを失うことなく機能し続けることを保証するのに役立ちます。
- ストレージの可用性を維持するため、この手順を開始する前に、十分な容量とノードの正常性を確認してください。
-
ODFアドオンを更新する。
- ワーカーノードをアップグレードまたは交換した後、ODFアドオンを更新します。
- このステップでは、ODFオペレータ、CSIドライバ、および関連コンポーネントをターゲットバージョンにアップグレードします。
- アドオンの更新が完了すると、クラスタは自動的にODFリソースを調整し、必要な変更を適用します。
アップグレード後の検証を実行し、以下を確認してください:
- ODFとCephクラスタの健全性
- StorageClasses 可用性
- アプリケーションによるPVCの読み書きに成功
詳細については、 VPCクラスタでのODFの更新を 参照してください。
ODFストレージの拡張について Red Hat OpenShift Kubernetes Service
したがって、ワークロードの拡大やストレージ需要の増加に伴い、ストレージインフラストラクチャを拡張することが不可欠となります。 ODFの拡張は、実行中のアプリケーションを中断することなく、ストレージ容量を増やし、パフォーマンスを向上させ、回復力を維持することを可能にする重要な2日目の操作です。
IBM Cloud Red Hat OpenShift Kubernetes Service 環境では、拡張には通常、ストレージ・ワーカー・プールの拡張が伴う。 この操作は最小限のダウンタイムで実行されるため、ストレージクラスタのシームレスな拡張が可能になります。
-
VPCクラスターにワーカーノードを追加します。 ストレージクラスターが3つのアベイラビリティゾーンにまたがるマルチゾーンクラスターの場合、ゾーン間のバランスを維持するために、ワーカーノードを3の倍数(たとえば3、6、9など)で追加してください。 フレキシブルスケーリングが有効になっているシングルゾーンクラスターの場合、ノードを1つずつ追加することができます。
-
ノードを追加したら、それらをODFに登録してください。 クラスタ内のすべてのワーカーノードで ODF が実行されている場合、新しいノードはストレージトポロジーに自動的に追加されます。 ODFが一部のワーカーノードでのみ実行されている場合は、次の手順に進んでください。
-
クラスタ内のすべてのワーカーノードでODFが実行されている場合、新しいワーカーノードは自動的にODFストレージクラスタトポロジに追加されます。 ODFがワーカーノードの一部でのみ実行される場合は、 OcsCluster カスタムリソース内で、
<workerNodes>のプライベートパラメータを指定してください。 カスタムリソース定義を編集して、新しいワーカーノードの名前を ODF 配置に追加します。 「 OcsCluster 」カスタムリソースを次のように変更してください:-
ocscluster を検索
oc get ocscluster -
ocscluster カスタムリソースファイルを編集し、新しいワークノードを追加する
oc edit ocscluster <ocs cluster name> -o yaml -
OcsCluster のカスタムリソースファイルを保存して、クラスターに再適用してください。
-
-
OcsCluster のカスタムリソースにある 'numOfOsd' の値を大きくすることで、OCSが新しく追加されたワーカーノードにODFコンポーネントをデプロイし、ストレージクラスター内に追加のOSDをプロビジョニングできるようになります。
'numOfOsd' への調整は、ノードあたりの OSD ディスク数と、追加されたノード数の両方に依存します。 たとえば、各ノードにOSD専用として8台のNVMeディスクが搭載されている場合、ノードを3台追加すると 'numOfOsd' は8増加し、6台追加すると16増加します。
-
次のコマンドを実行して、結果を確認してください:
oc exec -n openshift-storage ${TOOLS_POD} -- ceph osd tree -
新しいワーカーノードが追加され、各ゾーンに均等に分散されていること(マルチゾーンクラスターの場合)、あるいは個別のホストバケットとして表示されていること(シングルゾーンのフレキシブルスケーリングクラスターの場合)、および各ノードに割り当てられた対応する数のOSDを確認してください。
詳細については、「 VPC クラスターにワーカーノードを追加して ODF を拡張する 」を参照してください。
柔軟なスケーリング
IBM Cloud のODFアドオンは、クラスタ構成に応じて異なるフェイルドメイントポロジーを使用します:
- マルチゾーンクラスター(3つのアベイラビリティゾーン): 障害ドメインは「
zone」に設定されています。 OSDは、ゾーン間のデータレプリケーションと高可用性を維持するため、3の倍数でプロビジョニングされ、ゾーンごとに1セットが割り当てられます。 ゾーンのバランスを保つためには、ストレージクラスタは3の倍数だけ拡張する必要があります。 - シングルゾーンのクラスター、またはアベイラビリティゾーンが3つ未満のクラスター: 柔軟なスケーリングが自動的に有効になります。 障害ドメインは「
host」に設定されており、これは個々のノードがそれぞれ独立した障害ドメインであることを意味します。 ノードは1つずつ追加でき、ストレージをきめ細かく拡張できます。
ODF 4.21 以降、柔軟なスケーリング動作は、初期導入時にクラスタのトポロジに基づいて自動的に決定され、その後変更することはできません。
シングルゾーンまたはフレキシブル・スケーリングの展開環境では、 replica-3 プールは、任意の1台のホストが失われても稼働し続けます。 マルチゾーン展開では、 replica-3 プールは、ゾーン全体が失われた場合でも稼働し続けます。 ODFを本番環境で展開する前に、クラスタのトポロジーおよびそれに関連する耐障害性が、レジリエンス要件を満たしているかどうかを評価してください。
アドオンパラメータの全一覧およびコンソールを使用したインストール手順については、「 VPCクラスターへの OpenShift Data Foundationのデプロイ 」を参照してください。
ノード拡張時のパフォーマンス: フレキシブルスケーリング対応のODFクラスタにノードを追加すると、Cephのデータリバランスがトリガーされます。 以下で説明する内部テストでは、IOPSとスループットは安定していたものの、書き込みレイテンシが一時的に増加した。 50,000 IOPSの負荷下で、100台のVMを稼働させる3ノードのクラスタを用いた社内テストにおいて、以下の結果が得られました:
| ステージ | IOPS | スループット | 読み取り待ち時間 | 書き込み待ち時間 |
|---|---|---|---|---|
| ノードを追加する前に | 50,000 | 195 MB/s | 0.69 ms | 1.37 ms |
| ノードの追加中 | 50,000 | 195 MB/s | 1.24 ms | 2.22 ms |
| ノードを追加した後 | 50,000 | 195 MB/s | 0.67 ms | 1.22 ms |
リバランスが完了すると、書き込みレイテンシは基準値に戻ります。 ワークロードが書き込みレイテンシの急上昇に敏感な場合は、 VM のアクティビティが低い時間帯にノードの追加を計画してください。
まとめとベストプラクティス
- ほとんどの Red Hat OpenShift 仮想化導入には
ocs-storagecluster-ceph-rbd-virtualizationを使用する。 - 特定の要件がある場合にのみ、カスタム StorageClass。
- カスタム CephBlockPools, を作成する場合は、常に
targetSizeRatio(例えば、0.1)を設定し、 StorageClass に必要なimageFeatures(特にexclusive-lock)をすべて含めます。 - RBD用のイレイジャー符号化プールは、開発者向けプレビュー機能(ODF 4.20 以上)であり、本番環境での使用はサポートされていません。 すべての本番環境の VM ストレージには、レプリケートされたプール( rep2 または rep3 )を使用してください。
- 使用する前に、必ず非運用環境でカスタム StorageClasses を検証してください。
- 本番環境では、 VM ディスクに汎用 RBD StorageClasses を使用することは避けてください。
- 暗号化された VM ストレージの場合、ルート・ディスクには暗号化されていない StorageClass を使用し、データ・ディスクには暗号化されたバリアントを使用する。
- クラスターの使用率が70%を下回るよう、容量を計画してください。 マルチゾーンクラスターの場合、ODFノードは3の倍数で拡張してください。シングルゾーンクラスターおよびフレキシブルスケーリングクラスターでは、きめ細かく拡張することができます。
- QEMUゲストエージェントをすべてのプロダクションVMにインストールし、アプリケーションと一貫性のあるスナップショットを作成します。
- Cephの健全性を定期的に監視し、問題が拡大する前に
HEALTH_WARN、迅速に調査します。 - すべてのベアメタルNVMe本番環境の導入には、「 パフォーマンス 」リソースプロファイルを使用してください。 「Balanced」プロファイルでは、高密度NVMeノードに対して十分なCephデーモンリソースが提供されず、ハードウェアが飽和状態に達する前にIOPSが制限されてしまいます。
- ODFをベアメタル環境に導入した後、 VM のディスクワークロードにおけるIOPSを最大化するために、推奨されるCeph NVMeチューニングパラメータ(
osd_memory_target、osd_op_num_shards_ssd、 RocksDB の書き込みバッファ設定)を適用してください。 「 NVMe ベアメタル向けの Ceph パフォーマンスチューニング 」を参照してください。 - StorageSystem の作成時にノードを選択する際は、クラスタ内のすべてのノードではなく、専用ストレージワーカープール内のノードのみを選択してください。 すべてのノードを選択すると、
nodeSelectorを含まない LocalVolumeSet が作成されます。これにより、今後追加される非ODFワーカーノードが自動的に検出され、手動でのクリーンアップが必要になります。 - シングルゾーンおよび fewer-than-3-AZ クラスターでは、柔軟なスケーリングが自動的に有効になります。これらのデプロイメントは
hostのフェイルドメインを使用しており、きめ細かなスケーリングが可能です。 マルチゾーンクラスターは、zoneのフェイルドメインを使用し、3の倍数で拡張する必要があります。 柔軟なスケーリングの挙動は、初期導入時に固定され、その後変更することはできません。