diff --git a/content/patterns/ramendr-starter-kit/_index.adoc b/content/patterns/ramendr-starter-kit/_index.adoc index d0d02b004d..da13c5d859 100644 --- a/content/patterns/ramendr-starter-kit/_index.adoc +++ b/content/patterns/ramendr-starter-kit/_index.adoc @@ -44,10 +44,29 @@ The setup process is relatively intricate; the goal of this pattern is to handle a functional DR-capable starting point for Virtual Machine workloads. In particular this pattern takes care to sequence installations and validate pre-requisites for all of the core components of the Disaster Recovery system. -In particular, this pattern must be customized to specify DNS basedomains for the managed clusters, which makes -forking the pattern (which we generally recommend anyway, in case you want to make other customizations) effectively -a requirement. The link:https://validatedpatterns/patterns/getting-started[**Getting Started**] doc has -details on what needs to be changed and how to commit and push those changes. +You might fork the repository to customize chart values (for example `aws.region` in +link:https://github.com/validatedpatterns/ramendr-starter-kit/blob/main/charts/hub/rdr/values.yaml[`charts/hub/rdr/values.yaml`]) +or to select a non-default install variant. The link:/patterns/ramendr-starter-kit/getting-started/[Getting started] page describes variant +selection, BYOC, required secrets, and verification steps. + +[id="install-variants"] +=== Install variants + +The pattern ships three install variants under `variants/` in the repository. Set `main.variant` in +link:https://github.com/validatedpatterns/ramendr-starter-kit/blob/main/values-global.yaml[`values-global.yaml`] +before install. The default is `odf`. + +[cols="1,1,3",options="header"] +|=== +| Variant | `main.variant` | Purpose +| `odf` | `odf` (default) | Full {ocp-data-short} Regional DR with {VirtProductName} workloads, MirrorPeer, and failover-capable VMs +| `drpartner-s4` | `drpartner-s4` | Partner CSI foundation with hub S4 object storage: OADP, {VirtProductName}, Ramen/Multicluster Orchestrator; infrastructure DRClusters and a `2m-novm` DRPolicy without DRPC or VMs; Submariner disabled +| `drpartner-minimal` | `drpartner-minimal` | Partner CSI foundation without S4, Submariner, or DRCluster sync/validation: OADP, {VirtProductName}, and Ramen/Multicluster Orchestrator only (Hive or BYOC bring-up) +|=== + +Spoke configuration files nest under each variant as `variants//values-.yaml`. +See link:/patterns/ramendr-starter-kit/installation-details/#variant-installation-differences[Installation details] for what each variant deploys on the hub and managed clusters. +For component schematics, connectivity paths, and TLS/CA handling, see link:/patterns/ramendr-starter-kit/architecture/[Architecture] and link:/patterns/ramendr-starter-kit/connectivity/[Connectivity]. === Background @@ -74,7 +93,20 @@ This pattern uses OpenShift Virtualization (the productization of Kubevirt) to s * HashiCorp Vault (Community Edition) * External Secrets Operator (Community Edition) -=== Architecture +=== Architecture overview + +The default `odf` variant deploys a three-cluster Regional DR layout with {ocp-data-short}, Submariner, DRPC-protected VMs, and failover workflows documented in link:/patterns/ramendr-starter-kit/getting-started/[Getting started]. .ramendr-architecture-diagram -image::/images/ramendr-starter-kit/ramendr-architecture.drawio.png[ramendr-starter-kit-architecture,title="RamenDR Starter Kit Architecture"] +image::/images/ramendr-starter-kit/ramendr-architecture-odf.png[ramendr-starter-kit-architecture,title="RamenDR Starter Kit architecture (odf)"] + +draw.io source: link:/images/ramendr-starter-kit/ramendr-architecture-odf.drawio[`ramendr-architecture-odf.drawio`] + +Partner variants use different S3 and replication models. See link:/patterns/ramendr-starter-kit/architecture/[Architecture] for per-variant schematics and draw.io sources, and link:/patterns/ramendr-starter-kit/connectivity/[Connectivity] for hub-to-managed network paths and ports. + +=== Next steps + +* link:/patterns/ramendr-starter-kit/architecture/[Architecture] — Component schematics, TLS/CA, draw.io sources +* link:/patterns/ramendr-starter-kit/connectivity/[Connectivity] — Hub-to-managed connectivity by variant +* link:/patterns/ramendr-starter-kit/getting-started/[Getting started] — Prerequisites, variant selection, BYOC, and deployment +* link:/patterns/ramendr-starter-kit/installation-details/[Installation details] — Install sequence and pattern scripts diff --git a/content/patterns/ramendr-starter-kit/architecture.adoc b/content/patterns/ramendr-starter-kit/architecture.adoc new file mode 100644 index 0000000000..44255b13ee --- /dev/null +++ b/content/patterns/ramendr-starter-kit/architecture.adoc @@ -0,0 +1,105 @@ +--- +title: Architecture +weight: 5 +aliases: /ramendr-starter-kit/architecture/ +--- + +:toc: +:imagesdir: /images +:_content-type: ASSEMBLY +include::modules/comm-attributes.adoc[] + +[id="ramendr-architecture"] += Architecture + +This page describes component schematics, connectivity overview diagrams, and TLS/CA handling for each install variant. For hub-to-managed network paths and ports, see link:/patterns/ramendr-starter-kit/connectivity/[Connectivity]. + +[id="architecture-diagrams"] +== Architecture diagrams + +Each install variant has a full hub/spoke schematic exported as PNG from draw.io source. PNG and draw.io files live in `static/images/ramendr-starter-kit/`. + +[cols="2,1,2,2",options="header"] +|=== +| Diagram | Variant | PNG | draw.io source + +| `ramendr-architecture-odf` +| `odf` +| link:/images/ramendr-starter-kit/ramendr-architecture-odf.png[`ramendr-architecture-odf.png`] +| link:/images/ramendr-starter-kit/ramendr-architecture-odf.drawio[`ramendr-architecture-odf.drawio`] + +| `ramendr-architecture-drpartner-s4` +| `drpartner-s4` +| link:/images/ramendr-starter-kit/ramendr-architecture-drpartner-s4.png[`ramendr-architecture-drpartner-s4.png`] +| link:/images/ramendr-starter-kit/ramendr-architecture-drpartner-s4.drawio[`ramendr-architecture-drpartner-s4.drawio`] + +| `ramendr-architecture-drpartner-minimal` +| `drpartner-minimal` +| link:/images/ramendr-starter-kit/ramendr-architecture-drpartner-minimal.png[`ramendr-architecture-drpartner-minimal.png`] +| link:/images/ramendr-starter-kit/ramendr-architecture-drpartner-minimal.drawio[`ramendr-architecture-drpartner-minimal.drawio`] + +| `hub-managed-connectivity` +| All variants +| link:/images/ramendr-starter-kit/hub-managed-connectivity-odf.png[`hub-managed-connectivity-odf.png`] (and per-variant tabs) +| link:/images/ramendr-starter-kit/hub-managed-connectivity.drawio[`hub-managed-connectivity.drawio`] +|=== + +[id="architecture-odf"] +=== `odf` schematic + +Full hub/spoke schematic. DRPolicies live on the hub with the RamenDR Hub Operator and become volume replications and volume group replications on the managed clusters. The hub operator orchestrates the RamenDR Cluster Operators, which manage those replications plus {ocp-data-short} and OpenShift ADP (Kubernetes object backups), along with Submariner and Edge GitOps VMs. + +.ramendr-architecture-odf +image::/images/ramendr-starter-kit/ramendr-architecture-odf.png[RamenDR architecture for the odf variant,title="RamenDR Starter Kit architecture (odf)"] + +draw.io source: link:/images/ramendr-starter-kit/ramendr-architecture-odf.drawio[`ramendr-architecture-odf.drawio`] + +[id="architecture-drpartner-s4"] +=== `drpartner-s4` schematic + +Hub S4 Object store for OpenShift ADP Kubernetes object backups. Partner CSI on the managed clusters provides VM data replication. DRPolicies live on the hub and become volume replications and volume group replications on the managed clusters. The RamenDR Hub Operator orchestrates the cluster operators. The pattern does not create DRPC or VMs. + +.ramendr-architecture-drpartner-s4 +image::/images/ramendr-starter-kit/ramendr-architecture-drpartner-s4.png[RamenDR architecture for the drpartner-s4 variant,title="RamenDR Starter Kit architecture (drpartner-s4)"] + +draw.io source: link:/images/ramendr-starter-kit/ramendr-architecture-drpartner-s4.drawio[`ramendr-architecture-drpartner-s4.drawio`] + +[id="architecture-drpartner-minimal"] +=== `drpartner-minimal` schematic + +{rh-rhacm-first} and partner operators only. S3-compatible storage for OpenShift ADP is bring-your-own; this variant does not deploy S4. DRPolicies live on the hub and become volume replications and volume group replications on the managed clusters. The pattern does not create DR CRs. + +.ramendr-architecture-drpartner-minimal +image::/images/ramendr-starter-kit/ramendr-architecture-drpartner-minimal.png[RamenDR architecture for the drpartner-minimal variant,title="RamenDR Starter Kit architecture (drpartner-minimal)"] + +draw.io source: link:/images/ramendr-starter-kit/ramendr-architecture-drpartner-minimal.drawio[`ramendr-architecture-drpartner-minimal.drawio`] + +[id="tls-and-ca"] +== TLS and CA (current implementation) + +Certificate handling is delivered by external charts deployed via Argo CD, not local policy YAML in the pattern repository. + +[cols="2,3",options="header"] +|=== +| Chart | Role + +| **vp-manage-proxy-cluster-ca** +| Differential CA bundle for cluster API/ingress CAs (all variants) + +| **opp-policy-chart** +| `s3CaInjector` injects `caCertificates` on Ramen `s3StoreProfiles` (`odf`, `drpartner-s4`) +|=== + +Chart overrides live in the pattern repository: + +* link:https://github.com/validatedpatterns/ramendr-starter-kit/blob/main/overrides/values-vp-manage-proxy-cluster-ca-hub.yaml[`overrides/values-vp-manage-proxy-cluster-ca-hub.yaml`] +* link:https://github.com/validatedpatterns/ramendr-starter-kit/blob/main/overrides/values-vp-manage-proxy-cluster-ca-resilient.yaml[`overrides/values-vp-manage-proxy-cluster-ca-resilient.yaml`] + +Manual CA and cluster helpers live under `scripts/` in the pattern repository. Verify resource names against the live cluster before using examples that reference {rh-rhacm} policy names. + +[id="related-pages"] +== Related pages + +* link:/patterns/ramendr-starter-kit/connectivity/[Connectivity] — Hub-to-managed paths, ports, and variant comparison +* link:/patterns/ramendr-starter-kit/installation-details/[Installation details] — Variant installation differences and pattern scripts +* link:/patterns/ramendr-starter-kit/getting-started/[Getting started] — Variant selection, BYOC, and deployment diff --git a/content/patterns/ramendr-starter-kit/connectivity.adoc b/content/patterns/ramendr-starter-kit/connectivity.adoc new file mode 100644 index 0000000000..1df3d01526 --- /dev/null +++ b/content/patterns/ramendr-starter-kit/connectivity.adoc @@ -0,0 +1,151 @@ +--- +title: Connectivity +weight: 15 +aliases: /ramendr-starter-kit/connectivity/ +--- + +:toc: +:imagesdir: /images +:_content-type: ASSEMBLY +include::modules/comm-attributes.adoc[] + +[id="ramendr-connectivity"] += Hub-to-managed connectivity + +Three install variants (`main.variant` in `values-global.yaml`): + +* **odf** (default) — full {ocp-data-short} Regional DR; MCG S3 on managed clusters; Submariner required for Ceph RBD replication +* **drpartner-s4** — partner CSI + hub S4; array-native volume replication; **Submariner disabled** (`submariner.enabled: false` in `opp-policy`) +* **drpartner-minimal** — partner CSI operators and Hive/BYOC plumbing only; no S4, DRClusters, or Submariner + +Draw.io source with one tab per variant: link:/images/ramendr-starter-kit/hub-managed-connectivity.drawio[`hub-managed-connectivity.drawio`]. + +[id="variant-comparison"] +== Variant comparison + +[cols="2,1,1,1",options="header"] +|=== +| Concern | odf | drpartner-s4 | drpartner-minimal + +| S3 / DR metadata | MCG buckets on each managed cluster | Hub S4 buckets (`vp-s4-storage`) | None +| Hub S3 reachability | Hub → each managed MCG endpoint | Hub + managed → hub S4 | n/a +| Peer S3 | Managed ↔ managed object-bucket metadata | Not used | Not used +| Volume replication | {ocp-data-short}/Ceph over Submariner | VSA ↔ VSA (array-native) | External / out of pattern +| Submariner | Required for Regional-DR volumes | **Disabled by default** | **Disabled** +| DRClusters / DRPolicy | MirrorPeer / MCO / regionaldr | regionaldr (`infrastructureEnabled`) | None +| DRPC / VMs | Yes (regionaldr resources) | No (`resourcesEnabled: false`) | No +| {rh-rhacm} + DNS | Required | Required | Required +|=== + +[id="connectivity-odf"] +== `odf` + +{rh-rhacm-first} needs DNS resolvability of managed cluster APIs. S3 metadata buckets (MCG) live **on each managed cluster** — hub and peers both reach those endpoints. **Submariner is required** for {ocp-data-short} RBD cross-site replication. + +.ramendr-hub-managed-connectivity-odf +image::/images/ramendr-starter-kit/hub-managed-connectivity-odf.png[odf hub-to-managed connectivity,title="odf connectivity"] + +draw.io source: link:/images/ramendr-starter-kit/hub-managed-connectivity.drawio[`hub-managed-connectivity.drawio`] (**odf** tab). + +[id="managed-mcg-s3-detail"] +=== Managed MCG S3 detail + +++++ +
+flowchart LR
+  Hub["Ramen Hub Operator"] --> MCG1["Primary MCG S3"]
+  Hub --> MCG2["Secondary MCG S3"]
+  MCG1 ---|"Peer metadata"| MCG2
+
+++++ + +[id="connectivity-drpartner-s4"] +== `drpartner-s4` + +{rh-rhacm-first} needs DNS resolvability of managed cluster APIs. S3 metadata lives on **hub S4** (`vp-s4-storage`). Volume DR is array-native (VSA ↔ VSA). The `regional-dr` application creates hub DRClusters and a `2m-novm` DRPolicy only — no DRPC or VMs. **Submariner is not deployed** (`values-opp-policy.yaml` sets `submariner.enabled: false`). + +.ramendr-drpartner-s4-connectivity +image::/images/ramendr-starter-kit/drpartner-s4-connectivity.png[drpartner-s4 hub-to-managed connectivity,title="drpartner-s4 connectivity"] + +PNG from draw.io: link:/images/ramendr-starter-kit/hub-managed-connectivity-drpartner-s4.png[`hub-managed-connectivity-drpartner-s4.png`]. SVG source: link:/images/ramendr-starter-kit/drpartner-s4-connectivity.svg[`drpartner-s4-connectivity.svg`]. draw.io source: link:/images/ramendr-starter-kit/hub-managed-connectivity.drawio[`hub-managed-connectivity.drawio`] (**drpartner-s4** tab). + +[id="hub-s4-detail"] +=== Hub S4 detail + +++++ +
+flowchart LR
+  Ramen["Ramen Hub Operator"] --> S4["Hub S4 buckets"]
+  P["Primary DR operator"] --> S4
+  S["Secondary DR operator"] --> S4
+
+++++ + +No managed ↔ managed S3 and no Submariner in `drpartner-s4`. + +[id="connectivity-drpartner-minimal"] +== `drpartner-minimal` + +{rh-rhacm-first} needs DNS resolvability of managed cluster APIs. The pattern deploys partner operators (MCO/Ramen, {VirtProductName}, OADP) and Hive/BYOC plumbing only — **no `vp-s4-storage`**, no DRClusters, no `s3StoreProfiles`, and **no Submariner**. Volume DR and S3 metadata are outside this pattern. + +.ramendr-drpartner-minimal-connectivity +image::/images/ramendr-starter-kit/drpartner-minimal-connectivity.png[drpartner-minimal hub-to-managed connectivity,title="drpartner-minimal connectivity"] + +PNG from draw.io: link:/images/ramendr-starter-kit/hub-managed-connectivity-drpartner-minimal.png[`hub-managed-connectivity-drpartner-minimal.png`]. SVG source: link:/images/ramendr-starter-kit/drpartner-minimal-connectivity.svg[`drpartner-minimal-connectivity.svg`]. draw.io source: link:/images/ramendr-starter-kit/hub-managed-connectivity.drawio[`hub-managed-connectivity.drawio`] (**drpartner-minimal** tab). + +[id="shared-requirements"] +== Shared requirements + +* **{rh-rhacm} + DNS** — Hub must resolve each managed cluster API hostname, then connect over HTTPS 443 / kube API 6443. +* **TLS / CA trust** — Trust custom certs for S4 (`drpartner-s4`) or MCG endpoints (`odf`) via `opp-policy` `s3CaInjector` where S3 is used. +* **Globalnet** — For `odf`, enable if managed cluster/service CIDRs overlap. + +[id="ports"] +== Ports + +[cols="2,2,2",options="header"] +|=== +| Path | When | Protocol / ports + +| Hub DNS → managed API | All variants | DNS UDP/TCP 53 +| Hub ↔ managed API | All variants | HTTPS 443; kube API 6443 +| Clients → hub S4 | `drpartner-s4` | HTTPS 443 +| Hub / peers → managed MCG | `odf` | HTTPS 443 +| Cluster ↔ local VSA | `drpartner-s4`, `drpartner-minimal` | Vendor CSI / iSCSI / NVMe / mgmt +| VSA ↔ VSA replication | `drpartner-s4`, `drpartner-minimal` | Vendor replication ports +| Submariner | `odf` only | UDP 4500 / 4800 / 4490 +|=== + +[id="related-diagrams"] +== Related diagrams + +[cols="2,2,2",options="header"] +|=== +| Artifact | PNG | draw.io / other + +| Full component schematic (`odf`) +| link:/images/ramendr-starter-kit/ramendr-architecture-odf.png[`ramendr-architecture-odf.png`] +| link:/images/ramendr-starter-kit/ramendr-architecture-odf.drawio[`ramendr-architecture-odf.drawio`] + +| Full component schematic (`drpartner-s4`) +| link:/images/ramendr-starter-kit/ramendr-architecture-drpartner-s4.png[`ramendr-architecture-drpartner-s4.png`] +| link:/images/ramendr-starter-kit/ramendr-architecture-drpartner-s4.drawio[`ramendr-architecture-drpartner-s4.drawio`] + +| Full component schematic (`drpartner-minimal`) +| link:/images/ramendr-starter-kit/ramendr-architecture-drpartner-minimal.png[`ramendr-architecture-drpartner-minimal.png`] +| link:/images/ramendr-starter-kit/ramendr-architecture-drpartner-minimal.drawio[`ramendr-architecture-drpartner-minimal.drawio`] + +| Connectivity overview (`odf`) +| link:/images/ramendr-starter-kit/hub-managed-connectivity-odf.png[`hub-managed-connectivity-odf.png`] +| link:/images/ramendr-starter-kit/hub-managed-connectivity.drawio[`hub-managed-connectivity.drawio`] + +| Connectivity overview (`drpartner-s4`) +| link:/images/ramendr-starter-kit/hub-managed-connectivity-drpartner-s4.png[`hub-managed-connectivity-drpartner-s4.png`] +| link:/images/ramendr-starter-kit/drpartner-s4-connectivity.svg[`drpartner-s4-connectivity.svg`] + +| Connectivity overview (`drpartner-minimal`) +| link:/images/ramendr-starter-kit/hub-managed-connectivity-drpartner-minimal.png[`hub-managed-connectivity-drpartner-minimal.png`] +| link:/images/ramendr-starter-kit/drpartner-minimal-connectivity.svg[`drpartner-minimal-connectivity.svg`] +|=== + +See also link:/patterns/ramendr-starter-kit/architecture/[Architecture] for TLS/CA handling and full schematic context. diff --git a/content/patterns/ramendr-starter-kit/getting-started.adoc b/content/patterns/ramendr-starter-kit/getting-started.adoc index f82e1a8007..b100b932eb 100644 --- a/content/patterns/ramendr-starter-kit/getting-started.adoc +++ b/content/patterns/ramendr-starter-kit/getting-started.adoc @@ -67,6 +67,14 @@ upstream git@github.com:validatedpatterns/ramendr-starter-kit.git (fetch) upstream git@github.com:validatedpatterns/ramendr-starter-kit.git (push) ---- +. Decide which install variant to use and set `main.variant` in `values-global.yaml` before install. The default is `odf`. For variant purposes and verification differences, see link:/patterns/ramendr-starter-kit/#install-variants[Install variants] on the pattern overview page. ++ +[source,yaml] +---- +main: + variant: odf +---- + . Make a local copy of secrets template outside of your repository to hold credentials for the pattern. + [WARNING] @@ -154,6 +162,52 @@ Paste the path to your locally stored private and public keys. If you do not hav path: ~/pull_secret.json ---- +.. If you selected the `drpartner-s4` variant, add the two Vault secrets required for hub `vp-s4-storage`. Paths must match the chart overrides in `variants/drpartner-s4/values-drpartner-s4.yaml` (`s4UICredentials.vaultKey` and `s4APICredentials.vaultKey`). The `drpartner-minimal` variant does not deploy `vp-s4-storage` and does not need these secrets. ++ +[source,yaml] +---- + - name: s4-ui-credentials + vaultPrefixes: + - global + fields: + - name: UI_USERNAME + value: s4admin + onMissingValue: error + - name: UI_PASSWORD + onMissingValue: generate + override: true + vaultPolicy: advancedPolicy + + - name: s4-api-credentials + vaultPrefixes: + - global + fields: + - name: AWS_ACCESS_KEY_ID + value: s4admin + onMissingValue: error + - name: AWS_SECRET_ACCESS_KEY + onMissingValue: generate + override: true + vaultPolicy: advancedPolicy +---- ++ +External Secrets merges both Vault entries into Kubernetes Secret `s4-credentials` in the `vp-s4-storage` namespace. Defaults in `values-secret.yaml.template` use `s4admin` for the UI user and access key ID; the password and secret key can be generated when `onMissingValue: generate` and `vaultPolicies.advancedPolicy` are set in your secrets file. + +.. If you plan to use bring your own cluster (BYOC) instead of Hive-provisioned managed clusters, add kubeconfig secrets for each regional DR cluster. See link:#using-byoc[Using bring your own cluster (BYOC)]. ++ +[source,yaml] +---- + - name: ocp-primary_cluster_kubeconfig + fields: + - name: kubeconfig + path: /path/to/ocp-primary/kubeconfig + + - name: ocp-secondary_cluster_kubeconfig + fields: + - name: kubeconfig + path: /path/to/ocp-secondary/kubeconfig +---- + . Create and switch to a new branch named `my-branch`, by running the following command: + [source,terminal] @@ -179,7 +233,63 @@ $ git commit -m "any updates" $ git push origin my-branch ---- -The preferred way to install this pattern is by using the script `./pattern.sh` script. +The preferred way to install this pattern is by using the `./pattern.sh` script. By default, {rh-rhacm-first} Hive provisions the primary and secondary managed clusters on AWS. If you already have regional DR clusters, use link:#using-byoc[BYOC] and `./pattern.sh make install-byoc` instead of `./pattern.sh make install`. + +[id="using-byoc"] +== Using bring your own cluster (BYOC) + +BYOC (bring your own cluster) lets you use existing OpenShift clusters as the regional DR pair (`ocp-primary` and `ocp-secondary`) instead of waiting for Hive to provision new managed clusters on AWS. This option is available for all install variants and is the typical path for `drpartner-minimal` (Hive/BYOC bring-up without Ramen DR CRs). + +[id="byoc-when-to-use"] +=== When to use BYOC + +Use BYOC when: + +* You already operate two OpenShift clusters that will serve as the primary and secondary DR sites. +* You want to avoid Hive cluster provisioning time and AWS cluster creation costs for the managed pair. +* You are validating partner CSI plumbing on clusters you provisioned outside the pattern. +* You are installing on a platform other than AWS + +The default install path (Hive provisioning) remains appropriate when you want the pattern to create and lifecycle-manage the managed clusters for you. + +[id="byoc-requirements"] +=== BYOC cluster requirements + +Before install, the `install-byoc` target runs `ansible/playbooks/validate_byoc.yml` against the kubeconfigs in your secrets file. Clusters must meet these checks: + +* **Reachability** — Hub and both regional clusters are reachable from the install environment. +* **{ocp} version** — Hub is {ocp} 4.18 or later. Primary and secondary must match the hub minor version (same minor is required for RamenDR and {ocp-data-short}). +* **Non-overlapping networks** — Pod and service CIDRs must not overlap between the hub, primary, and secondary clusters. + +You are responsible for making sure that the managed clusters are suitable for running Virtual Machines. The Hive +provisioner will use `m5.metal` instances on AWS. Different clouds and bare metal have different requirements which +are hard to generalize, so the playbook does not. (Previous versions would look for "metal" instance types but that +only works on AWS.) + +[id="byoc-configuration"] +=== Configuring BYOC + +.Provision and register your regional DR clusters with {rh-rhacm-first}. Managed cluster names must match the names in +link:https://github.com/validatedpatterns/ramendr-starter-kit/blob/main/overrides/values-cluster-names.yaml[`overrides/values-cluster-names.yaml`] (default: `ocp-primary` and `ocp-secondary`). + +.Set `byoc: true` in `overrides/values-cluster-names.yaml` and align `clusterOverrides` with your cluster names, versions, and regions: ++ +[source,yaml] +---- +byoc: true + +clusterOverrides: + primary: + name: ocp-primary + version: 4.22.1 + secondary: + name: ocp-secondary + version: 4.22.1 +---- + +.Add kubeconfig paths for both regional clusters to your secrets file (see the `ocp-primary_cluster_kubeconfig` and `ocp-secondary_cluster_kubeconfig` entries in link:#preparing-for-deployment[Preparing for deployment]). + +.Commit and push `byoc: true` and any `clusterOverrides` changes to your fork so Argo CD sees them during install. [id="deploying-cluster-using-patternsh-file"] == Deploying the pattern by using the pattern.sh file @@ -204,13 +314,24 @@ Or log in by running the following command: $ export KUBECONFIG=~/ ---- -. Deploy the pattern to your cluster. Run the following command: +. Deploy the pattern to your hub cluster. + +.. For the default Hive provisioning path, run: + [source,terminal] ---- $ ./pattern.sh make install ---- +.. For BYOC, after setting `byoc: true` and adding regional cluster kubeconfigs to your secrets file, run: ++ +[source,terminal] +---- +$ ./pattern.sh make install-byoc +---- ++ +The `install-byoc` target loads secrets (when configured), runs the BYOC validation playbook, then installs the pattern the same way as `install`. + .Verification . Verify that the Operators have been installed on the hub cluster. Navigate to *Operators → Installed Operators* page in the OpenShift Container Platform web console on the Hub cluster (in the "local-cluster" view), @@ -219,7 +340,7 @@ $ ./pattern.sh make install image::/images/ramendr-starter-kit/ramendr-hub-operators.png[ramendr-starter-kit-operators,title="RamenDR Hub Operators"] -. Verify that the primary and secondary managed clusters have been built. This can take close to an hour on AWS. On the hub cluster, navigate to *All Clusters* in the OpenShift Container Plaform web console: +. Verify that the primary and secondary managed clusters are available in {rh-rhacm-first}. For the default Hive path, cluster creation can take close to an hour on AWS. For BYOC, clusters should already be registered before install completes. On the hub cluster, navigate to *All Clusters* in the OpenShift Container Platform web console: + .ramendr-starter-kit-clusters image::/images/ramendr-starter-kit/ramendr-clusters-built.png[ramendr-starter-kit-operators,title="RamenDR Clusters"] @@ -227,27 +348,45 @@ image::/images/ramendr-starter-kit/ramendr-clusters-built.png[ramendr-starter-ki + .ramendr-starter-kit-operators-applications image::/images/ramendr-starter-kit/ramendr-starter-kit-hub-applications.png[ramendr-starter-kit-hub-applications,title="RamenDR Starter Kit Applications"] -. Eventually, the Virtual Machines will be deployed and the Disaster Recovery Placement Control (DRPC) will show that resources are now protected. This screen can be reached via *All Clusters → Data Services → Disaster Recovery → Protected Applications* on the hub cluster. Normally it will be faster to synchronize Kubernetes objects than Application volumes. When these indicators both show Healthy it is safe to trigger a failover: +. For the `odf` variant (default), the Virtual Machines will be deployed and the Disaster Recovery Placement Control (DRPC) will show that resources are now protected. This screen can be reached via *All Clusters → Data Services → Disaster Recovery → Protected Applications* on the hub cluster. Normally it will be faster to synchronize Kubernetes objects than Application volumes. When these indicators both show Healthy it is safe to trigger a failover: + .ramendr-starter-kit-running-vms image::/images/ramendr-starter-kit/ramendr-starter-kit-running-vms.png[ramendr-starter-kit-running-vms,title="RamenDR Starter Kit Applications"] -. You might want to see the VMs themselves running. They will be on the primary cluster in the *Virtualization → VirtualMachines* area. The pattern configures 4 RHEL9 VMs by default: +. For the `odf` variant, you might want to see the VMs themselves running. They will be on the primary cluster in the *Virtualization → VirtualMachines* area. The pattern configures 4 RHEL9 VMs by default: + .ramendr-starter-kit-trigger-failover image::/images/ramendr-starter-kit/ramendr-starter-kit-trigger-failover-1.png[ramendr-starter-kit-trigger-failover-1,title="RamenDR Starter Kit Trigger Failover, part 1"] -. Clicking the "Failover" option will bring up a modal dialog that indicates where the failover will move the workload, and when the last known good state of the workload is. Click on the "Initiate" button to begin the failover: +. For the `odf` variant, clicking the *Failover* option will bring up a modal dialog that indicates where the failover will move the workload, and when the last known good state of the workload is. Click the *Initiate* button to begin the failover: + .ramendr-starter-kit-trigger-failover-part-2 image::/images/ramendr-starter-kit/ramendr-starter-kit-trigger-failover-2.png[ramendr-starter-kit-trigger-failover-2,title="RamenDR Starter Kit Trigger Failover, part 2"] -. While the failover is happening, you can watch the progress of it in the activity area. When it is done, it will say (with a discovered application) that it is necessary to clean up application resources to allow replication to start in the other direction. Notice that the primary cluster should have changed: +. For the `odf` variant, while the failover is happening, you can watch the progress of it in the activity area. When it is done, it will say (with a discovered application) that it is necessary to clean up application resources to allow replication to start in the other direction. Notice that the primary cluster should have changed: + .ramendr-starter-kit-trigger-failover-cleanup image::/images/ramendr-starter-kit/ramendr-starter-kit-failover-cleanup.png[ramendr-starter-kit-failover-cleanup,title="RamenDR Starter Kit Failover Cleanup"] -. The pattern provides a script to do this cleanup. Invoke it with your Hub cluster KUBECONFIG set and running `./pattern.sh scripts/cleanup-gitops-vms-non-primary.sh`: +. For the `odf` variant, the pattern provides a script to do this cleanup. Invoke it with your Hub cluster KUBECONFIG set and run `./pattern.sh scripts/cleanup-gitops-vms-non-primary.sh`: + .ramendr-starter-kit-failover-cleanup-script image::/images/ramendr-starter-kit/ramendr-starter-kit-failover-cleanup-script.png[ramendr-starter-kit-failover-cleanup-script,title="RamenDR Starter Kit Failover Cleanup"] -. After a few minutes, the resources should show healthy and protected again (the PVCs take a few minutes to synchronize): +. For the `odf` variant, after a few minutes, the resources should show healthy and protected again (the PVCs take a few minutes to synchronize): + .ramendr-starter-kit-failover-reprotected image::/images/ramendr-starter-kit/ramendr-starter-kit-reprotected.png[ramendr-starter-kit-reprotected,title="RamenDR Starter Kit Reprotected"] + +[id="verifying-partner-variants"] +== Verifying partner variants + +After sync, expect the following differences for the partner install variants. + +=== `drpartner-s4` + +* Hub operators include Multicluster Orchestrator (Ramen), {VirtProductName}, and OADP. Submariner is disabled in `opp-policy`. +* Hub `vp-s4-storage` is present and creates buckets via `s4Role.buckets`. +* No ODF StorageSystem, MirrorPeer, or `odf-dr` application. +* The `regional-dr` application runs with `ramen.infrastructureEnabled: true`. It creates DRClusters, a single `2m-novm` DRPolicy (no `2m-vm`), and upserts hub `s3StoreProfiles` with `ensureBuckets: false`. It does not deploy DRPC or VMs. +* The `opp-policy` application injects `caCertificates` on S3 profiles only. + +=== `drpartner-minimal` + +* Same partner operators and plumbing as `drpartner-s4`, but without `vp-s4-storage` or Submariner (`submariner.enabled: false` in `opp-policy`). +* The `regional-dr` application runs with both `ramen.resourcesEnabled` and `ramen.infrastructureEnabled` set to `false`. No DRPolicy, DRClusters, S3 profile work, or DRPC/VM workloads are deployed. diff --git a/content/patterns/ramendr-starter-kit/installation-details.adoc b/content/patterns/ramendr-starter-kit/installation-details.adoc index 20328e8e21..17ed7de907 100644 --- a/content/patterns/ramendr-starter-kit/installation-details.adoc +++ b/content/patterns/ramendr-starter-kit/installation-details.adoc @@ -1,7 +1,7 @@ --- title: Installation Details weight: 20 -aliases: /ansible-edge-gitops/installation-details/ +aliases: /ramendr-starter-kit/installation-details/ --- :toc: @@ -9,80 +9,152 @@ aliases: /ansible-edge-gitops/installation-details/ :_content-type: ASSEMBLY include::modules/comm-attributes.adoc[] -== Installation Steps - -.Installation Steps - -The pattern will execute the following steps on the cluster: - -. Apply Subscriptions and Applications to Hub Cluster -. This includes ACM, ODF and ODF MultiCluster Operator on the hub cluster -. Build managed clusters (ocp-primary and ocp-secondary) with Hive -.. The managed clusters have identical configuration regarding Subscriptions and Applications, so they are both in the resilient clusterGroup -. opp-policy app is responsible for copying CA certificates to the following places: -.. Creating a configmap cluster-proxy-ca-bundle in namespace openshift-config -.. Assigning this configmap to the proxy cluster resource -.. Adding the certificate material to ramen-dr-cluster-operator config in openshift-dr-system -. regional-dr app is responsible for: -.. ensuring ODF is setup properly -.. Installing submariner add-ons on managed clusters -.. Creating DRPolicy, MirrorPeer, DRPC, and Placement objects for RamenDR -.. Installing the VM workload on the primary cluster -.. Disabling Sync on the regional-dr app to prevent potential conflicts later - -=== Various Scripts included in the pattern and how to use them - -* scripts/cleanup-gitops-vms-non-primary.sh - -Designed to be run when you need to manually cleanup resources from a "failed" cluster. +[id="installation-steps"] +== Installation steps + +The pattern executes the following steps on the cluster. Hub and spoke chart values differ by install variant; see +link:#variant-installation-differences[Variant installation differences]. + +. Apply Subscriptions and Applications to the hub cluster. +. Install {rh-rhacm-first}, {ocp-data-short}, and the {ocp-data-short} Multicluster Orchestrator on the hub cluster for the `odf` variant. Partner variants install {rh-rhacm-first}, Multicluster Orchestrator (Ramen), {VirtProductName}, and OADP without ODF StorageSystem or MirrorPeer. +. Build managed clusters (`ocp-primary` and `ocp-secondary`) with Hive. +.. The managed clusters have identical subscription and application configuration, so they are both in the `resilient` cluster group. +. The `opp-policy` application is responsible for copying CA certificates to the following places: +.. Creating a `cluster-proxy-ca-bundle` ConfigMap in the `openshift-config` namespace. +.. Assigning this ConfigMap to the proxy cluster resource. +.. Adding the certificate material to the `ramen-dr-cluster-operator` config in `openshift-dr-system`. +. The `regional-dr` application is responsible for: +.. Ensuring ODF is set up properly (`odf` variant). +.. Installing Submariner add-ons on managed clusters (`odf` variant; disabled for partner variants). +.. Creating DRPolicy, MirrorPeer, DRPC, and Placement objects for RamenDR (`odf` variant). +.. Creating DRClusters and hub `s3StoreProfiles` without DRPC or VMs (`drpartner-s4` variant). +.. Installing the VM workload on the primary cluster (`odf` variant). +.. Disabling sync on the `regional-dr` application after settlement to prevent potential conflicts later. + +[id="variant-installation-differences"] +== Variant installation differences + +The pattern uses the clustergroup/{rh-rhacm} `variants/` folder layout. When `variants/` is present, the patterns-operator sets `global.vpNewFolderDir=true`. Spoke configuration nests under each variant as `variants//values-.yaml`. + +[id="cluster-provisioning"] +=== Cluster provisioning (Hive vs BYOC) + +By default, Hive provisions `ocp-primary` and `ocp-secondary` on AWS through {rh-rhacm-first}. Set `byoc: true` in +link:https://github.com/validatedpatterns/ramendr-starter-kit/blob/main/overrides/values-cluster-names.yaml[`overrides/values-cluster-names.yaml`] +to use existing regional DR clusters instead. Add their kubeconfigs to your secrets file and run `./pattern.sh make install-byoc`. +See link:/patterns/ramendr-starter-kit/getting-started/#using-byoc[Using bring your own cluster (BYOC)] for requirements and configuration steps. + +[cols="1,1,1",options="header"] +|=== +| Mode | Install command | Managed clusters + +| Hive (default) +| `./pattern.sh make install` +| Hive creates and registers `ocp-primary` and `ocp-secondary` + +| BYOC +| `./pattern.sh make install-byoc` +| You provision and register clusters; pattern validates kubeconfigs before install +|=== + +[id="variant-component-differences"] +=== Variant component differences + +[cols="1,1,1,1",options="header"] +|=== +| Component | `odf` | `drpartner-s4` | `drpartner-minimal` +| Hub DRClusters | MirrorPeer / Multicluster Orchestrator | `regional-dr` (`ramen.infrastructureEnabled`) | none +| Hub `s3StoreProfiles` | MirrorPeer / Multicluster Orchestrator | `regional-dr` upsert (`ensureBuckets: false`) | none +| S3 buckets | ODF | `vp-s4-storage` (`s4Role.buckets`) | none +| CA on profiles | `opp-policy` `s3CaInjector` | `opp-policy` `s3CaInjector` | n/a +| Submariner | enabled | disabled | disabled +| DRPolicy / DRPC / VMs | `2m-vm` DRPolicy, DRPC, VMs | `2m-novm` only; no DRPC or VMs | none +| `odf-dr` application | yes | no | no +|=== + +[id="variant-layout"] +=== Variant layout + +[source,text] +---- +values-global.yaml +variants/ + odf/ + values-odf.yaml + values-resilient.yaml # full ODF spoke BOM + drpartner-s4/ + values-drpartner-s4.yaml + values-resilient.yaml # partner spoke BOM (no ODF) + values-regional-dr.yaml # infrastructureEnabled: DRClusters + 2m-novm only + hub s3StoreProfiles + values-console-plugins-*.yaml + drpartner-minimal/ + values-drpartner-minimal.yaml # no vp-s4-storage + values-resilient.yaml + values-regional-dr.yaml # resourcesEnabled + infrastructureEnabled false + values-opp-policy.yaml # submariner.enabled: false + values-console-plugins-*.yaml +overrides/ # shared hub/spoke chart overrides +---- + +Set the variant in `values-global.yaml`: + +[source,yaml] +---- +main: + variant: drpartner-s4 +---- + +Chart overrides live in the pattern repository. For TLS/CA roles and certificate chart references, see link:/patterns/ramendr-starter-kit/architecture/#tls-and-ca[TLS and CA] on the Architecture page. + +[id="pattern-scripts"] +== Pattern scripts + +* `scripts/cleanup-gitops-vms-non-primary.sh` + +Designed to be run when you need to manually clean up resources from a "failed" cluster. Intended to be run with the kubeconfig from the hub cluster; it will determine where to -delete resources based on the current DRPC state. +delete resources based on the current DRPC state. Applies to the `odf` variant. -* scripts/download-kubeconfigs.sh +* `scripts/download-kubeconfigs.sh` -Will download and extract the kubeconfigs for the managed clusters to the current directory. +Downloads and extracts the kubeconfigs for the managed clusters to the current directory. Useful when you need to check something or do something on one of the managed clusters. -* charts/hub/opp/scripts/argocd-health-monitor.sh +* `charts/hub/opp/scripts/argocd-health-monitor.sh` Ensures that ArgoCD is progressing properly in deploying resources. A workaround for an ArgoCD -bug we ran into during development. +bug encountered during development. -* charts/hub/opp/scripts/odf-ssl-precheck.sh +* `charts/hub/opp/scripts/odf-ssl-precheck.sh` Ensures all the preconditions have been met for extracting certificates to distribute among the clusters. -* charts/hub/opp/scripts/odf-ssl-certificate-extraction.sh +* `charts/hub/opp/scripts/odf-ssl-certificate-extraction.sh` -This script does the actual work of extracting and distributing the CA material to the various -places it needs to go. Will also restart velero (OADP) pods if needed. +Extracts and distributes the CA material to the places it needs to go. Will also restart velero (OADP) pods if needed. -* charts/hub/rdr/scripts/odf-dr-prerequisites-check.sh +* `charts/hub/rdr/scripts/odf-dr-prerequisites-check.sh` Ensures that ODF is fully ready to be configured for Disaster Recovery. In particular waits for ODF to finish deployment and for the NooBaa/S3 service to be operational on all clusters. -* charts/hub/rdr/scripts/submariner-prerequisites-check.sh +* `charts/hub/rdr/scripts/submariner-prerequisites-check.sh` -Ensures that submariner is running properly and operational on both clusters. This is required for +Ensures that Submariner is running properly and operational on both clusters. This is required for ODF PVC replication to work. -* charts/hub/rdr/scripts/edge-gitops-vms-deploy.sh - -This script deploys the VM workload to the primary cluster. It uses the Validated Patterns helm chart but -is not an argo application to avoid starting up resources on clusters where we do not want them running. -Thus it runs from the Hub cluster. - -* charts/hub/rdr/scripts/drpc-health-check-argocd-sync-disable.sh - -This script disables sync on the rdr application to prevent ArgoCD from changing something during the - -* charts/hub/rdr/scripts/submariner-sg-tag.sh +* `charts/hub/rdr/scripts/edge-gitops-vms-deploy.sh` -During development of the pattern we discovered a bug in submariner that can prevent LoadBalancer services from -being created correctly after submariner is installed. This is a workaround for that bug. +Deploys the VM workload to the primary cluster. It uses the Validated Patterns Helm chart but +is not an ArgoCD application to avoid starting up resources on clusters where you do not want them running. +Thus it runs from the hub cluster. Applies to the `odf` variant. +* `charts/hub/rdr/scripts/drpc-health-check-argocd-sync-disable.sh` +Disables sync on the `regional-dr` application to prevent ArgoCD from changing resources during settlement. +* `charts/hub/rdr/scripts/submariner-sg-tag.sh` +During development of the pattern, a bug in Submariner was discovered that can prevent LoadBalancer services from +being created correctly after Submariner is installed. This is a workaround for that bug. diff --git a/static/images/ramendr-starter-kit/drpartner-minimal-connectivity.png b/static/images/ramendr-starter-kit/drpartner-minimal-connectivity.png new file mode 100644 index 0000000000..deb585ce8f Binary files /dev/null and b/static/images/ramendr-starter-kit/drpartner-minimal-connectivity.png differ diff --git a/static/images/ramendr-starter-kit/drpartner-minimal-connectivity.svg b/static/images/ramendr-starter-kit/drpartner-minimal-connectivity.svg new file mode 100644 index 0000000000..fc483cc3bb --- /dev/null +++ b/static/images/ramendr-starter-kit/drpartner-minimal-connectivity.svg @@ -0,0 +1,54 @@ + + drpartner-minimal hub and managed cluster connectivity + + + + + + + + + + + + + + Managed clusters + + + External VSAs + + + Hub cluster + RHACM · MCO · Ramen Hub + + + Primary managed + Ramen · CNV · OADP + + + Secondary managed + Ramen · CNV · OADP + + + Primary VSA + (external) + + + Secondary VSA + (external) + + + + ACM DNS + HTTPS + ACM DNS + HTTPS + + + + CSI / mgmt / data + CSI / mgmt / data + + + Array replication + (external) + diff --git a/static/images/ramendr-starter-kit/drpartner-s4-connectivity.png b/static/images/ramendr-starter-kit/drpartner-s4-connectivity.png new file mode 100644 index 0000000000..cfc812c1b1 Binary files /dev/null and b/static/images/ramendr-starter-kit/drpartner-s4-connectivity.png differ diff --git a/static/images/ramendr-starter-kit/drpartner-s4-connectivity.svg b/static/images/ramendr-starter-kit/drpartner-s4-connectivity.svg new file mode 100644 index 0000000000..78077406b8 --- /dev/null +++ b/static/images/ramendr-starter-kit/drpartner-s4-connectivity.svg @@ -0,0 +1,56 @@ + + drpartner-s4 hub and managed cluster connectivity + + + + + + + + + + + + + + Managed clusters + + + VSAs + + + Hub cluster + RHACM · MCO · Ramen Hub + vp-s4-storage · S4 buckets + + + Primary managed + Ramen · Partner CSI + + + Secondary managed + Ramen · Partner CSI + + + Primary VSA + + + Secondary VSA + + + + ACM DNS + HTTPS + ACM DNS + HTTPS + + + + S3 metadata + + + + CSI / mgmt / data + CSI / mgmt / data + + + Array replication + diff --git a/static/images/ramendr-starter-kit/hub-managed-connectivity-drpartner-minimal.png b/static/images/ramendr-starter-kit/hub-managed-connectivity-drpartner-minimal.png new file mode 100644 index 0000000000..a0d4fcacf1 Binary files /dev/null and b/static/images/ramendr-starter-kit/hub-managed-connectivity-drpartner-minimal.png differ diff --git a/static/images/ramendr-starter-kit/hub-managed-connectivity-drpartner-s4.png b/static/images/ramendr-starter-kit/hub-managed-connectivity-drpartner-s4.png new file mode 100644 index 0000000000..3202860ea7 Binary files /dev/null and b/static/images/ramendr-starter-kit/hub-managed-connectivity-drpartner-s4.png differ diff --git a/static/images/ramendr-starter-kit/hub-managed-connectivity-odf.png b/static/images/ramendr-starter-kit/hub-managed-connectivity-odf.png new file mode 100644 index 0000000000..3202860ea7 Binary files /dev/null and b/static/images/ramendr-starter-kit/hub-managed-connectivity-odf.png differ diff --git a/static/images/ramendr-starter-kit/hub-managed-connectivity.drawio b/static/images/ramendr-starter-kit/hub-managed-connectivity.drawio new file mode 100644 index 0000000000..03a3c138d4 --- /dev/null +++ b/static/images/ramendr-starter-kit/hub-managed-connectivity.drawio @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/images/ramendr-starter-kit/ramendr-architecture-drpartner-minimal.drawio b/static/images/ramendr-starter-kit/ramendr-architecture-drpartner-minimal.drawio new file mode 100644 index 0000000000..72811f5d86 --- /dev/null +++ b/static/images/ramendr-starter-kit/ramendr-architecture-drpartner-minimal.drawio @@ -0,0 +1,795 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/images/ramendr-starter-kit/ramendr-architecture-drpartner-minimal.png b/static/images/ramendr-starter-kit/ramendr-architecture-drpartner-minimal.png new file mode 100644 index 0000000000..1e7ab1dc66 Binary files /dev/null and b/static/images/ramendr-starter-kit/ramendr-architecture-drpartner-minimal.png differ diff --git a/static/images/ramendr-starter-kit/ramendr-architecture-drpartner-s4.drawio b/static/images/ramendr-starter-kit/ramendr-architecture-drpartner-s4.drawio new file mode 100644 index 0000000000..90b8fe973a --- /dev/null +++ b/static/images/ramendr-starter-kit/ramendr-architecture-drpartner-s4.drawio @@ -0,0 +1,795 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/images/ramendr-starter-kit/ramendr-architecture-drpartner-s4.png b/static/images/ramendr-starter-kit/ramendr-architecture-drpartner-s4.png new file mode 100644 index 0000000000..fe031d8fe9 Binary files /dev/null and b/static/images/ramendr-starter-kit/ramendr-architecture-drpartner-s4.png differ diff --git a/static/images/ramendr-starter-kit/ramendr-architecture-odf.drawio b/static/images/ramendr-starter-kit/ramendr-architecture-odf.drawio new file mode 100644 index 0000000000..a23ef7db08 --- /dev/null +++ b/static/images/ramendr-starter-kit/ramendr-architecture-odf.drawio @@ -0,0 +1,795 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/images/ramendr-starter-kit/ramendr-architecture-odf.png b/static/images/ramendr-starter-kit/ramendr-architecture-odf.png new file mode 100644 index 0000000000..7835a62eff Binary files /dev/null and b/static/images/ramendr-starter-kit/ramendr-architecture-odf.png differ diff --git a/static/images/ramendr-starter-kit/ramendr-architecture.drawio.png b/static/images/ramendr-starter-kit/ramendr-architecture.drawio.png deleted file mode 100644 index d34712df1c..0000000000 Binary files a/static/images/ramendr-starter-kit/ramendr-architecture.drawio.png and /dev/null differ