OpenShift ワークロード用の OpenShift Data Foundation Disaster Recovery の設定
テクノロジープレビュー: このソリューションはテクノロジープレビュー機能であり、運用環境での実行を意図したものではありません。
概要
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに対するご意見をお聞かせください。ドキュメントの改善点があれば、ぜひお知らせください。
フィードバックを送信するには、Bugzilla チケットを作成します。
- Bugzilla の Web サイトに移動します。
- Component セクションで、documentation を選択します。
- Description フィールドに、ドキュメントの改善に向けたご提案を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- Submit Bug をクリックします。
第1章 OpenShift Data Foundation 災害復旧の概要
障害復旧 (DR) は、自然災害または人為的災害からビジネスクリティカルなアプリケーションを回復し、継続する機能です。これは、重大な有害事象の発生時に事業の継続性を維持するために設計されている、主要な組織における事業継続ストラテジー全体の設定要素です。
OpenShift Data Foundation の DR 機能は、複数の Red Hat OpenShift Container Platform クラスターにわたる DR を可能にし、次のように分類されます。
Metro-DR
Metro-DR は、データセンターが利用できない場合でも、データを失うことなくビジネスの継続性を保証します。パブリッククラウドでは、これらはアベイラビリティーゾーンの障害からの保護に似ています。
Regional-DR
Regional-DR は、地理的な地域が利用できない場合でもビジネス継続性を確保し、予測可能な量のデータの損失を受け入れます。パブリッククラウドでは、これはリージョンの障害からの保護と似ています。
Metro-DR のゾーン障害と Regional-DR のリージョン障害は、通常、目標復旧時点 (RPO) と 目標復旧時間 (RTO) という用語を使用して表現されます。
- RPO は、永続データのバックアップまたはスナップショットを作成する頻度の尺度です。実際には、RPO は、停止後に失われるか、再入力する必要があるデータの量を示します。
- RTO は、企業が許容できるダウンタイムの量です。RTO は、ビジネスの中断が通知されてから、システムが回復するまでにどれくらいかかるか? という質問に答えます。
このガイドの目的は、ある OpenShift Container Platform クラスターから別のクラスターにアプリケーションをフェイルオーバーし、同じアプリケーションを元のプライマリークラスターに再配置するために必要な災害復旧の手順とコマンドについて詳しく説明することです。
第2章 障害復旧サブスクリプションの要件
Red Hat OpenShift Data Foundation でサポートされる障害復旧機能では、障害復旧ソリューションを正常に実装するために以下の前提条件をすべて満たす必要があります。
- 有効な Red Hat OpenShift Data Foundation Advanced エンタイトルメント
- 有効な Red Hat Advanced Cluster Management for Kubernetes サブスクリプション
ソースまたは宛先としてアクティブレプリケーションに参加している PV を含む Red Hat OpenShift Data Foundation クラスターには、OpenShift Data Foundation Advanced エンタイトルメントが必要です。このサブスクリプションは、ソースクラスターと宛先クラスターの両方でアクティブにする必要があります。
OpenShift Data Foundation のサブスクリプションの仕組みを確認するには、OpenShift Data Foundation subscriptions に関するナレッジベースの記事 を参照してください。
第3章 OpenShift Data Foundation の地域 DR ソリューション
3.1. Regional-DR ソリューションのコンポーネント
Regional-DR は Red Hat Advanced Cluster Management for Kubernetes と OpenShift Data Foundation コンポーネントで設定され、Red Hat OpenShift Container Platform クラスター間でアプリケーションとデータの移動を提供します。
Red Hat Advanced Cluster Management for Kubernetes
Red Hat Advanced Cluster Management (RHACM)) は、複数のクラスターとアプリケーションのライフサイクルを管理する機能を提供します。したがって、マルチクラスター環境でのコントロールプレーンとして機能します。
RHACM は 2 つの部分に分かれています。
- RHACM ハブ: マルチクラスターコントロールプレーンで実行されるコンポーネントが含まれます。
- マネージドクラスター: マネージドクラスターには、マネージドクラスターで実行されるコンポーネントが含まれます。
この製品の詳細については、RHACM のドキュメント および RHACM のアプリケーションの管理 を参照してください。
OpenShift Data Foundation
OpenShift Data Foundation は、OpenShift Container Platform クラスターでステートフルなアプリケーション用のストレージをプロビジョニングし、管理する機能を提供します。
OpenShift Data Foundation はストレージプロバイダーとして Ceph をベースとしていて、そのライフサイクルは OpenShift Data Foundation コンポーネントスタックの Rook によって管理されます。Ceph-CSI は、ステートフルなアプリケーション用の永続ボリュームのプロビジョニングと管理を提供します。
OpenShift Data Foundation スタックは、以下の災害復旧機能で強化されました。
- OpenShift Data Foundation インスタンス (クラスター) 間でのミラーリングのために RBD ブロックプールを有効にします。
- RBD ブロックプール内の特定のイメージをミラーリングする機能
- Persistent Volume Claim (PVC) ミラーリングごとに管理する csi アドオンを提供します
OpenShift DR
OpenShift DR は、RHACM を使用して管理される一連のピア OpenShift クラスター全体でステートフルアプリケーションを設定および管理するための一連のオーケストレーターであり、永続ボリューム上のアプリケーションの状態のライフサイクルを調整するためのクラウドネイティブインターフェイスを提供します。これには以下が含まれます。
- OpenShift クラスター全体でアプリケーションとその状態関係を保護する
- アプリケーションとその状態をピアクラスターにフェイルオーバーする
- アプリケーションとその状態を以前にデプロイされたクラスターに再配置する
OpenShift DR は 3 つのコンポーネントに分類されます。
- ODF マルチクラスターオーケストレーター: マルチクラスターコントロールプレーン (RHACM ハブ) にインストールされ、メトロおよびリージョナル DR 関係のために OpenShift Data Foundation クラスターの設定とピアリングを調整します。
- OpenShift DR Hub Operator: ハブクラスターに ODF Multicluster Orchestrator インストールの一部として自動的にインストールされ、DR 対応アプリケーションのフェイルオーバーまたは再配置を調整します。
- OpenShift DR Cluster Operator : Metro および Regional DR 関係の一部である各管理対象クラスターに自動的にインストールされ、アプリケーションのすべての PVC のライフサイクルを管理します。
3.2. Regional-DR デプロイメントワークフロー
このセクションでは、Red Hat OpenShift Data Foundation の最新バージョンを使用して、2 つの異なる OpenShift Container Platform クラスター間で Regional-DR 機能を設定およびデプロイするために必要な手順の概要を説明します。Red Hat Advanced Cluster Management (RHACM) をデプロイするには、2 つの管理対象クラスターに加えて、3 つ目の OpenShift Container Platform クラスターが必要になります。
インフラストラクチャーを設定するには、指定した順序で以下の手順を実行します。
- DR ソリューションの一部であるハブ、プライマリー、およびセカンダリー Openshift Container Platform クラスターの 3 つの要件が満たされていることを確認します。Regional-DR を有効にするための要件を参照してください。
- OpenShift Data Foundation operator をインストールし、プライマリーおよびセカンダリーのマネージドクラスターにストレージシステムを作成します。管理対象クラスターでの OpenShift Data Foundation クラスターの作成 を参照してください。
- ハブクラスターに ODF マルチクラスターオーケストレーターをインストールします。Hub クラスターへの ODF Multicluster Orchestrator のインストール を参照してください。
- ハブ、プライマリー、およびセカンダリークラスター間の SSL アクセスを設定します。クラスター間での SSL アクセスの設定 を参照してください。
- Web コンソールを有効にします。マルチクラスター Web コンソールの有効化
プライマリークラスターとセカンダリークラスター全体で DR 保護を必要とするアプリケーションで使用する DRPolicy リソースを作成します。Creating Disaster Recovery Policy on Hub cluster を参照してください。
注記複数のポリシーが存在する場合があります。
災害復旧ソリューションをテストするには:
- RHACM コンソールを使用してサンプルアプリケーションを作成します。サンプルアプリケーションの作成 を参照してください。
- マネージドクラスター間でサンプルアプリケーションを使用して、フェイルオーバーと再配置操作をテストします。アプリケーションのフェイルオーバー とアプリケーションの再配置 を参照してください。
3.3. Regional-DR を有効にするための要件
Red Hat OpenShift Data Foundation でサポートされる障害復旧機能では、障害復旧ソリューションを正常に実装するために以下の前提条件をすべて満たす必要があります。
相互にネットワーク接続が可能な 3 つの OpenShift クラスターが必要です。
- Red Hat Advanced Cluster Management for Kubernetes (RHACM Operator) がインストールされている ハブクラスター。
- OpenShift Data Foundation がインストールされているプライマリー 管理対象クラスター。
- OpenShift Data Foundation がインストールされている セカンダリーマネージドクラスター。
RHACM Operator と Multiclusterhub がハブクラスターにインストールされていることを確認します。手順については、RHACM インストールガイド を参照してください。
- OpenShift 認証情報を使用して RHACM コンソールにログインします。
RHACM コンソール用に作成されたルートを見つけます。
$ oc get route multicloud-console -n open-cluster-management -o jsonpath --template="https://{.spec.host}/multicloud/clusters{'\n'}"
出力例:
https://multicloud-console.apps.perf3.example.com/multicloud/clusters
- 出力リンクをブラウザーで開き、OpenShift 資格情報でログインします。インポートされた local-cluster が表示されるはずです。
アプリケーショントラフィックのルーティングとリダイレクトが適切に設定されていることを確認するのは、ユーザーの責任です。アプリケーショントラフィックルートの設定と更新は現在サポートされていません。
- RHACM コンソールを使用して、プライマリーマネージドクラスター および セカンダリーマネージドクラスター をインポートまたは作成していることを確認します。手順については、クラスターの作成 および ターゲットのマネージドクラスターをハブクラスターにインポートする を参照してください。
マネージドクラスターには、重複しないネットワークが必要です。
Submariner アドオンを使用してマネージド OpenShift クラスターとサービスネットワークを接続するには、マネージドクラスターごとに次のコマンドを実行して、2 つのクラスターに重複しないネットワークがあることを検証する必要があります。
注記RHACM 2.5 クラスターアドオンを使用してインストールされたバージョン 0.12 の Submariner は、OpenShift OVNKubernetes CNI プラグインをサポートしません。RHACM 2.5 リリースノート を参照してください。
$ oc get networks.config.openshift.io cluster -o json | jq .spec
プライマリークラスターの出力例:
{ "clusterNetwork": [ { "cidr": "10.5.0.0/16", "hostPrefix": 23 } ], "externalIP": { "policy": {} }, "networkType": "OpenShiftSDN", "serviceNetwork": [ "10.15.0.0/16" ] }
二次クラスターの出力例:
{ "clusterNetwork": [ { "cidr": "10.6.0.0/16", "hostPrefix": 23 } ], "externalIP": { "policy": {} }, "networkType": "OpenShiftSDN", "serviceNetwork": [ "10.16.0.0/16" ] }
詳細は、Submariner add-ons documentation ドキュメントを参照してください。
マネージドクラスターが
Submariner アドオン
を使用して接続できる必要があります。クラスターおよびサービスネットワークに重複しない範囲が設定されていることを確認した後に、RHACM コンソールおよびCluster sets
を使用して、各マネージドクラスターにSubmariner アドオン
をインストールします。手順は、Submariner のドキュメント を参照してください。注意マネージドクラスターのクラスターネットワークとサービスネットワークが重複しているため、Globalnet を有効にするを選択しないでください。
Globalnet の
使用は、現在、Regional Disaster Recovery ではサポートされていません。次に進む前に、クラスターおよびサービスネットワークが重複していないことを確認します。
3.4. 管理対象クラスターでの OpenShift Data Foundation クラスターの作成
2 つの OpenShift Container Platform クラスター間のストレージレプリケーションを設定するには、OpenShift Data Foundation Operator をインストールした後に OpenShift Data Foundation ストレージシステムを作成します。
インフラストラクチャー (AWS、VMware、BM、Azure など) に固有の OpenShift Data Foundation デプロイメントガイドと手順を参照してください。
手順
各管理対象クラスターに最新の OpenShift Data Foundation クラスターをインストールして設定します。
OpenShift Data Foundation のデプロイメントについては、インフラストラクチャー固有のデプロイメントガイド (AWS、VMware、ベアメタル、Azure など) を参照してください。
以下のコマンドを使用して、各管理対象クラスターで OpenShift Data Foundation が正常にデプロイされたことを検証します。
$ oc get storagecluster -n openshift-storage ocs-storagecluster -o jsonpath='{.status.phase}{"\n"}'
Multicloud Gateway (MCG) の場合:
$ oc get noobaa -n openshift-storage noobaa -o jsonpath='{.status.phase}{"\n"}'
ステータス結果が Primary managed cluster と Secondary managed cluster の両方のクエリーに対して
Ready
である場合は、次の手順に進みます。
OpenShift Web コンソールで、Installed Operators → OpenShift Data Foundation → Storage System → ocs-storagecluster-storagesystem
→ Resources に移動し、StorageCluster
の Status が Ready
で、横に緑色のチェックマークがあることを確認します。
3.5. OpenShift Data Foundation Multicluster Orchestrator Operator のインストール
OpenShift Data Foundation のマルチクラスターオーケストレーターは、ハブクラスターの OpenShift Container Platform の OperatorHub からインストールされるコントローラーです。
手順
- ハブクラスター で OperatorHub に移動し、キーワードフィルターを使用して ODF Multicluster Orchestrator を検索します。
- ODF Multicluster Orchestrator タイルをクリックします。
すべてのデフォルト設定をそのままにして、Install をクリックします。
Operator のリソースが
openshift-operators
プロジェクトにインストールされ、すべてのnamespace で利用できることを確認してください。注記ODF Multicluster Orchestrator
レーターは、依存関係として RHACM ハブクラスターに Openshift DR ハブ Operator もインストールします。Operator Pod が
Running
状態であることを確認します。OpenShift DR Hub Operator
も同時にopenshift-operators
namespace にインストールされます。$ oc get pods -n openshift-operators
出力例:
NAME READY UP-TO-DATE AVAILABLE AGE odf-multicluster-console-6845b795b9-blxrn 1/1 Running 0 4d20h odfmo-controller-manager-f9d9dfb59-jbrsd 1/1 Running 0 4d20h ramen-hub-operator-6fb887f885-fss4w 2/2 Running 0 4d20h
3.6. クラスター全体での SSL アクセスの設定
プライマリークラスターとセカンダリークラスター 間のネットワーク (SSL) アクセスを設定して、メタデータを代替クラスターのマルチクラウドゲートウェイ (MCG) object bucket
に安全なトランスポートプロトコルを使用して格納し、ハブクラスター に格納してオブジェクトバケットへのアクセスを検証できるようにします。
すべての OpenShift クラスターが環境の署名済みの有効な証明書セットを使用してデプロイされる場合は、このセクションを省略できます。
手順
プライマリーマネージドクラスター の Ingress 証明書を展開し、出力を
primary.crt
に保存します。$ oc get cm default-ingress-cert -n openshift-config-managed -o jsonpath="{['data']['ca-bundle\.crt']}" > primary.crt
セカンダリーマネージドクラスターの Ingress 証明書を抽出し、出力を
secondary.crt
に保存します。$ oc get cm default-ingress-cert -n openshift-config-managed -o jsonpath="{['data']['ca-bundle\.crt']}" > secondary.crt
リモートクラスターの証明書バンドルを保持する新しい ConfigMap ファイルを、ファイル名
cm-clusters-crt.yaml
で作成します。注記この例のように、クラスターごとに 3 つ以上の証明書が存在する可能性があります。また、以前作成した
primary.crt
ファイルおよびsecondary.crt
ファイルから、証明書の内容をコピーして貼り付けた後に、証明書の内容が正しくインデントされていることを確認します。apiVersion: v1 data: ca-bundle.crt: | -----BEGIN CERTIFICATE----- <copy contents of cert1 from primary.crt here> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <copy contents of cert2 from primary.crt here> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <copy contents of cert3 primary.crt here> -----END CERTIFICATE---- -----BEGIN CERTIFICATE----- <copy contents of cert1 from secondary.crt here> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <copy contents of cert2 from secondary.crt here> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <copy contents of cert3 from secondary.crt here> -----END CERTIFICATE----- kind: ConfigMap metadata: name: user-ca-bundle namespace: openshift-config
プライマリーマネージドクラスター、セカンダリーマネージドクラスター、ハブクラスター で ConfigMap を作成します。
$ oc create -f cm-clusters-crt.yaml
出力例:
configmap/user-ca-bundle created
プライマリーマネージドクラスター、セカンダリーマネージドクラスター、および ハブクラスター 上のデフォルトのプロキシーリソースにパッチを適用します。
$ oc patch proxy cluster --type=merge --patch='{"spec":{"trustedCA":{"name":"user-ca-bundle"}}}'
出力例:
proxy.config.openshift.io/cluster patched
3.7. マルチクラスター Web コンソールの有効化
これは、データポリシーまたは DRPolicy を作成する前に必要な新しい機能です。Hub クラスター でのみ必要で、RHACM 2.5 をインストールする必要があります。
マルチクラスターコンソールは、テクノロジープレビュー機能としてのみご利用いただけます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は実稼働環境でこれらを使用することを推奨していません。これらの機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。
手順
- 管理 → クラスター設定 → 設定 → FeatureGate に移動します。
YAML テンプレートを次のように編集します。
[...] spec: featureSet: TechPreviewNoUpgrade
- Save をクリックして、RHACM コンソール内のすべてのクラスターに対してマルチクラスターコンソールを有効にします。Nodes が Ready になるまで待ちます。
- Web コンソールを更新し、管理対象クラスター名が All Clusters の下にリストされていることを確認します。
このフィーチャーゲートは実稼働クラスターで設定しないでください。機能ゲートの適用後にクラスターのアップグレードはできず、元に戻すことはできません。
3.8. ハブクラスターでの障害復旧ポリシーの作成
Openshift 災害復旧ポリシー (DRPolicy) リソースは、災害復旧ソリューションに参加する OpenShift Container Platform クラスターと目的のレプリケーション間隔を指定します。DRPolicy は、ユーザーが障害復旧ソリューションを必要とするアプリケーションに適用できるクラスタースコープのリソースです。
ODF MultiCluster Orchestrator Operator は、Multicluster Web コンソール を介して、各 DRPolicy および対応する DRClusters の作成を容易にします。
前提条件
- 2 つのマネージドクラスターの最小セットがあることを確認します。
マルチクラスター Web コンソール からすべてのクラスターにログインしてください。
- すべてのクラスター をクリックして、管理対象クラスターのリストを展開します。
- すべてのクラスター の下に一覧表示されている管理対象クラスターごとに、<cluster_name> をクリックし、選択したクラスターの資格情報を使用してログインできるログイン画面が表示されるまで待ちます。
手順
OpenShift コンソール で、すべてのクラスター に移動します。
- Data Services に移動し、データポリシー をクリックします。
- DR ポリシーの作成 をクリックします。
-
ポリシー名 を入力します。各 DRPolicy に一意の名前があることを確認します (例:
ocp4bos1-ocp4bos2-5m
)。 - この新しいポリシーが関連付けられる管理対象クラスターのリストから 2 つのクラスターを選択します。
-
レプリケーションポリシー は、選択した OpenShift クラスターに基づいて自動的に
非同期
(async) に設定され、同期スケジュール オプションが使用可能になります。 同期スケジュール を設定します。
重要必要なレプリケーション間隔ごとに、新しい DRPolicy を一意の名前 (例:
ocp4bos1-ocp4bos2-10m
) で作成する必要があります。同じクラスターを選択できますが、同期スケジュール は、分/時間/日単位の異なるレプリケーション間隔で設定できます。最小値は 1 分です。- Create をクリックします。
DRPolicy が正常に作成されたことを確認します。作成された DRPolicy リソースごとに、Hub クラスター でこのコマンドを実行します。
注記<drpolicy_name> を一意の名前に置き換えます。
$ oc get drpolicy <drpolicy_name> -o jsonpath='{.status.conditions[].reason}{"\n"}'
出力例:
Succeeded
注記DRPolicy が作成されると、それに伴って 2 つの DRCluster リソースも作成されます。3 つのリソースすべてが検証され、ステータスが
Succeeded
と表示されるまで、最大 10 分かかる場合があります。ハブクラスター から プライマリーマネージドクラスター と セカンダリーマネージドクラスター の両方へのオブジェクトバケットアクセスを確認します。
ハブクラスター上の DRClusters の名前を取得します。
$ oc get drclusters
出力例:
NAME AGE ocp4bos1 4m42s ocp4bos2 4m42s
この DRCluster 検証コマンドを使用して、各マネージドクラスターで作成された各バケットへの S3 アクセスを確認します。
注記<drcluster_name> を一意の名前に置き換えます。
$ oc get drcluster <drcluster_name> -o jsonpath='{.status.conditions[2].reason}{"\n"}'
出力例:
Succeeded
注記ハブクラスター の両方の DRClusters に対してコマンドを実行してください。
OpenShift DR Cluster Operator のインストールが プライマリー管理対象クラスター および セカンダリー管理対象 クラスターで成功したことを確認します。
$ oc get csv,pod -n openshift-dr-system
出力例:
NAME DISPLAY VERSION REPLACES PHASE clusterserviceversion.operators.coreos.com/odr-cluster-operator.v4.11.0 Openshift DR Cluster Operator 4.11.0 Succeeded NAME READY STATUS RESTARTS AGE pod/ramen-dr-cluster-operator-5564f9d669-f6lbc 2/2 Running 0 5m32s
各管理対象クラスターの OperatorHub に
OpenShift DR Cluster Operator
が正常にインストールされていることを確認することもできます。1 次管理対象クラスター および 2 次管理 対象クラスター上の ODF ミラーリング
デーモン
の正常性の状況を確認します。$ oc get cephblockpool ocs-storagecluster-cephblockpool -n openshift-storage -o jsonpath='{.status.mirroringStatus.summary}{"\n"}'
出力例:
{"daemon_health":"OK","health":"OK","image_health":"OK","states":{}}
注意daemon_health
とhealth
が Warning から OK になるまで、最大 10 分かかる場合があります。最終的にステータスが OK にならない場合は、RHACM コンソールを使用して、管理対象クラスター間の Submariner 接続がまだ正常な状態であることを確認します。すべての値が OK になるまで先に進まないでください。
3.9. 障害復旧ソリューションをテストするためのサンプルアプリケーションを作成する
OpenShift Data Foundation 災害復旧 (DR) ソリューションは、RHACM によって管理されるアプリケーションの災害復旧をサポートします。詳細については、アプリケーションの管理 を参照してください。
このソリューションは、アプリケーションがフェイルオーバーまたは再配置の要件のために DRPolicy 内のクラスター間で移動されるときに、PlacementRule を使用して RHACM アプリケーションの配置を調整します。
以下のセクションでは、DRPolicy をアプリケーションに適用する方法と、クラスターが使用不可の間およびその後にアプリケーションの配置ライフサイクルを管理する方法について詳しく説明します。
OpenShift Data Foundation DR ソリューションは、ArgoCD 経由でデプロイされるアプリケーションに必要な ApplicationSet をサポートしていません。
3.9.1. サンプルアプリケーションの作成
プライマリーマネージドクラスターからセカンダリーマネージドクラスターおよび replocate
への failover
およびフェイルバックをテストするには、単純なアプリケーションが必要です。
前提条件
一般消費用のアプリケーションを作成する場合は、次のことを確認してください。
- アプリケーションは 1 つのクラスターのみにデプロイされます。
- アプリケーションは、DRPolicy をアプリケーションに適用する前にデプロイされます。
-
busybox
というサンプルアプリケーションを例として使用します。 - アプリケーションのすべての外部ルートが、アプリケーションがフェイルオーバーまたは再配置されたときのトラフィックリダイレクト用に Global Traffic Manager (GTM) または Global Server Load Balancing (GLSB) サービスを使用して設定されていることを確認します。
手順
まだログインしていない場合は、OpenShift 認証情報を使用して RHACM コンソールにログインします。
$ oc get route multicloud-console -n open-cluster-management -o jsonpath --template="https://{.spec.host}/multicloud/applications{'\n'}"
出力例:
https://multicloud-console.apps.perf3.example.com/multicloud/applications
- Applications に移動し、Create application をクリックします。
- 種類は Subscriptionを選択します。
-
アプリケーションの Name (
busybox
など) および Namespace (busybox-sample
など) を入力します。 -
Repository location for resources セクションで Repository type
Git
を選択します。 サンプルアプリケーションの github Branch および Path で、 Git リポジトリー URL を入力します。リソース
busybox
Pod および PVC が作成されます。サンプルアプリケーションリポジトリーを
https://github.com/red-hat-storage/ocm-ramen-samples/tree/release-4.11
として使用します。Branch はmain
、Path はbusybox-odr
です。指定されたラベルに一致するクラスターにのみアプリケーションリソースをデプロイする が表示されるまでフォームを下にスクロールし、RHACM クラスターリストビューの プライマリー管理対象クラスター 名に値が設定されたラベルを追加します。
右上隅にある 作成 をクリックします。
後続の画面で、
Topology
タブに移動します。アプリケーショントポロジーのチェックマークがすべて緑であることが確認できるはずです。注記詳細な情報を表示するには、トポロジー要素のいずれかをクリックすると、トポロジービューの右側にウィンドウが表示されます。
サンプルアプリケーションのデプロイを検証しています。
busybox
アプリケーションが優先クラスターにデプロイされたので、デプロイを検証できます。busybox
が RHACM によってデプロイされたマネージドクラスターにログオンします。$ oc get pods,pvc -n busybox-sample
出力例:
NAME READY STATUS RESTARTS AGE pod/busybox 1/1 Running 0 6m NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/busybox-pvc Bound pvc-a56c138a-a1a9-4465-927f-af02afbbff37 5Gi RWO ocs-storagecluster-ceph-rbd 6m
3.9.2. DRPolicy をサンプルアプリケーションに適用する
- ハブクラスターで、マルチクラスター Web コンソールに戻り、All Clusters に移動します。
- All Clusters の下にリストされているすべてのクラスターにログインします。
- Data Services に移動し、Data policies をクリックします。
DRPolicy の最後にあるアクションメニューをクリックして、使用可能なアクションのリストを表示します。
- Apply DRPolicy をクリックします。
Apply DRPolicy モーダルが表示されたら、
busybox
アプリケーションを選択し、PVC ラベル をappname=busybox
として入力します。注記同じアプリケーションまたは複数のアプリケーションで複数の配置ルールが選択されている場合は、アプリケーションの namespace 内のすべての PVC がデフォルトで保護されます。
- Apply をクリックします。
DRPlacementControl
またはDRPC
が ハブクラスター のbusybox-sample
namespace に作成され、CURRENTSTATE がDeployed
として表示されていることを確認します。このリソースは、このアプリケーションのフェイルオーバーと再配置の両方のアクションに使用されます。$ oc get drpc -n busybox-sample
出力例:
NAME AGE PREFERREDCLUSTER FAILOVERCLUSTER DESIREDSTATE CURRENTSTATE busybox-placement-1-drpc 6m59s ocp4bos1 Deployed
3.9.3. サンプルアプリケーションの削除
RHACM コンソールを使用してサンプルアプリケーション busybox
を削除できます。
サンプルアプリケーションを削除する手順は、フェイルオーバーと再配置のテストが完了し、アプリケーションを RHACM とマネージドクラスターから削除する準備ができるまで実行しないでください。
手順
- RHACM コンソールで、Applications に移動します。
-
削除するサンプルアプリケーションを検索します (例:
busybox
)。 - 削除するアプリケーションの横にある Action メニュー (⋮) をクリックします。
Delete application をクリックします。
Delete application を選択すると、アプリケーション関連のリソースも削除すべきかどうかを求める新規画面が表示されます。
- Remove application related resources チェックボックスを選択して、Subscription および PlacementRule を削除します。
- Delete をクリックします。これにより、Primary マネージドクラスター (またはアプリケーションが実行しているクラスター) の busybox アプリケーションが削除されます。
RHACM コンソールを使用して削除されたリソースのほかに、
busybox
アプリケーションの削除後にDRPlacementControl
も削除する必要があります。-
ハブクラスターの OpenShift Web コンソールにログインし、プロジェクト
busybox-sample
の Installed Operators に移動します。 - OpenShift DR Hub Operator をクリックした後、DRPlacementControl タブをクリックします。
-
削除する
busybox
アプリケーション DRPlacementControl の横にあるアクションメニュー (⋮) をクリックします。 - Delete DRPlacementControl をクリックします。
- Delete をクリックします。
-
ハブクラスターの OpenShift Web コンソールにログインし、プロジェクト
このプロセスを使用して、DRPlacementControl
リソースでアプリケーションを削除できます。
3.10. マネージドクラスター間のアプリケーションのフェイルオーバー
フェイルオーバーは、何らかの理由で管理対象クラスターが使用できなくなったときに実行されます。
本セクションでは、busybox サンプルアプリケーションをフェイルオーバーする方法を説明します。フェイルオーバー方式はアプリケーションベースです。この方法で保護される各アプリケーションは、アプリケーション名前空間に対応する DRPlacementControl
リソースを持っている必要があります。
3.10.1. DRPlacementControl を変更してフェイルオーバーする
前提条件
フェイルオーバーを開始する前に、ハブクラスター の
busybox-sample
名前空間のDRPlacementControl
またはDRPC
の PEER READY がTrue
であることを確認します。$ oc get drpc -n busybox-sample -o wide
出力例:
NAME AGE PREFERREDCLUSTER FAILOVERCLUSTER DESIREDSTATE CURRENTSTATE PROGRESSION START TIME DURATION PEER READY busybox-placement-1-drpc 6m59s ocp4bos1 Deployed Completed <timestamp> <duration> True
PEER READY が true でない場合は、可能な回避策について、リリースノート に記載されているディザスタリカバリー関連の既知の問題を参照してください。
手順
- Hub クラスターで、Installed Operators に移動し、Openshift DR Hub Operator をクリックします。
DRPlacementControl タブをクリックします。
注記busybox-sample 名前空間にいることを確認してください。
-
DRPC
busybox-placement-1-drpc
をクリックしてから、YAML ビューをクリックします。 以下のスクリーンショットに示すように、
アクション
とfailoverCluster
の詳細を追加します。DRPlacementControl add action Failover
failoverCluster
は、二次管理クラスター の RHACM クラスター名である必要があります。- Save をクリックします。
Hub クラスター の busybox
-sample
名前空間にあるDRPlacementControl
またはDRPC
の CURRENTSTATE が FailedOver であることを確認します。$ oc get drpc -n busybox-sample
出力例:
NAME AGE PREFERREDCLUSTER FAILOVERCLUSTER DESIREDSTATE CURRENTSTATE busybox-placement-1-drpc 6m59s ocp4bos1 ocp4bos2 Failover FailedOver
YAML ファイルで指定されているフェールオーバークラスター
ocp4bos2
について、アプリケーションのbusybox
が セカンダリーマネージドクラスター で実行されていることを確認します。$ oc get pods,pvc -n busybox-sample
出力例:
NAME READY STATUS RESTARTS AGE pod/busybox 1/1 Running 0 35s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/busybox-pvc Bound pvc-79f2a74d-6e2c-48fb-9ed9-666b74cfa1bb 5Gi RWO ocs-storagecluster-ceph-rbd 35s
プライマリーマネージドクラスター で
busybox
が実行されているかどうかを確認します。busybox
アプリケーションは、このマネージドクラスターで実行されていないはずです。$ oc get pods,pvc -n busybox-sample
出力例:
No resources found in busybox-sample namespace.
- アプリケーションの DNS ルートが正しく設定されているかどうかを確認します。外部ルートが設定されていない場合は、Global Traffic Manager (GTM) または Global Server Load Balancing (GLSB) サービスを使用してルートを再設定できます。
リリースノートの 既知の問題 セクションに記載されている既知の DR の問題に注意してください。
3.11. マネージドクラスター間のアプリケーションの再配置
再配置操作はフェイルオーバーと非常に似ています。再配置はアプリケーションベースで、DRPlacementControl
を使用して再配置をトリガーします。
障害が発生したクラスターが使用可能になり、障害が発生したクラスターでアプリケーションリソースがクリーンアップされると、再配置が実行されます。
この場合、アクションは preferredCluster
に戻って Relocate となります。
3.11.1. DRPlacementControl を Relocate に変更します。
前提条件
再配置を開始する前に、ハブクラスター の
busybox-sample
名前空間のDRPlacementControl
またはDRPC
の PEER READY がTrue
であることを確認します。$ oc get drpc -n busybox-sample -o wide
出力例:
NAME AGE PREFERREDCLUSTER FAILOVERCLUSTER DESIREDSTATE CURRENTSTATE PROGRESSION START TIME DURATION PEER READY busybox-placement-1-drpc 6m59s ocp4bos1 ocp4bos2 Failover FailedOver Completed <timestamp> <duration> True
PEER READY が true でない場合は、可能な回避策について、リリースノート に記載されているディザスタリカバリー関連の既知の問題を参照してください。
手順
- Hub クラスターで、Installed Operators に移動し、Openshift DR Hub Operator をクリックします。
- DRPlacementControl タブをクリックします。
-
DRPC
busybox-placement-1-drpc
をクリックしてから、YAML ビューをクリックします。 action を
Relocate
に変更しますDRPlacementControl modify action to Relocate
- Save をクリックします。
Hub クラスター の
busybox-sample
名前空間にあるDRPlacementControl
またはDRPC
の CURRENTSTATE がRelocated
であることを確認します。$ oc get drpc -n busybox-sample
出力例:
NAME AGE PREFERREDCLUSTER FAILOVERCLUSTER DESIREDSTATE CURRENTSTATE busybox-placement-1-drpc 6m59s ocp4bos1 ocp4bos2 Relocate Relocated
アプリケーションの
busybox
が現在 プライマリーマネージドクラスター で実行されているかどうかを確認します。再配置は、YAML ファイルで指定された preferredClusterocp4bos1
に対して行われます。これは、フェイルオーバー操作の前にアプリケーションが実行されていた場所です。$ oc get pods,pvc -n busybox-sample
出力例:
NAME READY STATUS RESTARTS AGE pod/busybox 1/1 Running 0 60s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/busybox-pvc Bound pvc-79f2a74d-6e2c-48fb-9ed9-666b74cfa1bb 5Gi RWO ocs-storagecluster-ceph-rbd 61s
busybox
がセカンダリーマネージドクラスターで実行しているかどうかを確認します。busybox
アプリケーションは、このマネージドクラスターで実行されていないはずです。$ oc get pods,pvc -n busybox-sample
出力例:
No resources found in busybox-sample namespace.
- アプリケーションの DNS ルートが正しく設定されているかどうかを確認します。外部ルートが設定されていない場合は、Global Traffic Manager (GTM) または Global Server Load Balancing (GLSB) サービスを使用してルートを再設定できます。
リリースノートの 既知の問題 セクションに記載されている既知の DR の問題に注意してください。
第4章 OpenShift Data Foundation 向けの Metro-DR ソリューション
4.1. Metro-DR ソリューションのコンポーネント
Metro-DR は、Red Hat Advanced Cluster Management for Kubernetes、Red Hat Ceph Storage、および OpenShift Data Foundation コンポーネントで設定され、OpenShift Container Platform クラスター全体でアプリケーションとデータのモビリティを提供します。
Red Hat Advanced Cluster Management for Kubernetes
Red Hat Advanced Cluster Management (RHACM) は、複数のクラスターとアプリケーションのライフサイクルを管理する機能を提供します。したがって、マルチクラスター環境でのコントロールプレーンとして機能します。
RHACM は 2 つの部分に分かれています。
- RHACM Hub: マルチクラスターコントロールプレーンで実行されるコンポーネント
- マネージドクラスター: マネージドクラスターで実行されるコンポーネント
この製品の詳細については、RHACM のドキュメント および RHACM のアプリケーションの管理 を参照してください。
Red Hat Ceph Storage
Red Hat Ceph Storage は、非常にスケーラブルでオープンなソフトウェア定義のストレージプラットフォームであり、最も安定したバージョンの Ceph ストレージシステムと Ceph 管理プラットフォーム、デプロイメントユーティリティー、およびサポートサービスを組み合わせたものです。エンタープライズデータの保存コストを大幅に削減し、組織が指数関数的なデータの成長を管理できるようにします。このソフトウェアは、パブリックまたはプライベートのクラウドデプロイメント向けの堅牢かつ最新のペタバイトスケールのストレージプラットフォームです。
詳細な製品情報については、Red Hat Ceph Storage を参照してください。
OpenShift Data Foundation
OpenShift Data Foundation は、OpenShift Container Platform クラスターでステートフルなアプリケーション用のストレージをプロビジョニングし、管理する機能を提供します。これは、OpenShift Data Foundation コンポーネントスタックで Rook によって管理されるストレージプロバイダーとして Ceph によってサポートされ、Ceph-CSI はステートフルアプリケーションの永続ボリュームのプロビジョニングおよび管理を行います。
OpenShift DR
OpenShift DR は、RHACM を使用してデプロイおよび管理される一連のピア OpenShift クラスター全体のステートフルアプリケーションの障害復旧オーケストレーターであり、永続ボリュームでのアプリケーションの状態のライフサイクルのオーケストレーションを行うためのクラウドネイティブインターフェイスを提供します。これには以下が含まれます。
- OpenShift クラスター全体でアプリケーションとその状態関係を保護する
- アプリケーションとその状態をピアクラスターにフェイルオーバーする
- アプリケーションとその状態を以前にデプロイされたクラスターに再配置する
OpenShift DR は 3 つのコンポーネントに分類されます。
- ODF マルチクラスターオーケストレーター: マルチクラスターコントロールプレーン (RHACM ハブ) にインストールされ、メトロおよびリージョナル DR 関係のために OpenShift Data Foundation クラスターの設定とピアリングを調整します。
- OpenShift DR Hub Operator: ハブクラスターに ODF Multicluster Orchestrator インストールの一部として自動的にインストールされ、DR 対応アプリケーションのフェイルオーバーまたは再配置を調整します。
- OpenShift DR Cluster Operator : Metro および Regional DR 関係の一部である各管理対象クラスターに自動的にインストールされ、アプリケーションのすべての PVC のライフサイクルを管理します。
4.2. Metro-DR デプロイメントワークフロー
このセクションでは、最新バージョンの Red Hat OpenShift Data Foundation、Red Hat Ceph Storage (RHCS)、および Red Hat Advanced Cluster Management (RHACM) を使用して、2 つの異なる OpenShift Container Platform クラスターにわたって Metro-DR 機能を設定およびデプロイするために必要な手順の概要を示します。.2 つのマネージドクラスターに加えて、Advanced Cluster Management をデプロイするのに、3 つ目の OpenShift Container Platform クラスターが必要です。
インフラストラクチャーを設定するには、指定した順序で以下の手順を実行します。
- DR ソリューションの一部であるハブ、プライマリー、およびセカンダリー Openshift Container Platform クラスターの 3 つの要件が満たされていることを確認します。Metro-DR を有効にするための要件 を 参照してください。
- arbiter を使用して Red Hat Ceph Storage ストレッチクラスターをデプロイするための要件を満たしていることを確認してください。Red Hat Ceph Storage をデプロイするための要件 を参照してください。
- Red Hat Ceph Storage ストレッチモードをデプロイして設定します。拡張モード機能を使用して 2 つの異なるデータセンターで Ceph クラスターを有効にする手順については、Red Hat Ceph Storage のデプロイ を参照してください。
- OpenShift Data Foundation operator をインストールし、プライマリーおよびセカンダリーのマネージドクラスターにストレージシステムを作成します。管理対象クラスターでの OpenShift Data Foundation クラスターの作成 を参照してください。
- ハブクラスターに ODF マルチクラスターオーケストレーターをインストールします。Hub クラスターへの ODF Multicluster Orchestrator のインストール を参照してください。
- ハブ、プライマリー、およびセカンダリークラスター間の SSL アクセスを設定します。クラスター間での SSL アクセスの設定 を参照してください。
- Web コンソールを有効にします。マルチクラスター Web コンソールの有効化
プライマリークラスターとセカンダリークラスター全体で DR 保護を必要とするアプリケーションで使用する DRPolicy リソースを作成します。Creating Disaster Recovery Policy on Hub cluster を参照してください。
注記複数のポリシーが存在する場合があります。
災害復旧ソリューションをテストするには:
- RHACM コンソールを使用してサンプルアプリケーションを作成します。サンプルアプリケーションの作成 を参照してください。
- マネージドクラスター間でサンプルアプリケーションを使用して、フェイルオーバーと再配置操作をテストします。アプリケーションのフェイルオーバー とアプリケーションの再配置 を参照してください。
4.3. Metro-DR を有効にする要件
Red Hat OpenShift Data Foundation でサポートされる障害復旧機能では、障害復旧ソリューションを正常に実装するために以下の前提条件をすべて満たす必要があります。
相互にネットワーク接続が可能な 3 つの OpenShift クラスターが必要です。
- Red Hat Advanced Cluster Management for Kubernetes (RHACM Operator) がインストールされている ハブクラスター。
- OpenShift Data Foundation がインストールされているプライマリー 管理対象クラスター。
- OpenShift Data Foundation がインストールされている セカンダリーマネージドクラスター。
RHACM Operator と Multiclusterhub がハブクラスターにインストールされていることを確認します。手順については、RHACM インストールガイド を参照してください。
- OpenShift 認証情報を使用して RHACM コンソールにログインします。
RHACM コンソール用に作成されたルートを見つけます。
$ oc get route multicloud-console -n open-cluster-management -o jsonpath --template="https://{.spec.host}/multicloud/clusters{'\n'}"
出力例:
https://multicloud-console.apps.perf3.example.com/multicloud/clusters
- 出力リンクをブラウザーで開き、OpenShift 資格情報でログインします。インポートされた local-cluster が表示されるはずです。
アプリケーショントラフィックのルーティングとリダイレクトが適切に設定されていることを確認するのは、ユーザーの責任です。アプリケーショントラフィックルートの設定と更新は現在サポートされていません。
- RHACM コンソールを使用して、プライマリーマネージドクラスターおよびセカンダリーマネージドクラスターをインポートまたは作成してください。環境に適したオプションを選択します。マネージドクラスターが正常に作成またはインポートされると、コンソールでインポートまたは作成されたクラスターの一覧を確認できます。手順については、クラスターの作成 および ターゲットのマネージドクラスターをハブクラスターにインポートする を参照してください。
OpenShift Container Platform 管理対象クラスターが存在する場所と RHCS ノードの間に距離制限があります。サイト間のネットワーク遅延は、10 ミリ秒の往復時間 (RTT) 未満である必要があります。
4.4. arbiter を使用して Red Hat Ceph Storage ストレッチクラスターをデプロイするための要件
Red Hat Ceph Storage は、標準的で経済的なサーバーおよびディスク上で統一されたソフトウェア定義ストレージを提供するオープンソースエンタープライズプラットフォームです。ブロック、オブジェクト、ファイルストレージを 1 つのプラットフォームに統合することで、Red Hat Ceph Storage はすべてのデータを効率的かつ自動的に管理します。そのため、それを使用するアプリケーションおよびワークロードに集中することができます。
このセクションでは、Red Hat Ceph Storage デプロイメントの基本的な概要を説明します。より複雑なデプロイメントについては 、Red Hat Ceph Storage 5 の公式ドキュメントガイド を参照してください。
劣化すると min_size=1
で実行されるため、Flash メディアのみがサポートされています。ストレッチモードは、オールフラッシュ OSD でのみ使用してください。オールフラッシュ OSD を使用すると、接続が復元された後の回復に必要な時間が最小限に抑えられるため、データ損失の可能性が最小限に抑えられます。
イレイジャーコーディングされたプールは、ストレッチモードでは使用できません。
4.4.1. ハードウェア要件
Red Hat Ceph Storage をデプロイするための最小ハードウェア要件については、Minimum hardware recommendations for containerized Ceph を参照してください。
ノード名 | データセンター | Ceph コンポーネント |
---|---|---|
ceph1 | DC1 | OSD+MON+MGR |
ceph2 | DC1 | OSD+MON |
ceph3 | DC1 | OSD+MDS+RGW |
ceph4 | DC2 | OSD+MON+MGR |
ceph5 | DC2 | OSD+MON |
ceph6 | DC2 | OSD+MDS+RGW |
ceph7 | DC3 | MON |
4.4.2. ソフトウェア要件
Red Hat Ceph Storage 5 の最新のソフトウェアバージョンを使用してください。
Red Hat Ceph Storage でサポートされているオペレーティングシステムのバージョンの詳細については、Red Hat Ceph Storage: Supported configurations に関するナレッジベースの記事を参照してください。
4.4.3. ネットワーク設定要件
推奨される Red Hat Ceph Storage 設定は次のとおりです。
- パブリックネットワークとプライベートネットワークを 1 つずつ、合計 2 つのネットワークが必要です。
すべてのデータセンターの Cephs プライベートネットワークとパブリックネットワークの VLAN とサブネットをサポートする 3 つの異なるデータセンターが必要です。
注記データセンターごとに異なるサブネットを使用できます。
- Red Hat Ceph Storage Object Storage Devices (OSD) を実行している 2 つのデータセンター間のレイテンシーは、RTT で 10 ミリ秒を超えることはできません。arbiter データセンターの場合、これは、他の 2 つの OSD データセンターに対して最大 100 ミリ秒の RTT という高い値でテストされました。
このガイドで使用した基本的なネットワーク設定の例を次に示します。
- DC1: Ceph パブリック/プライベートネットワーク: 10.0.40.0/24
- DC2: Ceph パブリック/プライベートネットワーク: 10.0.40.0/24
- DC3: Ceph パブリック/プライベートネットワーク: 10.0.40.0/24
必要なネットワーク環境の詳細については、Ceph network configuration を参照してください。
4.5. Red Hat Ceph Storage の導入
4.5.1. ノードのデプロイ前の手順
Red Hat Ceph Storage Ceph クラスターをインストールする前に、必要なすべての要件を満たすために、以下の手順を実施します。
全ノードを Red Hat Network または Red Hat Satellite に登録し、有効なプールにサブスクライブします。
subscription-manager register subscription-manager subscribe --pool=8a8XXXXXX9e0
次のリポジトリーの Ceph クラスター内のすべてのノードへのアクセスを有効にします。
-
rhel-8-for-x86_64-baseos-rpms
rhel-8-for-x86_64-appstream-rpms
subscription-manager repos --disable="*" --enable="rhel-8-for-x86_64-baseos-rpms" --enable="rhel-8-for-x86_64-appstream-rpms"
-
オペレーティングシステムの RPM を最新バージョンに更新し、必要に応じて再起動します。
dnf update -y reboot
クラスターからノードを選択して、ブートストラップノードにします。
ceph1
は、この例の今後のブートストラップノードです。ブートストラップノード
ceph1
でのみ、ansible-2.9-for-rhel-8-x86_64-rpms
およびrhceph-5-tools-for-rhel-8-x86_64-rpms
リポジトリーを有効にします。subscription-manager repos --enable="ansible-2.9-for-rhel-8-x86_64-rpms" --enable="rhceph-5-tools-for-rhel-8-x86_64-rpms"
すべてのホストでベア/短縮ホスト名を使用して
hostname
を設定します。hostnamectl set-hostname <short_name>
Red Hat Ceph Storage を使用して Red Hat Ceph Storage をデプロイするためのホスト名設定を確認します。
$ hostname
出力例:
ceph1
/etc/hosts ファイルを変更し、DNS ドメイン名を使用して DOMAIN 変数を設定して、fqdn エントリーを 127.0.0.1IP に追加します。
DOMAIN="example.domain.com" cat <<EOF >/etc/hosts 127.0.0.1 $(hostname).${DOMAIN} $(hostname) localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 $(hostname).${DOMAIN} $(hostname) localhost6 localhost6.localdomain6 EOF
hostname -f
オプションを使用して、fqdn
の長いホスト名を確認します。$ hostname -f
出力例:
ceph1.example.domain.com
注: これらの変更が必要な理由の詳細については、完全修飾ドメイン名とベアホスト名 を参照してください。
ブートストラップノードで次の手順を実行します。この例では、ブートストラップノードは
ceph1
です。cephadm-ansible
RPM パッケージをインストールします。$ sudo dnf install -y cephadm-ansible
重要Ansible Playbook を実行するには、Red Hat Ceph Storage クラスターに設定されているすべてのノードに
ssh
パスワードなしでアクセスできる必要があります。設定されたユーザー (たとえば、deployment-user
) が、パスワードを必要とせずにsudo
コマンドを呼び出すための root 権限を持っていることを確認してください。カスタムキーを使用するには、選択したユーザー (たとえば、
deployment-user
) の ssh 設定ファイルを設定して、ssh 経由でノードに接続するために使用される ID/キーを指定します。cat <<EOF > ~/.ssh/config Host ceph* User deployment-user IdentityFile ~/.ssh/ceph.pem EOF
Ansible インベントリーを構築します。
cat <<EOF > /usr/share/cephadm-ansible/inventory ceph1 ceph2 ceph3 ceph4 ceph5 ceph6 ceph7 [admin] ceph1 EOF
注記インベントリーファイルの admin グループの一部として設定されたホストは、
cephadm
によって_admin
としてタグ付けされるため、ブートストラッププロセス中に admin ceph キーリングを受け取ります。プリフライト Playbook を実行する前に、
ansible
が ping モジュールを使用してすべてのノードにアクセスできることを確認します。$ ansible -i /usr/share/cephadm-ansible/inventory -m ping all -b
出力例:
ceph6 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph4 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph3 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph5 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph7 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" }
以下の Ansible Playbook を実行します。
$ ansible-playbook -i /usr/share/cephadm-ansible/inventory /usr/share/cephadm-ansible/cephadm-preflight.yml --extra-vars "ceph_origin=rhcs"
プリフライト Playbook は RHCS
dnf
リポジトリーを設定し、ブートストラップ用にストレージクラスターを準備します。また、podman、lvm2、chronyd、および cephadm もインストールします。cephadm-ansible
およびcephadm-
preflight.yml のデフォルトの場所は/usr/share/cephadm-ansible
です。
4.5.2. Cephadm を使用したクラスターのブートストラップとサービスのデプロイメント
cephadm ユーティリティーは、cephadm ブートストラップコマンドが実行されているローカルノード上に、新しい Red Hat Ceph Storage クラスターの単一の Ceph Monitor デーモンと Ceph Manager デーモンをインストールし、開始します。
このガイドでは、クラスター仕様の yaml ファイルを使用して、クラスターをブートストラップし、必要なすべての Red Hat Ceph Storage サービスをワンステップでデプロイします。
展開中に問題が見つかった場合は、展開を 2 つの手順に分割することで、エラーのトラブルシューティングが容易になる場合があります。
- ブートストラップ
- サービスの展開
ブートストラッププロセスの詳細については、Bootstrapping a new storage cluster を参照してください。
手順
次のように、json ファイルを使用してコンテナーレジストリーに対して認証を行うための json ファイルを作成します。
$ cat <<EOF > /root/registry.json { "url":"registry.redhat.io", "username":"User", "password":"Pass" } EOF
Red Hat Ceph Storage クラスターにノードを追加する
cluster-spec.yaml
を作成し、表 3.1 に従ってサービスを実行する場所に特定のラベルを設定します。cat <<EOF > /root/cluster-spec.yaml service_type: host addr: 10.0.40.78 ## <XXX.XXX.XXX.XXX> hostname: ceph1 ## <ceph-hostname-1> location: root: default datacenter: DC1 labels: - osd - mon - mgr --- service_type: host addr: 10.0.40.35 hostname: ceph2 location: datacenter: DC1 labels: - osd - mon --- service_type: host addr: 10.0.40.24 hostname: ceph3 location: datacenter: DC1 labels: - osd - mds - rgw --- service_type: host addr: 10.0.40.185 hostname: ceph4 location: root: default datacenter: DC2 labels: - osd - mon - mgr --- service_type: host addr: 10.0.40.88 hostname: ceph5 location: datacenter: DC2 labels: - osd - mon --- service_type: host addr: 10.0.40.66 hostname: ceph6 location: datacenter: DC2 labels: - osd - mds - rgw --- service_type: host addr: 10.0.40.221 hostname: ceph7 labels: - mon --- service_type: mon placement: label: "mon" --- service_type: mds service_id: cephfs placement: label: "mds" --- service_type: mgr service_name: mgr placement: label: "mgr" --- service_type: osd service_id: all-available-devices service_name: osd.all-available-devices placement: label: "osd" spec: data_devices: all: true --- service_type: rgw service_id: objectgw service_name: rgw.objectgw placement: count: 2 label: "rgw" spec: rgw_frontend_port: 8080 EOF
ブートストラップノードから設定された Red Hat Ceph Storage パブリックネットワークで NIC の IP を取得します。
10.0.40.0
を ceph パブリックネットワークで定義したサブネットに置き換えた後、次のコマンドを実行します。$ ip a | grep 10.0.40
出力例:
10.0.40.78
クラスター内の最初の Monitor ノードとなるノードで、root ユーザーとして
Cephadm
bootstrap コマンドを実行します。IP_ADDRESS
オプションは、cephadm bootstrap
コマンドの実行に使用しているノードの IP アドレスです。注記パスワードなしの SSH アクセス用に
root
ではなく別のユーザーを設定した場合は、cepadm bootstrap
コマンドで--ssh-user=
フラグを使用します。default/id_rsa ssh キー名以外を使用している場合は、
cephadm
コマンドで--ssh-private-key
および--ssh-public-key
オプションを使用します。$ cephadm bootstrap --ssh-user=deployment-user --mon-ip 10.0.40.78 --apply-spec /root/cluster-spec.yaml --registry-json /root/registry.json
重要ローカルノードが完全修飾ドメイン名 (FQDN) を使用する場合は、コマンドラインで
--allow-fqdn-hostname
オプションをcephadm bootstrap
に追加します。ブートストラップが終了すると、前の cephadm bootstrap コマンドから次の出力が表示されます。
You can access the Ceph CLI with: sudo /usr/sbin/cephadm shell --fsid dd77f050-9afe-11ec-a56c-029f8148ea14 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring Please consider enabling telemetry to help improve Ceph: ceph telemetry on For more information see: https://docs.ceph.com/docs/pacific/mgr/telemetry/
ceph1 の Ceph CLI クライアントを使用して、Red Hat Ceph Storage クラスターデプロイメントのステータスを確認します。
$ ceph -s
出力例:
cluster: id: 3a801754-e01f-11ec-b7ab-005056838602 health: HEALTH_OK services: mon: 5 daemons, quorum ceph1,ceph2,ceph4,ceph5,ceph7 (age 4m) mgr: ceph1.khuuot(active, since 5m), standbys: ceph4.zotfsp osd: 12 osds: 12 up (since 3m), 12 in (since 4m) rgw: 2 daemons active (2 hosts, 1 zones) data: pools: 5 pools, 107 pgs objects: 191 objects, 5.3 KiB usage: 105 MiB used, 600 GiB / 600 GiB avail 105 active+clean
注記すべてのサービスが開始されるまでに数分かかる場合があります。
osds が設定されていないときに、グローバルリカバリーイベントが発生するのは正常です。
ceph orch ps
およびceph orch ls
を使用して、サービスのステータスをさらに確認できます。すべてのノードが
cephadm
クラスターの一部であるかどうかを確認します。$ ceph orch host ls
出力例:
HOST ADDR LABELS STATUS ceph1 10.0.40.78 _admin osd mon mgr ceph2 10.0.40.35 osd mon ceph3 10.0.40.24 osd mds rgw ceph4 10.0.40.185 osd mon mgr ceph5 10.0.40.88 osd mon ceph6 10.0.40.66 osd mds rgw ceph7 10.0.40.221 mon
注記ceph1
は [admin] グループの一部としてcephadm-ansible
インベントリーで設定されているため、ホストから Ceph コマンドを直接実行できます。Ceph 管理キーは、cephadm bootstrap
プロセス中にホストにコピーされました。データセンターでの Ceph モニターサービスの現在の配置を確認します。
$ ceph orch ps | grep mon | awk '{print $1 " " $2}'
出力例:
mon.ceph1 ceph1 mon.ceph2 ceph2 mon.ceph4 ceph4 mon.ceph5 ceph5 mon.ceph7 ceph7
データセンターでの Ceph 管理サービスの現在の配置を確認します。
$ ceph orch ps | grep mgr | awk '{print $1 " " $2}'
出力例:
mgr.ceph2.ycgwyz ceph2 mgr.ceph5.kremtt ceph5
ceph osd クラッシュマップレイアウトをチェックして、各ホストに 1 つの OSD が設定され、そのステータスが
UP
であることを確認します。また、表 3.1 で指定されているように、各ノードが適切なデータセンターバケットの下にあることを再確認してください。$ ceph osd tree
出力例:
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.87900 root default -16 0.43950 datacenter DC1 -11 0.14650 host ceph1 2 ssd 0.14650 osd.2 up 1.00000 1.00000 -3 0.14650 host ceph2 3 ssd 0.14650 osd.3 up 1.00000 1.00000 -13 0.14650 host ceph3 4 ssd 0.14650 osd.4 up 1.00000 1.00000 -17 0.43950 datacenter DC2 -5 0.14650 host ceph4 0 ssd 0.14650 osd.0 up 1.00000 1.00000 -9 0.14650 host ceph5 1 ssd 0.14650 osd.1 up 1.00000 1.00000 -7 0.14650 host ceph6 5 ssd 0.14650 osd.5 up 1.00000 1.00000
新しい RDB ブロックプールを作成して有効にします。
$ ceph osd pool create rbdpool 32 32 $ ceph osd pool application enable rbdpool rbd
注記コマンドの最後にある 32 という数字は、このプールに割り当てられている PG の数です。PG の数は、クラスター内の OSD の数、プールの予想使用率など、いくつかの要因によって異なります。次の計算機を使用して、必要な PG の数を決定できます。プール計算機ごとの Ceph 配置グループ (PG)。
RBD プールが作成されたことを確認します。
$ ceph osd lspools | grep rbdpool
出力例:
3 rbdpool
MDS サービスがアクティブであり、各データセンターに 1 つのサービスが配置されていることを確認します。
$ ceph orch ps | grep mds
出力例:
mds.cephfs.ceph3.cjpbqo ceph3 running (17m) 117s ago 17m 16.1M - 16.2.9 mds.cephfs.ceph6.lqmgqt ceph6 running (17m) 117s ago 17m 16.1M - 16.2.9
CephFS ボリュームを作成します。
$ ceph fs volume create cephfs
注記ceph fs volume create
コマンドは、必要なデータとメタ CephFS プールも作成します。詳細については、Configuring and Mounting Ceph File Systems を参照してください。Ceph
のステータスを確認して、MDS デーモンがどのようにデプロイされたかを確認します。状態がアクティブで、ceph6
がこのファイルシステムのプライマリー MDS で、ceph3
がセカンダリー MDS であることを確認します。$ ceph fs status
出力例:
cephfs - 0 clients ====== RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS 0 active cephfs.ceph6.ggjywj Reqs: 0 /s 10 13 12 0 POOL TYPE USED AVAIL cephfs.cephfs.meta metadata 96.0k 284G cephfs.cephfs.data data 0 284G STANDBY MDS cephfs.ceph3.ogcqkl
RGW サービスがアクティブであることを確認します。
$ ceph orch ps | grep rgw
出力例:
rgw.objectgw.ceph3.kkmxgb ceph3 *:8080 running (7m) 3m ago 7m 52.7M - 16.2.9 rgw.objectgw.ceph6.xmnpah ceph6 *:8080 running (7m) 3m ago 7m 53.3M - 16.2.9
4.5.3. Red Hat Ceph Storage ストレッチモードの設定
cephadm
を使用して Red Hat Ceph Storage クラスターが完全にデプロイされたら、次の手順でストレッチクラスターモードを設定します。新しいストレッチモードは、2 サイトのケースを処理するように設計されています。
手順
ceph mon dump コマンドを使用して、モニターが使用している現在の選挙戦略を確認します。ceph クラスターのデフォルトでは、接続はクラシックに設定されています。
ceph mon dump | grep election_strategy
出力例:
dumped monmap epoch 9 election_strategy: 1
モニターの選択を接続に変更します。
ceph mon set election_strategy connectivity
前の cephmondump コマンドを再度実行して、election_strategy 値を確認します。
$ ceph mon dump | grep election_strategy
出力例:
dumped monmap epoch 10 election_strategy: 3
さまざまな選択戦略の詳細については、Configuring monitor election strategy を参照してください。
すべての Ceph モニターの場所を設定します。
ceph mon set_location ceph1 datacenter=DC1 ceph mon set_location ceph2 datacenter=DC1 ceph mon set_location ceph4 datacenter=DC2 ceph mon set_location ceph5 datacenter=DC2 ceph mon set_location ceph7 datacenter=DC3
各モニターに適切な場所があることを確認します。
$ ceph mon dump
出力例:
epoch 17 fsid dd77f050-9afe-11ec-a56c-029f8148ea14 last_changed 2022-03-04T07:17:26.913330+0000 created 2022-03-03T14:33:22.957190+0000 min_mon_release 16 (pacific) election_strategy: 3 0: [v2:10.0.143.78:3300/0,v1:10.0.143.78:6789/0] mon.ceph1; crush_location {datacenter=DC1} 1: [v2:10.0.155.185:3300/0,v1:10.0.155.185:6789/0] mon.ceph4; crush_location {datacenter=DC2} 2: [v2:10.0.139.88:3300/0,v1:10.0.139.88:6789/0] mon.ceph5; crush_location {datacenter=DC2} 3: [v2:10.0.150.221:3300/0,v1:10.0.150.221:6789/0] mon.ceph7; crush_location {datacenter=DC3} 4: [v2:10.0.155.35:3300/0,v1:10.0.155.35:6789/0] mon.ceph2; crush_location {datacenter=DC1}
crushtool
コマンドを使用するためにceph-base
RPM パッケージをインストールして、この OSD クラッシュトポロジーを利用する CRUSH ルールを作成します。$ dnf -y install ceph-base
CRUSH ルールセットの詳細については、Ceph CRUSH ruleset を参照してください。
コンパイルされた CRUSH マップをクラスターから取得します。
$ ceph osd getcrushmap > /etc/ceph/crushmap.bin
CRUSH マップを逆コンパイルし、これをテキストファイルに変換して編集できるようにします。
$ crushtool -d /etc/ceph/crushmap.bin -o /etc/ceph/crushmap.txt
ファイル
/etc/ceph/crushmap.txt
の末尾にある CRUSH マップに次のルールを追加します。$ vim /etc/ceph/crushmap.txt
rule stretch_rule { id 1 type replicated min_size 1 max_size 10 step take DC1 step chooseleaf firstn 2 type host step emit step take DC2 step chooseleaf firstn 2 type host step emit } # end crush map
注記ルール
id
は一意である必要があります。この例では、id 0 のクラッシュルールがもう 1 つしかないため、id 1 を使用しています。デプロイメントにさらにルールが作成されている場合は、次の空き ID を使用します。宣言された CRUSH ルールには、次の情報が含まれています。
Rule name
:- 説明: ルールを識別する一意の完全な名前。
-
値:
stretch_rule
id
:- 説明: ルールを識別する一意の整数。
-
値:
1
type
:- 説明: レプリケートまたはイレイジャーコーディングされたストレージドライブのルールを説明しています。
-
値:
replicated
min_size
:- 説明: プールがこの数よりも小さいレプリカを使用する場合、CRUSH はこのルールを選択しません。
-
値:
1
max_size
:- 説明: プールがこの数よりも大きいレプリカを使用する場合、CRUSH はこのルールを選択しません。
-
値:
10
step take DC1
- 説明: バケット名 (DC1) を取り、ツリーを下ってイテレートを開始します。
step chooseleaf firstn 2 type host
- 説明: 指定のタイプのバケット数を選択します。この例では、DC1 にある 2 つの異なるホストになります。
step emit
- 説明: 現在の値を出力し、スタックを除算します。通常、ルールの最後に使用されますが、同じルール内の異なるツリーを選択する際に使用することもできます。
step take DC2
- 説明: バケット名 (DC2) を取り、ツリーを下ってイテレートを開始します。
step chooseleaf firstn 2 type host
- 説明: 指定のタイプのバケット数を選択します。この例では、DC2 にある 2 つの異なるホストになります。
step emit
- 説明: 現在の値を出力し、スタックを除算します。通常、ルールの最後に使用されますが、同じルール内の異なるツリーを選択する際に使用することもできます。
ファイル
/etc/ceph/crushmap.txt
から新しい CRUSH マップをコンパイルし、これを/etc/ceph/crushmap2.bin
というバイナリーファイルに変換します。$ crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap2.bin
作成した新しいクラッシュマップをクラスターに注入します。
$ ceph osd setcrushmap -i /etc/ceph/crushmap2.bin
出力例:
17
注記数字の 17 はカウンターであり、クラッシュマップに加えた変更に応じて増加します (18、19 など)。
作成したストレッチルールが使用可能になったことを確認します。
ceph osd crush rule ls
出力例:
replicated_rule stretch_rule
ストレッチクラスターモードを有効にします。
$ ceph mon enable_stretch_mode ceph7 stretch_rule datacenter
この例では、
ceph7
が arbiter ノード、stretch_rule
が前の手順で作成したクラッシュルール、datacenter
が分割バケットです。すべてのプールが、Ceph クラスターに作成した
stretch_rule
CRUSH ルールを使用していることを確認します。$ for pool in $(rados lspools);do echo -n "Pool: ${pool}; ";ceph osd pool get ${pool} crush_rule;done
出力例:
Pool: device_health_metrics; crush_rule: stretch_rule Pool: cephfs.cephfs.meta; crush_rule: stretch_rule Pool: cephfs.cephfs.data; crush_rule: stretch_rule Pool: .rgw.root; crush_rule: stretch_rule Pool: default.rgw.log; crush_rule: stretch_rule Pool: default.rgw.control; crush_rule: stretch_rule Pool: default.rgw.meta; crush_rule: stretch_rule Pool: rbdpool; crush_rule: stretch_rule
これは、arbiter モードで稼働中の Red Hat Ceph Storage ストレッチクラスターが利用可能になったことを示しています。
4.6. 管理対象クラスターでの OpenShift Data Foundation クラスターの作成
2 つの OpenShift Container Platform クラスター間のストレージレプリケーションを設定するには、OpenShift Data Foundation Operator をインストールした後に OpenShift Data Foundation ストレージシステムを作成します。
前提条件
- OpenShift Data Foundation の外部デプロイメントのハードウェア要件を満たしていることを確認してください。ハードウェア要件の詳細については、エクスターナルモード要件 を参照してください。
インフラストラクチャー (AWS、VMware、BM、Azure など) に固有の OpenShift Data Foundation デプロイメントガイドと手順を参照してください。
手順
- 各管理対象クラスターに最新の OpenShift Data Foundation クラスターをインストールして設定します。
Operator をインストールした後、オプション Full デプロイメント タイプおよび
Connect with external storage platform
を使用して、バッキングストレージタイプ がRed Hat Ceph Storage
である StorageSystem を作成します。詳しい手順は、外部モードでの OpenShift Data Foundation のデプロイ を参照してください。
少なくとも、
ceph-external-cluster-details-exporter.py script
で次の 3 つのフラグを使用する必要があります。- --rbd-data-pool-name
-
OpenShift Container Platform の RHCS デプロイメント中に作成された RBD プールの名前を使用します。たとえば、プールを
rbdpool
と呼ぶことができます。 - --rgw-endpoint
-
<ip_address>:<port>
の形式でエンドポイントを指定します。これは、設定している OpenShift Container Platform クラスターと同じサイトで実行されている RGW デーモンの RGW IP です。 - --run-as-user
- サイトごとに異なるクライアント名を使用します。
RHCS の展開中にデフォルト値が使用された場合、次のフラグは
optional
です。- --cephfs-filesystem-name
-
OpenShift Container Platform の RHCS デプロイメント中に作成した CephFS ファイルシステムの名前を使用すると、デフォルトのファイルシステム名は
cephfs
になります。 - --cephfs-data-pool-name
-
OpenShift Container Platform の RHCS デプロイメント中に作成した CephFS データプールの名前で、デフォルトプールは
cephfs.data
と呼ばれます。 - --cephfs-metadata-pool-name
-
OpenShift Container Platform の RHCS デプロイメント中に作成した CephFS メタデータプールの名前で、デフォルトプールは
cephfs.meta
と呼ばれます。
ブートストラップノード ceph1 で次のコマンドを実行して、datacenter1 と datacenter2 の RGW エンドポイントの IP を取得します。
ceph orch ps | grep rgw.objectgw
出力例:
rgw.objectgw.ceph3.mecpzm ceph3 *:8080 running (5d) 31s ago 7w 204M - 16.2.7-112.el8cp rgw.objectgw.ceph6.mecpzm ceph6 *:8080 running (5d) 31s ago 7w 204M - 16.2.7-112.el8cp
host ceph3 host ceph6
出力例:
ceph3.example.com has address 10.0.40.24 ceph6.example.com has address 10.0.40.66
最初の ocp 管理クラスター cluster1 用に設定されたパラメーターを使用して、ceph-external-cluster-details-exporter.py を実行します。
python3 ceph-external-cluster-details-exporter.py --rbd-data-pool-name rbdpool --cephfs-filesystem-name cephfs --cephfs-data-pool-name cephfs.cephfs.data --cephfs-metadata-pool-name cephfs.cephfs.meta --rgw-endpoint 10.0.40.24:8080 --run-as-user client.odf.cluster1 > ocp-cluster1.json
最初の ocp 管理クラスター cluster2 用に設定されたパラメーターを使用して、ceph-external-cluster-details-exporter.py を実行します。
python3 ceph-external-cluster-details-exporter.py --rbd-data-pool-name rbdpool --cephfs-filesystem-name cephfs --cephfs-data-pool-name cephfs.cephfs.data --cephfs-metadata-pool-name cephfs.cephfs.meta --rgw-endpoint 10.0.40.66:8080 --run-as-user client.odf.cluster2 > ocp-cluster2.json
-
ブートストラップクラスター (ceph1) で生成された 2 つのファイル
ocp-cluster1.json
とocp-cluster2.json
をローカルマシンに保存します。 -
外部 ODF がデプロイされている
cluster1
の OCP コンソールでファイルocp-cluster1.json
の内容を使用します。 -
外部 ODF がデプロイされている
cluster2
の OCP コンソールでファイルocp-cluster2.json
の内容を使用します。
- 設定を確認し、Create StorageSystem を選択します。
以下のコマンドを使用して、各管理対象クラスターで OpenShift Data Foundation が正常にデプロイされたことを検証します。
$ oc get storagecluster -n openshift-storage ocs-external-storagecluster -o jsonpath='{.status.phase}{"\n"}'
Multicloud Gateway (MCG) の場合:
$ oc get noobaa -n openshift-storage noobaa -o jsonpath='{.status.phase}{"\n"}'
ステータス結果が Primary managed cluster と Secondary managed cluster の両方のクエリーに対して
Ready
である場合は、次の手順に進みます。
OpenShift Web コンソールで、Installed Operators → OpenShift Data Foundation → Storage System → ocs-storagecluster-storagesystem
→ Resources に移動し、StorageCluster
の Status が Ready
で、横に緑色のチェックマークがあることを確認します。
4.7. OpenShift Data Foundation Multicluster Orchestrator Operator のインストール
OpenShift Data Foundation のマルチクラスターオーケストレーターは、ハブクラスターの OpenShift Container Platform の OperatorHub からインストールされるコントローラーです。
手順
- ハブクラスター で OperatorHub に移動し、キーワードフィルターを使用して ODF Multicluster Orchestrator を検索します。
- ODF Multicluster Orchestrator タイルをクリックします。
すべてのデフォルト設定をそのままにして、Install をクリックします。
Operator のリソースが
openshift-operators
プロジェクトにインストールされ、すべてのnamespace で利用できることを確認してください。注記ODF Multicluster Orchestrator
レーターは、依存関係として RHACM ハブクラスターに Openshift DR ハブ Operator もインストールします。Operator Pod が
Running
状態であることを確認します。OpenShift DR Hub Operator
も同時にopenshift-operators
namespace にインストールされます。$ oc get pods -n openshift-operators
出力例:
NAME READY UP-TO-DATE AVAILABLE AGE odf-multicluster-console-6845b795b9-blxrn 1/1 Running 0 4d20h odfmo-controller-manager-f9d9dfb59-jbrsd 1/1 Running 0 4d20h ramen-hub-operator-6fb887f885-fss4w 2/2 Running 0 4d20h
4.8. クラスター全体での SSL アクセスの設定
プライマリークラスターとセカンダリークラスター 間のネットワーク (SSL) アクセスを設定して、メタデータを代替クラスターのマルチクラウドゲートウェイ (MCG) object bucket
に安全なトランスポートプロトコルを使用して格納し、ハブクラスター に格納してオブジェクトバケットへのアクセスを検証できるようにします。
すべての OpenShift クラスターが環境の署名済みの有効な証明書セットを使用してデプロイされる場合は、このセクションを省略できます。
手順
プライマリーマネージドクラスター の Ingress 証明書を展開し、出力を
primary.crt
に保存します。$ oc get cm default-ingress-cert -n openshift-config-managed -o jsonpath="{['data']['ca-bundle\.crt']}" > primary.crt
セカンダリーマネージドクラスターの Ingress 証明書を抽出し、出力を
secondary.crt
に保存します。$ oc get cm default-ingress-cert -n openshift-config-managed -o jsonpath="{['data']['ca-bundle\.crt']}" > secondary.crt
リモートクラスターの証明書バンドルを保持する新しい ConfigMap ファイルを、ファイル名
cm-clusters-crt.yaml
で作成します。注記この例のように、クラスターごとに 3 つ以上の証明書が存在する可能性があります。また、以前作成した
primary.crt
ファイルおよびsecondary.crt
ファイルから、証明書の内容をコピーして貼り付けた後に、証明書の内容が正しくインデントされていることを確認します。apiVersion: v1 data: ca-bundle.crt: | -----BEGIN CERTIFICATE----- <copy contents of cert1 from primary.crt here> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <copy contents of cert2 from primary.crt here> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <copy contents of cert3 primary.crt here> -----END CERTIFICATE---- -----BEGIN CERTIFICATE----- <copy contents of cert1 from secondary.crt here> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <copy contents of cert2 from secondary.crt here> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <copy contents of cert3 from secondary.crt here> -----END CERTIFICATE----- kind: ConfigMap metadata: name: user-ca-bundle namespace: openshift-config
プライマリーマネージドクラスター、セカンダリーマネージドクラスター、ハブクラスター で ConfigMap を作成します。
$ oc create -f cm-clusters-crt.yaml
出力例:
configmap/user-ca-bundle created
プライマリーマネージドクラスター、セカンダリーマネージドクラスター、および ハブクラスター 上のデフォルトのプロキシーリソースにパッチを適用します。
$ oc patch proxy cluster --type=merge --patch='{"spec":{"trustedCA":{"name":"user-ca-bundle"}}}'
出力例:
proxy.config.openshift.io/cluster patched
4.9. マルチクラスター Web コンソールの有効化
これは、データポリシーまたは DRPolicy を作成する前に必要な新しい機能です。Hub クラスター でのみ必要で、RHACM 2.5 をインストールする必要があります。
マルチクラスターコンソールは、テクノロジープレビュー機能としてのみご利用いただけます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は実稼働環境でこれらを使用することを推奨していません。これらの機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。
手順
- 管理 → クラスター設定 → 設定 → FeatureGate に移動します。
YAML テンプレートを次のように編集します。
[...] spec: featureSet: TechPreviewNoUpgrade
- Save をクリックして、RHACM コンソール内のすべてのクラスターに対してマルチクラスターコンソールを有効にします。Nodes が Ready になるまで待ちます。
- Web コンソールを更新し、管理対象クラスター名が All Clusters の下にリストされていることを確認します。
このフィーチャーゲートは実稼働クラスターで設定しないでください。機能ゲートの適用後にクラスターのアップグレードはできず、元に戻すことはできません。
4.10. ハブクラスターでの障害復旧ポリシーの作成
Openshift 災害復旧ポリシー (DRPolicy) リソースは、災害復旧ソリューションに参加する OpenShift Container Platform クラスターと目的のレプリケーション間隔を指定します。DRPolicy は、ユーザーが障害復旧ソリューションを必要とするアプリケーションに適用できるクラスタースコープのリソースです。
ODF MultiCluster Orchestrator Operator は、Multicluster Web コンソール を介して、各 DRPolicy および対応する DRClusters の作成を容易にします。
前提条件
- 2 つのマネージドクラスターの最小セットがあることを確認します。
マルチクラスター Web コンソール からすべてのクラスターにログインしてください。
- すべてのクラスター をクリックして、管理対象クラスターのリストを展開します。
- すべてのクラスター の下に一覧表示されている管理対象クラスターごとに、<cluster_name> をクリックし、選択したクラスターの資格情報を使用してログインできるログイン画面が表示されるまで待ちます。
手順
OpenShift コンソール で、すべてのクラスター に移動します。
- Data Services に移動し、データポリシー をクリックします。
- DR ポリシーの作成 をクリックします。
-
ポリシー名 を入力します。各 DRPolicy に一意の名前が付けられていることを確認します (例:
ocp4perf1-ocp4perf2
)。 - この新しいポリシーが関連付けられる管理対象クラスターのリストから 2 つのクラスターを選択します。
-
レプリケーションポリシー は、選択した OpenShift クラスターに基づいて
sync
するように自動的に設定されます。 - Create をクリックします。
DRPolicy が正常に作成されたことを確認します。作成された DRPolicy リソースごとに、Hub クラスター でこのコマンドを実行します。
注記<drpolicy_name> を一意の名前に置き換えます。
$ oc get drpolicy <drpolicy_name> -o jsonpath='{.status.conditions[].reason}{"\n"}'
出力例:
Succeeded
注記DRPolicy が作成されると、それに伴って 2 つの DRCluster リソースも作成されます。3 つのリソースすべてが検証され、ステータスが
Succeeded
と表示されるまで、最大 10 分かかる場合があります。ハブクラスター から プライマリーマネージドクラスター と セカンダリーマネージドクラスター の両方へのオブジェクトバケットアクセスを確認します。
ハブクラスター上の DRClusters の名前を取得します。
$ oc get drclusters
出力例:
NAME AGE ocp4perf1 4m42s ocp4perf2 4m42s
この DRCluster 検証コマンドを使用して、各マネージドクラスターで作成された各バケットへの S3 アクセスを確認します。
注記<drcluster_name> を一意の名前に置き換えます。
$ oc get drcluster <drcluster_name> -o jsonpath='{.status.conditions[2].reason}{"\n"}'
出力例:
Succeeded
注記ハブクラスター の両方の DRClusters に対してコマンドを実行してください。
OpenShift DR Cluster Operator のインストールが プライマリー管理対象クラスター および セカンダリー管理対象 クラスターで成功したことを確認します。
$ oc get csv,pod -n openshift-dr-system
出力例:
NAME DISPLAY VERSION REPLACES PHASE clusterserviceversion.operators.coreos.com/odr-cluster-operator.v4.11.0 Openshift DR Cluster Operator 4.11.0 Succeeded NAME READY STATUS RESTARTS AGE pod/ramen-dr-cluster-operator-5564f9d669-f6lbc 2/2 Running 0 5m32s
各管理対象クラスターの OperatorHub に
OpenShift DR Cluster Operator
が正常にインストールされていることを確認することもできます。
4.11. フェンシングの自動化のために DRClusters を設定する
この設定は、アプリケーションのフェイルオーバーの前にフェンシングを有効にするために必要です。災害に見舞われたクラスターから永続ボリュームへの書き込みを防ぐために、OpenShift DR は Red Hat Ceph Storage (RHCS) に、クラスターのノードを RHCS 外部ストレージからフェンシングするように指示します。このセクションでは、DRCluster のノードに IP または IP 範囲を追加する方法について説明します。
4.11.1. ノード IP アドレスを DRClusters に追加する
プライマリーマネージドクラスター および セカンダリーマネージドクラスター でこのコマンドを実行して、マネージドクラスター内のすべての OpenShift ノードの IP アドレス を見つけます。
$ oc get nodes -o jsonpath='{range .items[*]}{.status.addresses[?(@.type=="ExternalIP")].address}{"\n"}{end}'
出力例:
10.70.56.118 10.70.56.193 10.70.56.154 10.70.56.242 10.70.56.136 10.70.56.99
IP addresses
を取得したら、管理対象クラスターごとにDRCluster
リソースを変更できます。ハブクラスターで DRCluster 名を見つけます。
$ oc get drcluster
出力例:
NAME AGE ocp4perf1 5m35s ocp4perf2 5m35s
<drcluster_name>
を一意の名前に置き換えた後、各 DRCluster を編集して一意の IP アドレスを追加します。$ oc edit drcluster <drcluster_name>
apiVersion: ramendr.openshift.io/v1alpha1 kind: DRCluster metadata: [...] spec: s3ProfileName: s3profile-<drcluster_name>-ocs-external-storagecluster ## Add this section cidrs: - <IP_Address1>/32 - <IP_Address2>/32 - <IP_Address3>/32 - <IP_Address4>/32 - <IP_Address5>/32 - <IP_Address6>/32 [...]
出力例:
drcluster.ramendr.openshift.io/ocp4perf1 edited
6 つを超える IP アドレスが存在する可能性があります。
ピア DRCluster リソース (ocp4perf2 など) の セカンダリー管理クラスター の IP addresses
についても、この DRCluster 設定を変更します。
4.11.2. DRClusters にフェンシングアノテーションを追加する
次の注釈をすべての DRCluster リソースに追加します。これらの注釈には、これらの手順の後半で作成される NetworkFence リソースに必要な詳細が含まれています (アプリケーションのフェイルオーバーをテストする前に)。
<drcluster_name> を一意の名前に置き換えます。
$ oc edit drcluster <drcluster_name>
apiVersion: ramendr.openshift.io/v1alpha1 kind: DRCluster metadata: ## Add this section annotations: drcluster.ramendr.openshift.io/storage-clusterid: openshift-storage drcluster.ramendr.openshift.io/storage-driver: openshift-storage.rbd.csi.ceph.com drcluster.ramendr.openshift.io/storage-secret-name: rook-csi-rbd-provisioner drcluster.ramendr.openshift.io/storage-secret-namespace: openshift-storage [...]
出力例:
drcluster.ramendr.openshift.io/ocp4perf1 edited
両方の DRCluster リソースにこれらのアノテーションを必ず追加してください (例: ocp4perf1
と ocp4perf2
)。
4.12. 障害復旧ソリューションをテストするためのサンプルアプリケーションを作成する
OpenShift Data Foundation 災害復旧 (DR) ソリューションは、RHACM によって管理されるアプリケーションの災害復旧をサポートします。詳細については、アプリケーションの管理 を参照してください。
このソリューションは、アプリケーションがフェイルオーバーまたは再配置の要件のために DRPolicy 内のクラスター間で移動されるときに、PlacementRule を使用して RHACM アプリケーションの配置を調整します。
以下のセクションでは、DRPolicy をアプリケーションに適用する方法と、クラスターが使用不可の間およびその後にアプリケーションの配置ライフサイクルを管理する方法について詳しく説明します。
OpenShift Data Foundation DR ソリューションは、ArgoCD 経由でデプロイされるアプリケーションに必要な ApplicationSet をサポートしていません。
4.12.1. サンプルアプリケーションの作成
プライマリーマネージドクラスターからセカンダリーマネージドクラスターおよび replocate
への failover
およびフェイルバックをテストするには、単純なアプリケーションが必要です。
前提条件
一般消費用のアプリケーションを作成する場合は、次のことを確認してください。
- アプリケーションは 1 つのクラスターのみにデプロイされます。
- アプリケーションは、DRPolicy をアプリケーションに適用する前にデプロイされます。
-
busybox
というサンプルアプリケーションを例として使用します。 - アプリケーションのすべての外部ルートが、アプリケーションがフェイルオーバーまたは再配置されたときのトラフィックリダイレクト用に Global Traffic Manager (GTM) または Global Server Load Balancing (GLSB) サービスを使用して設定されていることを確認します。
手順
まだログインしていない場合は、OpenShift 認証情報を使用して RHACM コンソールにログインします。
$ oc get route multicloud-console -n open-cluster-management -o jsonpath --template="https://{.spec.host}/multicloud/applications{'\n'}"
出力例:
https://multicloud-console.apps.perf3.example.com/multicloud/applications
- Applications に移動し、Create application をクリックします。
- 種類は Subscriptionを選択します。
-
アプリケーションの Name (
busybox
など) および Namespace (busybox-sample
など) を入力します。 -
Repository location for resources セクションで Repository type
Git
を選択します。 サンプルアプリケーションの github Branch および Path で、 Git リポジトリー URL を入力します。リソース
busybox
Pod および PVC が作成されます。サンプルアプリケーションリポジトリーを
https://github.com/red-hat-storage/ocm-ramen-samples/tree/release-4.11
として使用します。Branch はmain
、Path はbusybox-odr-metro
です。指定されたラベルに一致するクラスターにのみアプリケーションリソースをデプロイする が表示されるまでフォームを下にスクロールし、RHACM クラスターリストビューの プライマリー管理対象クラスター 名に値が設定されたラベルを追加します。
右上隅にある 作成 をクリックします。
後続の画面で、
Topology
タブに移動します。アプリケーショントポロジーのチェックマークがすべて緑であることが確認できるはずです。注記詳細な情報を表示するには、トポロジー要素のいずれかをクリックすると、トポロジービューの右側にウィンドウが表示されます。
サンプルアプリケーションのデプロイを検証しています。
busybox
アプリケーションが優先クラスターにデプロイされたので、デプロイを検証できます。busybox
が RHACM によってデプロイされたマネージドクラスターにログオンします。$ oc get pods,pvc -n busybox-sample
出力例:
NAME READY STATUS RESTARTS AGE pod/busybox 1/1 Running 0 6m NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/busybox-pvc Bound pvc-a56c138a-a1a9-4465-927f-af02afbbff37 5Gi RWO ocs-storagecluster-ceph-rbd 6m
4.12.2. DRPolicy をサンプルアプリケーションに適用する
- ハブクラスターで、マルチクラスター Web コンソールに戻り、All Clusters に移動します。
- All Clusters の下にリストされているすべてのクラスターにログインします。
- Data Services に移動し、Data policies をクリックします。
DRPolicy の最後にあるアクションメニューをクリックして、使用可能なアクションのリストを表示します。
- Apply DRPolicy をクリックします。
Apply DRPolicy モーダルが表示されたら、
busybox
アプリケーションを選択し、PVC ラベル をappname=busybox
として入力します。注記同じアプリケーションまたは複数のアプリケーションで複数の配置ルールが選択されている場合は、アプリケーションの namespace 内のすべての PVC がデフォルトで保護されます。
- Apply をクリックします。
DRPlacementControl
またはDRPC
が ハブクラスター のbusybox-sample
namespace に作成され、CURRENTSTATE がDeployed
として表示されていることを確認します。このリソースは、このアプリケーションのフェイルオーバーと再配置の両方のアクションに使用されます。$ oc get drpc -n busybox-sample
出力例:
NAME AGE PREFERREDCLUSTER FAILOVERCLUSTER DESIREDSTATE CURRENTSTATE busybox-placement-1-drpc 6m59s ocp4perf1 Deployed
4.12.3. サンプルアプリケーションの削除
RHACM コンソールを使用してサンプルアプリケーション busybox
を削除できます。
サンプルアプリケーションを削除する手順は、フェイルオーバーと再配置のテストが完了し、アプリケーションを RHACM とマネージドクラスターから削除する準備ができるまで実行しないでください。
手順
- RHACM コンソールで、Applications に移動します。
-
削除するサンプルアプリケーションを検索します (例:
busybox
)。 - 削除するアプリケーションの横にある Action メニュー (⋮) をクリックします。
Delete application をクリックします。
Delete application を選択すると、アプリケーション関連のリソースも削除すべきかどうかを求める新規画面が表示されます。
- Remove application related resources チェックボックスを選択して、Subscription および PlacementRule を削除します。
- Delete をクリックします。これにより、Primary マネージドクラスター (またはアプリケーションが実行しているクラスター) の busybox アプリケーションが削除されます。
RHACM コンソールを使用して削除されたリソースのほかに、
busybox
アプリケーションの削除後にDRPlacementControl
も削除する必要があります。-
ハブクラスターの OpenShift Web コンソールにログインし、プロジェクト
busybox-sample
の Installed Operators に移動します。 - OpenShift DR Hub Operator をクリックした後、DRPlacementControl タブをクリックします。
-
削除する
busybox
アプリケーション DRPlacementControl の横にあるアクションメニュー (⋮) をクリックします。 - Delete DRPlacementControl をクリックします。
- Delete をクリックします。
-
ハブクラスターの OpenShift Web コンソールにログインし、プロジェクト
このプロセスを使用して、DRPlacementControl
リソースでアプリケーションを削除できます。
4.13. マネージドクラスター間のアプリケーションのフェイルオーバー
フェイルオーバーは、何らかの理由で管理対象クラスターが使用できなくなったときに実行されます。
本セクションでは、busybox サンプルアプリケーションをフェイルオーバーする方法を説明します。フェイルオーバー方式はアプリケーションベースです。この方法で保護される各アプリケーションは、アプリケーション名前空間に対応する DRPlacementControl
リソースを持っている必要があります。
前提条件
- ターゲットクラスターのフェンシングが解除されている間に、アプリケーションが実行しているプライマリークラスターがフェンスされていることを確認します。
4.13.1. Enable fencing
アプリケーションが現在実行されている OpenShift クラスターをフェイルオーバーするには、すべてのアプリケーションを外部の OpenShift Data Foundation 外部ストレージクラスターとの通信からフェンスする必要があります。これは、両方の管理対象クラスターから同じ永続ボリュームへの同時書き込みを防ぐために必要です。
Fence
への OpenShift クラスターは、アプリケーションが現在実行されているクラスターです。
手順
Hub クラスター で、このクラスターの DRCluster リソース を編集します。
注意管理対象クラスターがフェンシングされると、アプリケーションから OpenShift Data Foundation 外部ストレージクラスターへの すべての 通信が失敗し、現在フェンシングされているクラスターで一部の Pod が
異常
な状態になります (例:CreateContainerError
、CrashLoopBackOff)。注記<drcluster_name> を一意の名前に置き換えます。
$ oc edit drcluster <drcluster_name>
apiVersion: ramendr.openshift.io/v1alpha1 kind: DRCluster metadata: [...] spec: ## Add this line clusterFence: Fenced cidrs: [...] [...]
出力例:
drcluster.ramendr.openshift.io/ocp4perf1 edited
プライマリーマネージドクラスター の ハブクラスター でフェンシングの状態を確認します。
注記<drcluster_name> を一意の名前に置き換えます。
$ oc get drcluster.ramendr.openshift.io <drcluster_name> -o jsonpath='{.status.phase}{"\n"}'
出力例:
Fenced
4.13.2. DRPlacementControl を変更してフェイルオーバーする
前提条件
フェイルオーバーを開始する前に、ハブクラスター の
busybox-sample
名前空間のDRPlacementControl
またはDRPC
の PEER READY がTrue
であることを確認します。$ oc get drpc -n busybox-sample -o wide
出力例:
NAME AGE PREFERREDCLUSTER FAILOVERCLUSTER DESIREDSTATE CURRENTSTATE PROGRESSION START TIME DURATION PEER READY busybox-placement-1-drpc 6m59s ocp4perf1 Deployed Completed <timestamp> <duration> True
PEER READY が true でない場合は、可能な回避策について、リリースノート に記載されているディザスタリカバリー関連の既知の問題を参照してください。
手順
- Hub クラスターで、Installed Operators に移動し、Openshift DR Hub Operator をクリックします。
DRPlacementControl タブをクリックします。
注記busybox-sample 名前空間にいることを確認してください。
-
DRPC
busybox-placement-1-drpc
をクリックしてから、YAML ビューをクリックします。 以下のスクリーンショットに示すように、
アクション
とfailoverCluster
の詳細を追加します。DRPlacementControl add action Failover
failoverCluster
は、二次管理クラスター の RHACM クラスター名である必要があります。- Save をクリックします。
Hub クラスター の busybox
-sample
名前空間にあるDRPlacementControl
またはDRPC
の CURRENTSTATE が FailedOver であることを確認します。$ oc get drpc -n busybox-sample (update examples as required)
出力例:
NAME AGE PREFERREDCLUSTER FAILOVERCLUSTER DESIREDSTATE CURRENTSTATE busybox-placement-1-drpc 6m59s ocp4perf1 ocp4perf2 Failover FailedOver
YAML ファイルで指定されているフェールオーバークラスター
ocp4perf2
について、アプリケーションのbusybox
が セカンダリーマネージドクラスター で実行されていることを確認します。$ oc get pods,pvc -n busybox-sample
出力例:
NAME READY STATUS RESTARTS AGE pod/busybox 1/1 Running 0 35s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/busybox-pvc Bound pvc-79f2a74d-6e2c-48fb-9ed9-666b74cfa1bb 5Gi RWO ocs-storagecluster-ceph-rbd 35s
プライマリーマネージドクラスター で
busybox
が実行されているかどうかを確認します。busybox
アプリケーションは、このマネージドクラスターで実行されていないはずです。$ oc get pods,pvc -n busybox-sample
出力例:
No resources found in busybox-sample namespace.
- アプリケーションの DNS ルートが正しく設定されているかどうかを確認します。外部ルートが設定されていない場合は、Global Traffic Manager (GTM) または Global Server Load Balancing (GLSB) サービスを使用してルートを再設定できます。
リリースノートの 既知の問題 セクションに記載されている既知の DR の問題に注意してください。
4.14. マネージドクラスター間のアプリケーションの再配置
再配置操作はフェイルオーバーと非常に似ています。再配置はアプリケーションベースで、DRPlacementControl
を使用して再配置をトリガーします。
障害が発生したクラスターが使用可能になり、障害が発生したクラスターでアプリケーションリソースがクリーンアップされると、再配置が実行されます。
この場合、アクションは preferredCluster
に戻って Relocate となります。
前提条件
- プライマリークラスターとターゲットクラスターの両方がフェンスされていないことを確認します。
4.14.1. フェンシングの無効化
failback または再配置アクションが成功する前に、プライマリー管理対象クラスターの DRCluster を unfenced
にする必要があります。
Unfenced
にする OpenShift クラスターは、アプリケーションが現在実行されていないクラスターであり、以前に Fenced
されたクラスターです。
手順
Hub クラスターで、このクラスターの DRCluster リソース を編集します。
注記<drcluster_name> を一意の名前に置き換えます。
$ oc edit drcluster <drcluster_name>
apiVersion: ramendr.openshift.io/v1alpha1 kind: DRCluster metadata: [...] spec: cidrs: [...] ## Modify this line clusterFence: Unfenced [...] [...]
出力例:
drcluster.ramendr.openshift.io/ocp4perf1 edited
Fenced
であった OpenShift Container Platform ノードを正常に再起動します。リカバリーオーケストレーションの障害がさらに発生しないように、フェンシング解除後に I/O 操作を再開するには、再起動が必要です。ノードの 正常な再起動 の手順に従って、クラスターのすべてのワーカーノードを再起動します。注記ノードで再起動して uncordon 操作を実行する前に、すべてのノードが最初に接続解除され、ドレインされていることを確認してください。
すべての OpenShift ノードが再起動され、
Ready
ステータスになったら、プライマリーマネージドクラスター (または Unfenced されたクラスター) でこのコマンドを実行して、すべての Pod が正常な状態であることを確認します。oc get pods -A | egrep -v 'Running|Completed'
出力例:
NAMESPACE NAME READY STATUS RESTARTS AGE
次のステップに進む前に、このクエリーの出力は 0 Pod である必要があります。
重要ストレージ通信が切断されたために Pod がまだ異常な状態にある場合は、続行する前にトラブルシューティングを行って解決してください。ストレージクラスターは OpenShift の外部にあるため、OpenShift アプリケーションを正常に動作させるには、サイトの停止後にストレージクラスターを適切に復元する必要もあります。
または、OpenShift Web コンソールのダッシュボードと 概要 タブを使用して、アプリケーションと外部 ODF ストレージクラスターの正常性を評価することもできます。OpenShiftDataFoundation ダッシュボードの詳細は、Storage → Data Foundation に移動すると表示されます。
Unfenced
クラスターが正常な状態であることを確認します。プライマリーマネージドクラスターのハブクラスターでフェンシングの状態を確認します。注記<drcluster_name> を一意の名前に置き換えます。
$ oc get drcluster.ramendr.openshift.io <drcluster_name> -o jsonpath='{.status.phase}{"\n"}'
出力例:
Unfenced
4.14.2. DRPlacementControl を Relocate に変更します。
前提条件
- 両方のマネージドクラスターが稼働中であることを確認します。
再配置を開始する前に、ハブクラスター の
busybox-sample
名前空間のDRPlacementControl
またはDRPC
の PEER READY がTrue
であることを確認します。$ oc get drpc -n busybox-sample -o wide
出力例:
NAME AGE PREFERREDCLUSTER FAILOVERCLUSTER DESIREDSTATE CURRENTSTATE PROGRESSION START TIME DURATION PEER READY busybox-placement-1-drpc 6m59s ocp4perf1 ocp4perf2 Failover FailedOver Completed <timestamp> <duration> True
PEER READY が true でない場合は、可能な回避策について、リリースノート に記載されているディザスタリカバリー関連の既知の問題を参照してください。
手順
- Hub クラスターで、Installed Operators に移動し、Openshift DR Hub Operator をクリックします。
- DRPlacementControl タブをクリックします。
-
DRPC
busybox-placement-1-drpc
をクリックしてから、YAML ビューをクリックします。 action を
Relocate
に変更しますDRPlacementControl modify action to Relocate
- Save をクリックします。
Hub クラスター の
busybox-sample
名前空間にあるDRPlacementControl
またはDRPC
の CURRENTSTATE がRelocated
であることを確認します。$ oc get drpc -n busybox-sample
出力例:
NAME AGE PREFERREDCLUSTER FAILOVERCLUSTER DESIREDSTATE CURRENTSTATE busybox-placement-1-drpc 6m59s ocp4perf1 ocp4perf2 Relocate Relocated
アプリケーションの
busybox
が現在 プライマリーマネージドクラスター で実行されているかどうかを確認します。再配置は、YAML ファイルで指定されている preferredClusterocp4perf1 に対して行わ
れます。これは、フェイルオーバー操作の前にアプリケーションが実行されていた場所です。$ oc get pods,pvc -n busybox-sample
出力例:
NAME READY STATUS RESTARTS AGE pod/busybox 1/1 Running 0 60s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/busybox-pvc Bound pvc-79f2a74d-6e2c-48fb-9ed9-666b74cfa1bb 5Gi RWO ocs-storagecluster-ceph-rbd 61s
busybox
がセカンダリーマネージドクラスターで実行しているかどうかを確認します。busybox
アプリケーションは、このマネージドクラスターで実行されていないはずです。$ oc get pods,pvc -n busybox-sample
出力例:
No resources found in busybox-sample namespace.
- アプリケーションの DNS ルートが正しく設定されているかどうかを確認します。外部ルートが設定されていない場合は、Global Traffic Manager (GTM) または Global Server Load Balancing (GLSB) サービスを使用してルートを再設定できます。
リリースノートの 既知の問題 セクションに記載されている既知の DR の問題に注意してください。
第5章 障害復旧のトラブルシューティング
5.1. Regional-DR のトラブルシューティング
5.1.1. 一部のイメージで RBD ミラーリングのスケジューリングが停止する
- 問題
一部のイメージで RBD ミラーリングスケジューリングが停止する一般的な原因がいくつかあります。
アプリケーションをミラーリング用にマークした後、何らかの理由で複製されない場合は、ツールボックス Pod を使用して次のコマンドを実行し、どのイメージのスケジューリングが停止されているかを確認します。
$ rbd snap ls <poolname/imagename> –all
- 解決方法
- プライマリークラスターでマネージャーデーモンを再起動します。
- プライマリークラスター上の影響を受けるイメージのミラーリングを無効にして、すぐに再度有効にします。
5.1.2. 移転失敗
- 問題
- ピア (ターゲットクラスター) がクリーンな状態になる前に再配置が開始されると、再配置は永遠に停止します。
- 解決方法
次のコマンドを実行して、状態の ステータス を確認します。
$ oc get drpc -A -o wide
DRPC.Spec.Action
をFailover
に戻し、PeerReady
条件のステータスがTRUE
になるまで待ちます。アクションを変更するには、次のコマンドを使用します。$ oc patch drpc <drpc_name> --type json -p "[{'op': 'add', 'path': '/spec/failoverCluster', 'value': "<failoverCluster_name>"}]" -n <application_namespace> $ oc patch drpc <drpc_name> --type json -p "[{'op': 'add', 'path': '/spec/action', 'value': 'Failover'}]" -n <application_namespace>
フェイルオーバー検証
ワークロードがフェイルオーバーしたかどうかを確認するには、次のコマンドを実行して、DRPC リソースで利用可能な状態のステータスを確認します。
JSONPATH='{range @.status.conditions[*]}{@.type}={@.status};{end}' && oc get drpc busybox-drpc -n busybox-sample -o jsonpath="$JSONPATH" | grep "Available=True"
BZ リファレンス: 2056871
5.1.3. rbd-mirror
デーモンのヘルスが警告状態です
- 問題
ミラーサービス
::get_mirror_service_status
がCeph
モニターを呼び出してrbd-mirror
のサービスステータスを取得すると、WARNING が報告されるケースが多数あるようです。ネットワークの切断後、
rbd-mirror
デーモンのヘルスはwarning
状態になりますが、両方の管理対象クラスター間の接続は良好です。- 解決方法
ツールボックスで次のコマンドを実行し、
leader:false
を探します。rbd mirror pool status --verbose ocs-storagecluster-cephblockpool | grep 'leader:'
出力に次のように表示される場合:
leader: false
これは、デーモンの起動に問題があることを示しており、最も可能性の高い根本原因は、セカンダリークラスターへの確実な接続の問題である可能性があります。
回避策: Pod を削除するだけで
rbd-mirror
Pod を別のノードに移動し、別のノードで再スケジュールされていることを確認します。leader: true
または出力なし
BZ リファレンス: 2118627
5.1.4. フェイルオーバー後に statefulset
アプリケーションがスタックする
- 問題
-
アプリケーションは、フェイルオーバーまたは再配置後に
terminating
状態にあります。 - 解決方法
次のコマンドを使用して、アプリケーションの persistent volume claim (PVC) を削除します。
$ oc delete pvc <namespace/name>
BZ リファレンス: 2087782
5.1.5. フェイルオーバー後にアプリケーションが実行されていない
- 問題
- アプリケーションのフェイルオーバー後、ミラーリングされた RBD をアタッチできますが、まだ使用中のファイルシステムをマウントすることはできません。
- 解決方法
アプリケーション Pod が上記のエラーから回復できるまで、RBD ミラーデーモンのデプロイメントを
0
にスケールダウンします。$ oc scale deployment rook-ceph-rbd-mirror-a -n openshift-storage --replicas=0
復旧後、RBD ミラーデーモンのデプロイメントを
1
に戻します。$ oc scale deployment rook-ceph-rbd-mirror-a -n openshift-storage --replicas=1
BZ リファレンス: 2007376
5.2. Metro-DR のトラブルシューティング
5.2.1. フェイルオーバー後にステートフルセットアプリケーションがスタックする
- 問題
- アプリケーションは、フェイルオーバーまたは再配置後に終了状態にあります。
- 解決方法
ワークロードで
StatefulSets
が使用されている場合は、フェイルバックまたは別のクラスターへの再配置の前に、次のコマンドを実行します。$ oc get drpc -n <namespace> -o wide
- PeerReady が TRUE の場合、フェイルバックまたは再配置を続行できます。
PeerReady が FALSE の場合、ピアクラスターで次のコマンドを実行します。
$ oc get pvc -n <namespace>
StatefulSet に属する名前空間の制限付き PVC ごとに、次を実行します。
$ oc delete pvc <pvcname> -n namespace
すべての PVC が削除されると、ボリュームレプリケーショングループ (VRG) はセカンダリーに移行してから削除されます。
次のコマンドを再度実行します
$ oc get drpc -n <namespace> -o wide
数秒から数分後、PeerReady 列が
TRUE
に変わります。その後、フォールバックまたは再配置を続行できます。
BZ リファレンス: 2118270
5.2.2. DR ポリシーは、同じ namespace 内のすべてのアプリケーションを保護します
- 問題
-
DR ポリシーで使用するアプリケーションが 1 つだけ選択されている場合でも、同じ名前空間内のすべてのアプリケーションが保護されます。これにより、複数のワークロードで
DRPlacementControl
spec.pvcSelector
に一致する PVC が生成されるか、すべてのワークロードでセレクターが欠落している場合、レプリケーション管理が各 PVC を複数回管理し、個々のDRPlacementControl
アクションに基づいてデータの破損または無効な操作を引き起こす可能性があります。 - 解決方法
-
ワークロードに属する PVC に一意のラベルを付け、選択したラベルを DRPlacementControl
spec.pvcSelector
として使用して、どの DRPlacementControl がネームスペース内の PVC のどのサブセットを保護および管理するかを明確にします。ユーザーインターフェイスを使用して DRPlacementControl のspec.pvcSelector
フィールドを指定することはできません。したがって、そのようなアプリケーションの DRPlacementControl を削除し、コマンドラインを使用して作成する必要があります。
BZ リファレンス: 2111163
5.2.3. アプリケーションのフェイルバック中に Relocating 状態でスタックする
- 問題
-
この問題は、アプリケーションのフェイルオーバーおよびフェイルバックを実行した後に発生する可能性があります (すべてのノードまたはクラスターが稼働中)。フェールバックアプリケーションを実行すると、PV の復元が完了する
Waiting
というメッセージが表示され、Relocating
状態でスタックします。 - 解決方法
- S3 クライアントまたは同等のサービスを使用して、重複する PV オブジェクトを s3 ストアからクリーンアップします。タイムスタンプがフェールオーバーまたは再配置の時刻に近いものだけを保持します。
BZ リファレンス: 2120201