Regional-DR 向け Advanced Cluster Management と OpenShift Data Foundation の設定
災害復旧機能を備えたストレージインフラストラクチャーを提供するために、2 つの異なる地理的ロケーション間で OpenShift Data Foundation を設定する方法
概要
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
Red Hat ドキュメントへのフィードバック (英語のみ)
弊社のドキュメントについてのご意見をお聞かせください。ドキュメントの改善点があれば、ぜひお知らせください。フィードバックをお寄せいただくには、以下をご確認ください。
特定の部分についての簡単なコメントをお寄せいただく場合は、以下をご確認ください。
- ドキュメントの表示が Multi-page HTML 形式になっていていることを確認してください。ドキュメントの右上隅に Feedback ボタンがあることを確認してください。
- マウスカーソルを使用して、コメントを追加するテキストの部分を強調表示します。
- 強調表示されたテキストの下に表示される Add Feedback ポップアップをクリックします。
- 表示される指示に従ってください。
より詳細なフィードバックをお寄せいただく場合は、Bugzilla のチケットを作成してください。
- Bugzilla の Web サイトに移動します。
- Component セクションで、documentation を選択します。
- Description フィールドに、ドキュメントの改善に向けたご提案を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- Submit Bug をクリックします。
第1章 Regional-DR の概要
障害復旧は、自然または人が原因の障害からビジネスクリティカルなアプリケーションを復旧し、継続する機能です。これは、深刻な障害イベント中にビジネス運営の継続性を確保できるように設計されている、主要な組織の全体的なビジネス継続ストラテジーです。
Regional-DR 機能は、地理的に分散しているサイト間でボリュームの永続的なデータとメタデータのレプリケーションを提供します。パブリッククラウドでは、リージョンの失敗から保護することにあります。Regional-DR は、地理的な地域が利用できない場合でもビジネス継続性を確保し、予測可能な量のデータの損失を受け入れます。これは通常、目標復旧時点 (RPO) および目標復旧時間 (RTO) で表されます。
- RPO は、永続データのバックアップまたはスナップショットを作成する頻度の尺度です。実際には、RPO は、停止後に失われるか、再入力する必要があるデータの量を示します。
- RTO は、企業が許容できるダウンタイムの量です。RTO は、ビジネスの中断が通知されてからシステムが回復するまでにどのくらいの時間がかかりますか ? という質問に答えます。
本書の目的は、障害復旧が有効になるようにインフラストラクチャーを設定するのに必要な手順およびコマンドについて詳しく説明することです。
1.1. Regional-DR ソリューションのコンポーネント
Regional-DR は、Red Hat Advanced Cluster Management for Kubernetes (RHACM) と OpenShift Data Foundation コンポーネントで設定され、OpenShift Container Platform クラスター全体でアプリケーションとデータのモビリティを提供します。
Red Hat Advanced Cluster Management for Kubernetes (RHACM)
RHACM は、複数のクラスターとアプリケーションのライフサイクルを管理する機能を提供します。したがって、マルチクラスター環境でのコントロールプレーンとして機能します。
RHACM は 2 つの部分に分かれています。
- RHACM Hub: マルチクラスターコントロールプレーンで実行されるコンポーネント
- マネージドクラスター: マネージドクラスターで実行されるコンポーネント
この製品の詳細は、RHACM のドキュメント および RHACM のアプリケーションの管理 を参照してください。
OpenShift Data Foundation
OpenShift Data Foundation は、OpenShift Container Platform クラスターでステートフルなアプリケーション用のストレージをプロビジョニングし、管理する機能を提供します。
OpenShift Data Foundation はストレージプロバイダーとして Ceph をベースとしていて、そのライフサイクルは OpenShift Data Foundation コンポーネントスタックの Rook によって管理されます。Ceph-CSI は、ステートフルなアプリケーション用の永続ボリュームのプロビジョニングと管理を提供します。
OpenShift Data Foundation スタックは、以下の機能で強化されています。
- ミラーリングのプールを有効にする
- RBD プール間でイメージを自動的にミラーリングする
- Persistent Volume Claim ミラーリングごとに管理する csi アドオンを提供します
OpenShift DR
OpenShift DR は、RHACM を使用してデプロイおよび管理される一連のピア OpenShift クラスター全体のステートフルアプリケーションの障害復旧オーケストレーターであり、永続ボリュームでのアプリケーションの状態のライフサイクルのオーケストレーションを行うためのクラウドネイティブインターフェイスを提供します。これらには以下が含まれます。
- OpenShift クラスター間でアプリケーションの状態の関係を保護する
- 現在デプロイされているクラスターが利用できなくなった場合に、アプリケーションの状態をピアクラスターにフェイルオーバーする
- アプリケーションの状態を以前にデプロイされたクラスターに再配置します
OpenShift DR は 3 つのコンポーネントに分類されます。
- ODF Multicluster Orchestrator: マルチクラスターコントロールプレーン (RHACM ハブ) にインストールされ、ブートストラップトークンを作成し、管理対象クラスター間でこのトークンを交換します。
- OpenShift DR Hub Operator: アプリケーションのフェイルオーバーと再配置を管理するためにハブクラスターにインストールされます。
- OpenShift DR Cluster Operator: 各マネージドクラスターにインストールされ、アプリケーションのすべての PVC のライフサイクルを管理します。
1.2. Regional-DR デプロイメントワークフロー
このセクションでは、OpenShift Data Foundation バージョン 4.9 および RHACM バージョン 2.4 を使用して Regional-DR 機能を 2 つの異なる OpenShift Container Platform クラスターに設定およびデプロイするために必要な手順の概要を説明します。2 つのマネージドクラスターに加えて、Advanced Cluster Management ハブソリューションをデプロイするのに、3 つ目の OpenShift Container Platform クラスターが必要です。
インフラストラクチャーを設定するには、指定した順序で以下の手順を実行します。
- Regional-DR の各要件を満たしていることを確認してください。Regional-DR を有効にするための要件を参照してください。
- 2 つの OpenShift Data Foundation マネージドクラスター間でミラーリング関係を作成して、マルチサイトストレージレプリケーションを設定します。マルチサイトストレージレプリケーションの設定を参照してください。
- 各マネージドクラスターに VolumeReplicationClass リソースを作成して、レプリケーションスケジュールを設定します (たとえば、5 分ごとにピア間でレプリケートします)。Creating VolumeReplicationClass resourceを参照してください。
-
ミラーリングが有効になっているブロックボリュームの新しい
imageFeatures
をサポートする各マネージドクラスターにミラーリング Storage Class リソースを作成します。ミラーリング Storage Class リソースの作成 を参照してください。 - マネージドクラスターに OpenShift DR Cluster Operator をインストールし、必要なオブジェクトバケット、シークレット、および configmap を作成します。Installing OpenShift DR Cluster Operator on Managed clusters を参照してください。
- ハブクラスターに OpenShift DR Hub Operator をインストールし、必要なオブジェクトバケット、シークレット、および configmap を作成します。Installing OpenShift DR Hub Operator on Hub clusterを参照してください。
- マネージドクラスター全体でワークロードをデプロイ、フェイルオーバー、および再配置するために使用されるハブクラスターに DRPolicy リソースを作成します。Creating Disaster Recovery Policy on Hub cluster を参照してください。
第2章 Regional-DR を有効にするための要件
相互にネットワーク接続が可能な 3 つの OpenShift クラスターが必要です。
- ハブクラスター: Kubernetes のための高度なクラスター管理 (RHACM 演算子)、ODF マルチクラスターの Orchestrator と OpenShift DR ハブコントローラーがインストールされています。
- プライマリーマネージドクラスター: OpenShift Data Foundation、OpenShift-DR クラスターコントローラー、およびアプリケーションがインストールされています。
- セカンダリーマネージドクラスター: は、OpenShift Data Foundation、OpenShift-DR クラスターコントローラー、およびアプリケーションがインストールされています。
RHACM Operator および MultiClusterHub をハブクラスターにインストールし、OpenShift 認証情報を使用して RHACM コンソールにログインしている必要があります。手順については、RHACM インストールガイド を参照してください。
Advanced Cluster Manager コンソール向けに作成されたルートを検索します。
$ 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 認証情報を使用してログインした後に、ローカルクラスターがインポートされたことが確認できるはずです。
RHACM コンソールを使用して、プライマリーマネージドクラスター および セカンダリーマネージドクラスター をインポートまたは作成していることを確認します。
Submariner アドオンを使用してマネージド OpenShift クラスターとサービスネットワークを接続するには、マネージドクラスターごとに次のコマンドを実行して、2 つのクラスターに重複しないネットワークがあることを検証する必要があります。
$ oc get networks.config.openshift.io cluster -o json | jq .spec
cluster1
の出力例 (例:ocp4perf1
):{ "clusterNetwork": [ { "cidr": "10.5.0.0/16", "hostPrefix": 23 } ], "externalIP": { "policy": {} }, "networkType": "OpenShiftSDN", "serviceNetwork": [ "10.15.0.0/16" ] }
cluster2
の出力例 (例:ocp4perf2
):{ "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 のドキュメント を参照してください。 OpenShift Data Foundation 4.9 以降が各マネージドクラスターにインストールされている必要があります。
- OpenShift Data Foundation のデプロイメントについては、インフラストラクチャー固有のデプロイメントガイド (AWS、VMware、ベアメタル、Azure など) を参照してください。
以下のコマンドを使用して、各マネージドクラスターでデプロイメントが正常であることを確認します。
$ oc get storagecluster -n openshift-storage ocs-storagecluster -o jsonpath='{.status.phase}{"\n"}'
ステータスが Primary マネージドクラスター および セカンダリーマネージドクラスター で
Ready
である場合は、 マネージドクラスターでミラーリングの有効化に進みます。
第3章 マルチサイトストレージレプリケーションの設定
ミラーリングまたはレプリケーションは、ピアマネージドクラスター内の CephBlockPool
ごとに有効にされ、その後プール内の特定のイメージのサブセットに設定できます。rbd-mirror
デーモンは、ローカルピアクラスターからリモートクラスターの同じイメージにイメージの更新を複製します。
この手順では、2 つの OpenShift Data Foundation マネージドクラスター間でミラーリング関係を作成する方法を詳細に説明します。
3.1. マネージドクラスターでの OMAP ジェネレーターおよびボリュームレプリケーションの有効化
プライマリーマネージドクラスター および セカンダリーマネージドクラスター で以下の手順を実行し、csi-rbdplugin-provisioner
Pod で OMAP および Volume-Replication CSI サイドカーコンテナーを有効にします。
手順
rook-ceph-operator-config
ConfigMap でCSI_ENABLE_OMAP_GENERATOR
のために値をtrue
に設定するには、次のpatch
コマンドを実行します。$ oc patch cm rook-ceph-operator-config -n openshift-storage --type json --patch '[{ "op": "add", "path": "/data/CSI_ENABLE_OMAP_GENERATOR", "value": "true" }]'
出力例:
configmap/rook-ceph-operator-config patched
以下の
patch
コマンドを実行して、rook-ceph-operator-config
ConfigMap のCSI_ENABLE_VOLUME_REPLICATION
の値をtrue
に設定します。$ oc patch cm rook-ceph-operator-config -n openshift-storage --type json --patch '[{ "op": "add", "path": "/data/CSI_ENABLE_VOLUME_REPLICATION", "value": "true" }]'
出力例:
configmap/rook-ceph-operator-config patched
csi-rbdplugin-provisioner
Pod ごとに以下の 2 つの新規 CSI サイドカーコンテナーがあることを確認します。$ for l in $(oc get pods -n openshift-storage -l app=csi-rbdplugin-provisioner -o jsonpath={.items[*].spec.containers[*].name}) ; do echo $l ; done | egrep "csi-omap-generator|volume-replication"
出力例:
csi-omap-generator volume-replication csi-omap-generator volume-replication
注記冗長性を確保するために 2 つの
csi-rbdplugin-provisioner
Pod があるため、新規コンテナーが繰り返されます。
3.2. OpenShift Data Foundation のマルチクラスターオーケストレーターのインストール
OpenShift Data Foundation のマルチクラスターオーケストレーターは、ハブクラスターの OpenShift Container Platform の OperatorHub からインストールされるコントローラーです。この Multicluster Orchestrator コントローラーと MirrorPeer カスタムリソースは、ブートストラップトークンを作成し、マネージドクラスター間でこのトークンを交換します。
手順
- ハブクラスター で OperatorHub に移動し、キーワードフィルターを使用して ODF Multicluster Orchestrator を検索します。
- ODF Multicluster Orchestrator タイルをクリックします。
すべてのデフォルト設定を維持し、Install をクリックします。
Operator リソースは
openshift-operators
にインストールされ、すべての namespace で利用可能です。- ODF Multicluster Orchestrator が、インストールが成功したことを示す緑色のチェックマークが表示されていることを確認します。
3.3. ハブクラスターでのミラーピアの作成
Mirror Peer は、ピアリング関係を持つマネージドクラスターに関する情報を保持するクラスタースコープのリソースです。
前提条件
- ODF Multicluster Orchestrator が ハブクラスター にインストールされていることを確認します。
- Mirror Peer の 2 つのクラスターのみが必要です。
-
各クラスターに、
ocp4perf1
やocp4perf2
などの一意に識別可能なクラスター名があることを確認してください。
手順
ODF Multicluster Orchestrator をクリックし、Operator の詳細を表示します。
Multicluster Orchestrator が正常にインストールされた後に View Operator をクリックできます。
- Mirror Peer API Create instance をクリックしてから YAML ビューを選択します。
YAML ビューで Mirror Peer を作成します。
<cluster1> および <cluster2> を RHACM コンソールのマネージドクラスターの正しい名前に置き換えた後に、以下の YAML をファイル名
mirror-peer.yaml
にコピーします。apiVersion: multicluster.odf.openshift.io/v1alpha1 kind: MirrorPeer metadata: name: mirrorpeer-<cluster1>-<cluster2> spec: items: - clusterName: <cluster1> storageClusterRef: name: ocs-storagecluster namespace: openshift-storage - clusterName: <cluster2> storageClusterRef: name: ocs-storagecluster namespace: openshift-storage
注記MirrorPeer はクラスタースコープのリソースであるため、このリソースを作成するために namespace を指定する必要はありません。
-
一意の
mirror-peer.yaml
ファイルの内容を YAML ビューにコピーします。元のコンテンツを完全に置き換える必要があります。 - YAML ビュー画面の下部にある Create をクリックします。
Phase 状態を
ExchangedSecret
として表示できることを確認します。注記一部のデプロイメントでは、検証用の出力も
ExchangingSecret
にすることができます。これは受け入れ可能な結果です。
3.4. マネージドクラスターでのミラーリングの有効化
ミラーリングを有効にするには、各マネージドクラスターのストレージクラスターのミラーリング設定を有効にする必要があります。これは、CLI および oc patch
コマンドを使用した手動の手順です。
StorageCluster のミラーリングを有効にした後に、プライマリーマネージドクラスター および セカンダリーマネージドクラスター で、oc patch storagecluster
コマンド、それに続く検証コマンドを実行する必要があります。
手順
ストレージクラスター名を使用して、クラスターレベルのミラーリングフラグを有効にします。
$ oc patch storagecluster $(oc get storagecluster -n openshift-storage -o=jsonpath='{.items[0].metadata.name}') -n openshift-storage --type json --patch '[{ "op": "replace", "path": "/spec/mirroring", "value": {"enabled": true} }]'
出力例:
storagecluster.ocs.openshift.io/ocs-storagecluster patched
デフォルトの Ceph ブロックプールでミラーリングが有効になっていることを確認します。
$ oc get cephblockpool -n openshift-storage -o=jsonpath='{.items[?(@.metadata.ownerReferences[*].kind=="StorageCluster")].spec.mirroring.enabled}{"\n"}'
出力例:
true
rbd-mirror
Pod が稼働していることを確認します。$ oc get pods -o name -l app=rook-ceph-rbd-mirror -n openshift-storage
出力例:
pod/rook-ceph-rbd-mirror-a-6486c7d875-56v2v
daemon
の正常性の状態を検証します。$ 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 分の時間がかかる可能性があります。ステータスが約 10 分間 OK
に変わらない場合は、RHACM コンソールを使用して Submariner アドオン接続が Healthy
状態のままであることを確認します。
第4章 VolumeReplicationClass リソースの作成
VolumeReplicationClass
を使用して、レプリケートされる各ボリュームの mirroringMode
を指定すると共に、ローカルクラスターからリモートクラスターにボリュームまたはイメージをレプリケートする頻度 (例:5 分ごと) を指定します。
このリソースは、プライマリーマネージドクラスター および セカンダリーマネージドクラスター で作成する必要があります。
手順
以下の YAML を、
rbd-volumereplicationclass.yaml
のファイル名に保存します。apiVersion: replication.storage.openshift.io/v1alpha1 kind: VolumeReplicationClass metadata: name: odf-rbd-volumereplicationclass spec: provisioner: openshift-storage.rbd.csi.ceph.com parameters: mirroringMode: snapshot schedulingInterval: "5m" # <-- Must be the same as scheduling interval in the DRPolicy replication.storage.openshift.io/replication-secret-name: rook-csi-rbd-provisioner replication.storage.openshift.io/replication-secret-namespace: openshift-storage
両方のマネージドクラスターにファイルを作成します。
$ oc create -f rbd-volumereplicationclass.yaml
出力例:
volumereplicationclass.replication.storage.openshift.io/odf-rbd-volumereplicationclass created
第5章 ミラーリング StorageClass リソースの作成
マネージドクラスター間のイメージレプリケーションを高速化するために必要な追加の imageFeatures
を備えた新しい StorageClass を使用して、mirroring
を有効にしてブロックボリュームを作成する必要があります。新機能は、exclusive-lock、object-map、および fast-diff です。デフォルトの OpenShift Data Foundation StorageClass ocs-storagecluster-ceph-rbd
には、これらの機能が含まれていません。
このリソースは、プライマリーマネージドクラスター および セカンダリーマネージドクラスター で作成する必要があります。
手順
次の YAML をファイル名
ocs-storagecluster-ceph-rbdmirror.yaml
に保存します。allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ocs-storagecluster-ceph-rbdmirror parameters: clusterID: 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/fstype: ext4 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/provisioner-secret-name: rook-csi-rbd-provisioner csi.storage.k8s.io/provisioner-secret-namespace: openshift-storage imageFeatures: layering,exclusive-lock,object-map,fast-diff imageFormat: "2" pool: ocs-storagecluster-cephblockpool provisioner: openshift-storage.rbd.csi.ceph.com reclaimPolicy: Delete volumeBindingMode: Immediate
両方のマネージドクラスターにファイルを作成します。
$ oc create -f ocs-storagecluster-ceph-rbdmirror.yaml
出力例:
storageclass.storage.k8s.io/ocs-storagecluster-ceph-rbdmirror created
第6章 マネージドクラスターでの OpenShift-DR Cluster Operator のインストール
手順
- 各マネージドクラスターで OperatorHub に移動し、OpenShift-DR Cluster Operator を絞り込みます。
画面の指示に従って、Operator をプロジェクト
openshift-dr-system
にインストールします。注記OpenShift DR Cluster Operator
は、プライマリーマネージドクラスター と セカンダリーマネージドクラスター の両方にインストールする必要があります。s3 エンドポイント間の SSL アクセスを設定 して、メタデータを安全なトランスポートプロトコルを使用する MCG オブジェクトバケットの代替クラスターと、オブジェクトバケットへのアクセスを確認するための ハブクラスター に保存できるようにします。
注記すべての 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
プライマリーマネージドクラスター、セカンダリーマネージドクラスター、および ハブクラスター 上のファイル名
cm-clusters-crt.yaml
を使用して、リモートクラスターの証明書バンドルを保持する新しい ConfigMap を作成します。注記この例のように、クラスターごとに 3 つ以上の証明書が存在する可能性があります。
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
プライマリーマネージドクラスター、セカンダリーマネージドクラスター、および ハブクラスター で以下のコマンドを実行してファイルを作成します。
$ oc create -f cm-clusters-crt.yaml
出力例:
configmap/user-ca-bundle created
重要ハブクラスター が DRPolicy リソースを使用してオブジェクトバケットへのアクセスを確認するには、同じ ConfigMap、
cm-clusters-crt.yaml
を ハブクラスター に作成する必要があります。デフォルトの プロキシー クラスターリソースを変更します。
以下のコンテンツを新しい YAML ファイル
proxy-ca.yaml
にコピーし、保存します。apiVersion: config.openshift.io/v1 kind: Proxy metadata: name: cluster spec: trustedCA: name: user-ca-bundle
この新しいファイルを、プライマリーマネージドクラスター、セカンダリーマネージドクラスター、および ハブクラスター 上のデフォルトのプロキシーリソースに適用します。
$ oc apply -f proxy-ca.yaml
出力例:
proxy.config.openshift.io/cluster configured
マルチクラウドオブジェクトゲートウェイ (MCG) キーと外部 S3 エンドポイントを取得します。
MCG が プライマリーマネージドクラスター および セカンダリーマネージドクラスター にインストールされているかどうか、および Phase が
Ready
かどうかを確認します。$ oc get noobaa -n openshift-storage
出力例:
NAME MGMT-ENDPOINTS S3-ENDPOINTS IMAGE PHASE AGE noobaa ["https://10.70.56.161:30145"] ["https://10.70.56.84:31721"] quay.io/rhceph-dev/mcg-core@sha256:c4b8857ee9832e6efc5a8597a08b81730b774b2c12a31a436e0c3fadff48e73d Ready 27h
以下の YAML ファイルを、ファイル名
odrbucket.yaml
にコピーします。apiVersion: objectbucket.io/v1alpha1 kind: ObjectBucketClaim metadata: name: odrbucket namespace: openshift-dr-system spec: generateBucketName: "odrbucket" storageClassName: openshift-storage.noobaa.io
プライマリーマネージドクラスター および セカンダリーマネージドクラスター の両方で、MCG バケット
odrbucket
を作成します。$ oc create -f odrbucket.yaml
出力例:
objectbucketclaim.objectbucket.io/odrbucket created
以下のコマンドを使用して、各マネージドクラスターの
odrbucket
OBC アクセスキーを base-64 でエンコード された値として展開します。$ oc get secret odrbucket -n openshift-dr-system -o jsonpath='{.data.AWS_ACCESS_KEY_ID}{"\n"}'
出力例:
cFpIYTZWN1NhemJjbEUyWlpwN1E=
以下のコマンドを使用して、各マネージドクラスターの
odrbucket
OBC シークレットキーを base-64 でエンコード された値として展開します。$ oc get secret odrbucket -n openshift-dr-system -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}{"\n"}'
出力例:
V1hUSnMzZUoxMHRRTXdGMU9jQXRmUlAyMmd5bGwwYjNvMHprZVhtNw==
マネージドクラスターの S3 シークレットを作成します。
必要な MCG 情報が抽出されたので、プライマリーマネージドクラスター および セカンダリーマネージドクラスター に新しいシークレットが作成されているはずです。これらの新規シークレットは、両方のマネージドクラスターの MCG アクセスとシークレットキーを保存します。
注記OpenShift DR には、マネージドクラスターからのワークロードの関連クラスターデータを保存するため、およびフェイルオーバーまたは再配置アクション中のワークロード復旧のオーケストレーションを行うために、1 つ以上の S3 ストアが必要です。これらの手順は、Multicloud Gateway (MCG) を使用して必要なオブジェクトバケットを作成するために適用できます。OpenShift Data Foundation のインストールにより、MCG がすでにインストールされているはずです。
プライマリーマネージドクラスター用の以下の S3 シークレット YAML 形式を、ファイル名
odr-s3secret-primary.yaml
にコピーします。apiVersion: v1 data: AWS_ACCESS_KEY_ID: <primary cluster base-64 encoded access key> AWS_SECRET_ACCESS_KEY: <primary cluster base-64 encoded secret access key> kind: Secret metadata: name: odr-s3secret-primary namespace: openshift-dr-system
<primary cluster base-64 encoded access key> および <primary cluster base-64 encoded secret access key> は、先程の手順で取得した実際の値に置き換えます。
プライマリーマネージドクラスター および セカンダリーマネージドクラスター で、このシークレットを作成します。
$ oc create -f odr-s3secret-primary.yaml
出力例:
secret/odr-s3secret-primary created
セカンダリーマネージドクラスター用の以下の S3 シークレット YAML 形式を、ファイル名
odr-s3secret-secondary.yaml
にコピーします。apiVersion: v1 data: AWS_ACCESS_KEY_ID: <secondary cluster base-64 encoded access key> AWS_SECRET_ACCESS_KEY: <secondary cluster base-64 encoded secret access key> kind: Secret metadata: name: odr-s3secret-secondary namespace: openshift-dr-system
<secondary cluster base-64 encoded access key> および <secondary cluster base-64 encoded secret access key> を、手順 4 で取得した実際の値に置き換えます。
プライマリーマネージドクラスター および セカンダリーマネージドクラスター で、このシークレットを作成します。
$ oc create -f odr-s3secret-secondary.yaml
出力例:
secret/odr-s3secret-secondary created
重要アクセスキーおよびシークレットキーの値は base-64 でエンコーディングされている 必要があります。エンコードされたキーの値は、前の手順で取得されています。
各マネージドクラスターで OpenShift-DR Cluster Operator ConfigMap を設定します。
以下のコマンドを使用して、外部 S3 エンドポイント s3CompatibleEndpoint または各マネージドクラスターで MCG のルートを検索します。
$ oc get route s3 -n openshift-storage -o jsonpath --template="https://{.spec.host}{'\n'}"
出力例:
https://s3-openshift-storage.apps.perf1.example.com
重要一意の s3CompatibleEndpoint ルートまたは
s3-openshift-storage.apps.<primary clusterID>.<baseDomain>
およびs3-openshift-storage.apps.<secondary clusterID>.<baseDomain>
は、プライマリーマネージドクラスター と セカンダリーマネージドクラスター の両方で取得する必要があります。odrbucket
OBC バケット名を検索します。$ oc get configmap odrbucket -n openshift-dr-system -o jsonpath='{.data.BUCKET_NAME}{"\n"}'
出力例:
odrbucket-2f2d44e4-59cb-4577-b303-7219be809dcd
重要一意の s3Bucket 名 odrbucket-<your value1> と odrbucket-<your value2> は、プライマリーマネージドクラスター と セカンダリーマネージドクラスター の両方で取得する必要があります。
ConfigMap の
ramen-dr-cluster-operator-config
を変更して、新規コンテンツを追加します。$ oc edit configmap ramen-dr-cluster-operator-config -n openshift-dr-system
s3StoreProfiles
で開始する以下の新しいコンテンツを、プライマリーマネージドクラスター および セカンダリーマネージドクラスター の ConfigMap に追加します。[...] data: ramen_manager_config.yaml: | apiVersion: ramendr.openshift.io/v1alpha1 kind: RamenConfig [...] ramenControllerType: "dr-cluster" ### Start of new content to be added s3StoreProfiles: - s3ProfileName: s3-primary s3CompatibleEndpoint: https://s3-openshift-storage.apps.<primary clusterID>.<baseDomain> s3Region: primary s3Bucket: odrbucket-<your value1> s3SecretRef: name: odr-s3secret-primary namespace: openshift-dr-system - s3ProfileName: s3-secondary s3CompatibleEndpoint: https://s3-openshift-storage.apps.<secondary clusterID>.<baseDomain> s3Region: secondary s3Bucket: odrbucket-<your value2> s3SecretRef: name: odr-s3secret-secondary namespace: openshift-dr-system [...]
第7章 ハブクラスターへの OpenShift-DR Hub Operator のインストール
前提条件
- アクセスキーおよびシークレットキーの値は base-64 でエンコードされている ことを確認します。キーのエンコードされた値は以前のセクションで取得され、生成される Secret はマネージドクラスターにすでに作成されたものと 同じ です。
手順
- ハブクラスターで OperatorHub に移動し、OpenShift-DR Hub Operator の検索フィルターを使用します。
-
画面の指示に従って、Operator をプロジェクト
openshift-dr-system
にインストールします。 プライマリーマネージドクラスター の以下の S3 シークレット YAML 形式を使用して、ハブクラスターの S3 シークレットを作成します。
apiVersion: v1 data: AWS_ACCESS_KEY_ID: <primary cluster base-64 encoded access key> AWS_SECRET_ACCESS_KEY: <primary cluster base-64 encoded secret access key> kind: Secret metadata: name: odr-s3secret-primary namespace: openshift-dr-system
以下のコマンドを実行して、ハブクラスターにこのシークレットを作成します。
$ oc create -f odr-s3secret-primary.yaml
出力例:
secret/odr-s3secret-primary created
セカンダリーマネージドクラスター の以下の S3 シークレット YAML 形式を使用して、S3 シークレットを作成します。
apiVersion: v1 data: AWS_ACCESS_KEY_ID: <secondary cluster base-64 encoded access key> AWS_SECRET_ACCESS_KEY: <secondary cluster base-64 encoded secret access key> kind: Secret metadata: name: odr-s3secret-secondary namespace: openshift-dr-system
以下のコマンドを実行して、ハブクラスターにこのシークレットを作成します。
$ oc create -f odr-s3secret-secondary.yaml
出力例:
secret/odr-s3secret-secondary created
OpenShift DR Hub Operator の ConfigMap を設定します。
Operator が正常に作成されると、
ramen-hub-operator-config
という新しい ConfigMap が作成されます。以下のコマンドを実行してファイルを編集します。
$ oc edit configmap ramen-hub-operator-config -n openshift-dr-system
s3StoreProfiles
で開始する以下の新規コンテンツを、ハブクラスターの ConfigMap に追加します。[...] apiVersion: v1 data: ramen_manager_config.yaml: | apiVersion: ramendr.openshift.io/v1alpha1 kind: RamenConfig [...] ramenControllerType: "dr-hub" ### Start of new content to be added s3StoreProfiles: - s3ProfileName: s3-primary s3CompatibleEndpoint: https://s3-openshift-storage.apps.<primary clusterID>.<baseDomain> s3Region: primary s3Bucket: odrbucket-<your value1> s3SecretRef: name: odr-s3secret-primary namespace: openshift-dr-system - s3ProfileName: s3-secondary s3CompatibleEndpoint: https://s3-openshift-storage.apps.<secondary clusterID>.<baseDomain> s3Region: secondary s3Bucket: odrbucket-<your value2> s3SecretRef: name: odr-s3secret-secondary namespace: openshift-dr-system [...]
注記<primary clusterID>、<secondary clusterID>、baseDomain, odrbucket-<your value1>、および odrbucket-<your value2> 変数を、マネージドクラスターの
ramen-cluster-operator-config
ConfigMap に使用されているものと同じ値に置き換えてください。
第8章 ハブクラスターでの障害復旧ポリシーの作成
OpenShift DR は、RHACM ハブクラスターで Disaster Recovery Policy (DRPolicy) リソース (クラスタースコープ) を使用して、マネージドクラスター間でワークロードをデプロイ、フェイルオーバー、および再配置します。
前提条件
- ストレージレベルのレプリケーション用にピアリングされている 2 クラスターのセットがあり、CSI ボリュームレプリケーションが有効になっている必要があります。
- DRPolicy を使用してワークロードの粒度の粗い Recovery Point Objective (RPO) としても機能する、データレプリケーションの実行頻度を決定するスケジューリング間隔が設定されている必要があります。
- ポリシーの各クラスターに、OpenShift-DR Cluster および Hub Operator の ConfigMap で設定される S3 プロファイル名が割り当てられている必要があります。
手順
-
ハブクラスターで、
openshift-dr-system
プロジェクトで Installed Operators に移動し、OpenShift DR Hub Operator をクリックします。2 つの利用可能な API (DRPolicy と DRPlacementControl) が表示されるはずです。 - DRPolicy の Create instance をクリックし、YAML view をクリックします。
<cluster1> および <cluster2> を RHACM のマネージドクラスターの正しい名前に置き換えてから、以下の YAML を、ファイル名
drpolicy.yaml
に保存します。apiVersion: ramendr.openshift.io/v1alpha1 kind: DRPolicy metadata: name: odr-policy-5m spec: drClusterSet: - name: <cluster1> s3ProfileName: s3-primary - name: <cluster2> s3ProfileName: s3-secondary schedulingInterval: 5m
注記DRPolicy はクラスタースコープのリソースであるため、このリソースを作成するために namespace を指定する必要はありません。
-
一意の
drpolicy.yaml
ファイルの内容を YAML ビューにコピーします。元のコンテンツを完全に置き換える必要があります。 YAML ビュー画面の Create をクリックします。
重要DRPolicy スケジューリングの間隔は、VolumeReplicationClass リソースの作成 セクションで設定される間隔と一致する必要があります。
以下のコマンドを実行して、DRPolicy が正常に作成されていることを確認します。
$ oc get drpolicy odr-policy-5m -n openshift-dr-system -o jsonpath='{.status.conditions[].reason}{"\n"}'
出力例:
Succeeded
第9章 サンプルアプリケーションの作成
プライマリーマネージドクラスターからセカンダリーマネージドクラスターへのフェイルオーバーをテストし、また元に戻すには、サンプルアプリケーションが必要です。busybox
というサンプルアプリケーションを例として使用します。
手順
busybox
サンプルアプリケーションのハブクラスターで namespace または プロジェクト を作成します。$ oc new-project busybox-sample
注記必要に応じて、
busybox-sample
以外のプロジェクト名を使用できます。Advanced Cluster Manager コンソールでサンプルアプリケーションをデプロイする場合は、この手順で作成したものと同じプロジェクト名を使用するようにしてください。DRPlacementControl リソースを作成します。
DRPlacementControl は、ハブクラスターに OpenShift DR Hub Operator をインストールした後に利用可能な API です。これは、概説としては、DRPolicy の一部であるクラスター間でのデータ可用性に基づいて配置の決定をオーケストレーションする Advanced Cluster Manager PlacementRule リコンサイラーです。
-
ハブクラスターで、
busybox-sample
プロジェクトで Installed Operators に移動し、OpenShift DR Hub Operator をクリックします。2 つの利用可能な API (DRPolicy と DRPlacementControl) が表示されるはずです。 -
DRPlacementControl のインスタンスを作成してから、YAML ビューに移動します。
busybox-sample
プロジェクトが選択されていることを確認します。 <cluster1> を Advanced Cluster Manager のマネージドクラスターの正しい名前に置き換えたあと、以下の YAML をファイル名
busybox-drpc.yaml
にコピーして保存します。apiVersion: ramendr.openshift.io/v1alpha1 kind: DRPlacementControl metadata: labels: app: busybox-sample name: busybox-drpc spec: drPolicyRef: name: odr-policy-5m placementRef: kind: PlacementRule name: busybox-placement preferredCluster: <cluster1> pvcSelector: matchLabels: appname: busybox
-
一意の
busybox-drpc.yaml
ファイルの内容を YAML ビューにコピーします (元のコンテンツを完全に置き換え)。 YAML ビュー画面の Create をクリックします。
以下の CLI コマンドを使用してこのリソースを作成することもできます。
$ oc create -f busybox-drpc.yaml -n busybox-sample
出力例:
drplacementcontrol.ramendr.openshift.io/busybox-drpc created
重要このリソースは、
busybox-sample
namespace (または先に作成した namespace) に作成する必要があります。
-
ハブクラスターで、
リソーステンプレートのデプロイ先のターゲットクラスターを定義する Placement Rule リソースを作成します。配置ルールを使用すると、アプリケーションのマルチクラスターデプロイメントが容易になります。
以下の YAML をファイル名
busybox-placementrule.yaml
にコピーし、保存します。apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: labels: app: busybox-sample name: busybox-placement spec: clusterConditions: - status: "True" type: ManagedClusterConditionAvailable clusterReplicas: 1 schedulerName: ramen
busybox-sample
アプリケーションの PlacementRule リソースを作成します。$ oc create -f busybox-placementrule.yaml -n busybox-sample
出力例:
placementrule.apps.open-cluster-management.io/busybox-placement created
重要このリソースは、
busybox-sample
namespace(または先に作成した namespace) に作成する必要があります。
RHACM コンソールを使用したサンプルアプリケーションの作成
まだログインしていない場合は、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 が作成されます。Branch が
main
で、Path はbusybox-odr
であるhttps://github.com/RamenDR/ocm-ramen-samples
として、サンプルアプリケーションリポジトリーを使用します。重要続行する前に、[Create Mirroring StorageClass resource] セクションで説明されているように、新しい StorageClass
ocs-storagecluster-ceph-rbdmirror
が作成されていることを確認してください。次のコマンドを使用して作成されていることを確認します。
oc get storageclass | grep rbdmirror | awk '{print $1}'
出力例:
ocs-storagecluster-ceph-rbdmirror
- Select clusters to deploy to セクションまでフォームを下にスクロールして、Select an existing placement configuration をクリックします。
-
ドロップダウンリストから Existing Placement Rule (
busybox-placement
など) を選択します。 Save をクリックします。
アプリケーションが作成されると、アプリケーションの詳細ページが表示されます。Resource topology セクションまでスクロールダウンできます。トポロジーの要素とアプリケーションに Green チェックマークが必要です。
注記詳細な情報を表示するには、トポロジー要素のいずれかをクリックすると、トポロジービューの右側にウィンドウが表示されます。
サンプルアプリケーションのデプロイメントおよびレプリケーションを確認します。
busybox
アプリケーションが (DRPlacementControl で指定された) preferredCluster にデプロイされたので、デプロイメントを検証できるようになりました。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 1Gi RWO ocs-storagecluster-ceph-rbd 6m
レプリケーションリソースも
busybox
PVC に作成されていることを確認します。$ oc get volumereplication,volumereplicationgroup -n busybox-sample
出力例:
NAME AGE VOLUMEREPLICATIONCLASS PVCNAME DESIREDSTATE CURRENTSTATE volumereplication.replication.storage.openshift.io/busybox-pvc 6m odf-rbd-volumereplicationclass busybox-pvc primary Primary NAME AGE volumereplicationgroup.ramendr.openshift.io/busybox-drpc 6m
Primary managed cluster と Secondary マネージドクラスター の両方で以下のコマンドを実行して、
busybox
ボリュームが代替クラスターに複製されていることを確認します。$ oc get cephblockpool ocs-storagecluster-cephblockpool -n openshift-storage -o jsonpath='{.status.mirroringStatus.summary}{"\n"}'
出力例:
{"daemon_health":"OK","health":"OK","image_health":"OK","states":{"replaying":2}}
注記両方のマネージドクラスターの出力はまったく同じで、新しいステータスが
"states":{"replaying":2}`
となっているはずです。
9.1. サンプルアプリケーションの削除
RHACM コンソールを使用してサンプルアプリケーション busybox
を削除できます。
手順
- 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
リソースでアプリケーションを削除できます。DRPlacementControl
リソースは、CLI を使用してアプリケーション namespace で削除することもできます。
第10章 マネージドクラスター間のアプリケーションのフェイルオーバー
本セクションでは、busybox サンプルアプリケーションをフェイルオーバーする方法を説明します。Regional-DR のフェイルオーバー方法はアプリケーションベースです。この方法で保護される各アプリケーションには、Create Sample Application for DR testing セクションで説明されているように、対応する DRPlacementControl
リソースとアプリケーション namespace
で作成された PlacementRule
リソースが必要です。
手順
- ハブクラスターで Installed Operators に移動し、Openshift DR Hub Operator をクリックします。
- DRPlacementControl タブをクリックします。
-
DRPC
busybox-drpc
をクリックしてから、YAML ビューをクリックします。 以下のスクリーンショットのように、
action
およびfailoverCluster
の詳細を追加します。failoverCluster
はセカンダリーマネージドクラスターの ACM クラスター名である必要があります。DRPlacementControl add action Failover
- Save をクリックします。
アプリケーションの
busybox
がセカンダリーマネージドクラスター (YAML ファイルに指定されるフェイルオーバークラスターocp4perf2
) で実行されていることを確認します。$ 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
がプライマリーマネージドクラスターで実行していないことを確認します。$ oc get pods,pvc -n busybox-sample
出力例:
No resources found in busybox-sample namespace.
リリースノートの Known Issues に記載されている既知の Regional-DR の問題に注意してください。
Developer プレビュー機能に関してサポートが必要な場合には、ocs-devpreview@redhat.com メーリングリストに連絡してください。Red Hat Development Team のメンバーが稼働状況とスケジュールに応じて可能な限り迅速に対応します。
第11章 マネージドクラスター間のアプリケーションの再配置
再配置操作はフェイルオーバーと非常に似ています。移動はアプリケーションベースで、DRPlacementControl を使用して再配置をトリガーします。再配置の主な相違点は、resync
を発行して、セカンダリーマネージドクラスターに保存されている新規アプリケーションデータが即時にあり、ミラーリングスケジュールの間隔を待機せず、プライマリーマネージドクラスターに複製されるという点です。
手順
- ハブクラスターで Installed Operators に移動し、Openshift DR Hub Operator をクリックします。
- DRPlacementControl タブをクリックします。
-
DRPC
busybox-drpc
をクリックしてから、YAML ビューをクリックします。 action を
Relocate
に変更DRPlacementControl modify action to Relocate
- Save をクリックします。
アプリケーションの
busybox
がプライマリーマネージドクラスターで実行しているか、YAML ファイルで指定されたクラスターのocp4perf2
をフェイルオーバーしているかどうかを確認します。$ 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.
リリースノートの Known Issues に記載されている既知の Regional-DR の問題に注意してください。
Developer プレビュー機能に関してサポートが必要な場合には、ocs-devpreview@redhat.com メーリングリストに連絡してください。Red Hat Development Team のメンバーが稼働状況とスケジュールに応じて可能な限り迅速に対応します。