<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Documentation on Ramen</title><link>https://ramendr.github.io/ramen/docs/</link><description>Recent content in Documentation on Ramen</description><generator>Hugo</generator><language>en</language><atom:link href="https://ramendr.github.io/ramen/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>User quick start guide for testing application DR</title><link>https://ramendr.github.io/ramen/docs/user-quick-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/user-quick-start/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="user-quick-start-guide-for-testing-application-dr"&gt;User quick start guide for testing application DR&lt;/h1&gt;&#10;&lt;p&gt;This page will help you to set up an environment for testing &lt;strong&gt;Regional-DR&lt;/strong&gt;&#10;basic tests.&lt;/p&gt;&#10;&lt;p&gt;This video will demonstrate how to test application DR &lt;em&gt;after&lt;/em&gt; completing the&#10;configuration.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://www.youtube.com/embed/8-fpChSWzeo"&gt;&lt;img src="https://img.youtube.com/vi/8-fpChSWzeo/hqdefault.jpg" alt="Video demo" loading="lazy" class="img-fluid"&gt;&#10;&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;h2 id="what-youll-need"&gt;What you’ll need&lt;/h2&gt;&#10;&lt;p&gt;To set up a &lt;em&gt;Ramen&lt;/em&gt; development environment you will need to run 3 Kubernetes&#10;clusters. &lt;em&gt;Ramen&lt;/em&gt; makes this easy using minikube, but you need enough resources:&lt;/p&gt;</description></item><item><title>Ramen developer quick start guide</title><link>https://ramendr.github.io/ramen/docs/devel-quick-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/devel-quick-start/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="ramen-developer-quick-start-guide"&gt;Ramen developer quick start guide&lt;/h1&gt;&#10;&lt;h2 id="contribution-flow"&gt;Contribution Flow&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Fork the repository on GitHub&lt;/li&gt;&#10;&lt;li&gt;Create a branch from where you want to base your work (usually main).&lt;/li&gt;&#10;&lt;li&gt;Make your changes and arrange them in readable commits.&lt;/li&gt;&#10;&lt;li&gt;Make sure your commit messages are in the proper format.&lt;/li&gt;&#10;&lt;li&gt;Make sure all &lt;a href="https://ramendr.github.io/ramen/docs/testing/"&gt;tests&lt;/a&gt;&#10; pass, and add any new&#10;&lt;a href="https://ramendr.github.io/ramen/docs/testing/"&gt;tests&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Push your changes to the branch in your fork of the repository. as&#10;appropriate.&lt;/li&gt;&#10;&lt;li&gt;Submit a pull request to the original repository.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="getting-the-source"&gt;Getting the source&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Fork the &lt;em&gt;Ramen&lt;/em&gt; repository on github&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Clone the source locally&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone git@github.com:my-github-user/ramen.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Add an &lt;code&gt;upstream&lt;/code&gt; remote, to make it easy to sync your repo from upstream.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git remote add upstream https://github.com/RamenDR/ramen.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Add the commit-msg hook to sign off your commits&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Ramen&lt;/em&gt; requires a &lt;code&gt;Signed-off-by: My Name &amp;lt;myemail@example.com&amp;gt;&lt;/code&gt; footer in&#10;the commit message. To add it automatically to all commits, add this hook:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp hack/commit-msg .git/hooks/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ol&gt;</description></item><item><title>Installing Ramen</title><link>https://ramendr.github.io/ramen/docs/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/install/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="installing-ramen"&gt;Installing Ramen&lt;/h1&gt;&#10;&lt;p&gt;This guide describes how to install Ramen&amp;rsquo;s disaster recovery operators on your&#10;cluster environment.&lt;/p&gt;&#10;&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;Ramen consists of two operators that work together to provide disaster recovery&#10;capabilities:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Ramen Hub Operator&lt;/strong&gt; - Installed on the OCM hub cluster, orchestrates DR&#10;operations across managed clusters&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Ramen DR Cluster Operator&lt;/strong&gt; - Installed on each OCM managed cluster,&#10;manages local volume replication and workload protection&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;&#10;&lt;p&gt;Before installing Ramen, ensure the following requirements are met:&lt;/p&gt;</description></item><item><title>Configure Ramen</title><link>https://ramendr.github.io/ramen/docs/configure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/configure/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="configure-ramen"&gt;Configure Ramen&lt;/h1&gt;&#10;&lt;p&gt;This guide describes how to configure Ramen for disaster recovery operations&#10;after installing the Ramen operators. Configuration involves setting up S3&#10;storage profiles, creating DRCluster resources, and establishing DRPolicy&#10;resources to define replication relationships.&lt;/p&gt;&#10;&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;&#10;&lt;p&gt;Before configuring Ramen, ensure you have completed the installation steps&#10;described in &lt;a href="https://ramendr.github.io/ramen/docs/install/"&gt;install.md&lt;/a&gt;&#10;. You should have:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;OCM (Open Cluster Management)&lt;/strong&gt; with at least two managed clusters&#10;registered&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Ramen hub operator&lt;/strong&gt; installed on the OCM hub cluster&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Ramen catalog&lt;/strong&gt; installed on each managed cluster participating in DR&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="gather-required-information"&gt;Gather Required Information&lt;/h3&gt;&#10;&lt;p&gt;Before starting configuration, collect the following information:&lt;/p&gt;</description></item><item><title>Workload Management Using Ramen</title><link>https://ramendr.github.io/ramen/docs/usage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/usage/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="workload-management-using-ramen"&gt;Workload Management Using Ramen&lt;/h1&gt;&#10;&lt;p&gt;This guide describes how to protect and manage workloads using Ramen&amp;rsquo;s disaster&#10;recovery capabilities.&lt;/p&gt;&#10;&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;Ramen supports protecting applications across three different deployment types:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;GitOps Applications (Recommended) - For applications deployed from Git&#10;repositories via ArgoCD ApplicationSets&lt;/li&gt;&#10;&lt;li&gt;Discovered Applications - For existing applications deployed via kubectl,&#10;Helm, or other methods&lt;/li&gt;&#10;&lt;li&gt;Applications with Recipes - For complex stateful applications requiring custom&#10;capture/recovery workflows&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;All methods support the same DR operations:&lt;/p&gt;</description></item><item><title>Using Recipes for Disaster Recovery (DR)</title><link>https://ramendr.github.io/ramen/docs/recipe/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/recipe/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="using-recipes-for-disaster-recovery-dr"&gt;Using Recipes for Disaster Recovery (DR)&lt;/h1&gt;&#10;&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;&#10;&lt;p&gt;A recipe is a Kubernetes Custom Resource that defines custom workflows for&#10;capturing and recovering application resources and volumes during disaster&#10;recovery (DR) operations. Recipes are part of Ramen&amp;rsquo;s Kubernetes-native Disaster&#10;Recovery ecosystem, providing vendor-supplied or custom disaster recovery&#10;specifications for complex stateful applications. While Ramen supports multiple&#10;workload protection methods (GitOps, discovered applications), Recipes are&#10;specifically designed for applications that require:&lt;/p&gt;</description></item><item><title>Logging</title><link>https://ramendr.github.io/ramen/docs/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/logging/</guid><description>&lt;h1 id="logging"&gt;Logging&lt;/h1&gt;&#10;&lt;p&gt;This document outlines the logging standards and best practices for Ramen.&lt;/p&gt;&#10;&lt;h2 id="general-principles"&gt;General Principles&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Consistency&lt;/strong&gt;: All controllers should follow the same logging conventions.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Performance Awareness&lt;/strong&gt;: Logging should not significantly impact the&#10;performance. Be mindful of the logging levels and the amount of data logged.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="logger-configuration"&gt;Logger Configuration&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Each controller should create its logger instance with a name specific to the&#10;controller for easy identification. For example, if the controller is named&#10;&lt;code&gt;ProtectedVolumeReplicationGroupList&lt;/code&gt;, the logger name could be a shortened&#10;form of the controller like &lt;code&gt;pvrgl&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ctrl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;pvrgl&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Loggers should be enriched with key contextual information to make the logs&#10;more informative. This includes:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The name of the custom resource.&lt;/li&gt;&#10;&lt;li&gt;Then namespace of the custom resource, if applicable.&lt;/li&gt;&#10;&lt;li&gt;The UID of the custom resource.&lt;/li&gt;&#10;&lt;li&gt;The version of the custom resource.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NamespacedName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;rid&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ObjectMeta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ObjectMeta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ResourceVersion&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;The context passed to functions should be augmented with the logger instance:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ctrl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;LoggerInto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will be useful when we call functions that are outside of the controller&#10;scope and the instance.log object is not available to them.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Metrics</title><link>https://ramendr.github.io/ramen/docs/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/metrics/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="metrics"&gt;Metrics&lt;/h1&gt;&#10;&lt;p&gt;Metrics are collected using Prometheus, and registered with its global metrics&#10;registry in each controller. There are two ways where you can look at the&#10;metrics in ramen. One way is use prometheus stack(recommended) and the other way&#10;is to use curl or postman. More details on each of these in the below sections.&lt;/p&gt;&#10;&lt;p&gt;More information on metrics is&#10;&lt;a href="https://book.kubebuilder.io/reference/metrics.html"&gt;here&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;h2 id="1-using-prometheus-stack"&gt;1. Using Prometheus Stack&lt;/h2&gt;&#10;&lt;p&gt;We recommend to use&#10;&lt;a href="https://github.com/prometheus-operator/kube-prometheus"&gt;kube-prometheus&lt;/a&gt;&#10;.&#10;Installing this will give you a containerized stack that includes Prometheus,&#10;AlertManager and Grafana.&lt;/p&gt;</description></item><item><title>Testing</title><link>https://ramendr.github.io/ramen/docs/testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/testing/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="testing"&gt;Testing&lt;/h1&gt;&#10;&lt;h2 id="unit-tests-and-integration-tests"&gt;Unit tests and Integration tests&lt;/h2&gt;&#10;&lt;p&gt;The unit and integration tests for the controller code are written using the&#10;&lt;code&gt;ginkgo&lt;/code&gt; and &lt;code&gt;gomega&lt;/code&gt; testing frameworks. The tests are written in the&#10;&lt;code&gt;*_test.go&lt;/code&gt; files in the &lt;code&gt;controllers&lt;/code&gt; directory.&lt;/p&gt;&#10;&lt;p&gt;By default, the tests are run against a single kubernetes api&#10;server(&lt;a href="https://github.com/kubernetes-sigs/controller-runtime/tree/main/tools/setup-envtest"&gt;https://github.com/kubernetes-sigs/controller-runtime/tree/main/tools/setup-envtest&lt;/a&gt;&#10;)&#10;provided by the controller-runtime project.&lt;/p&gt;&#10;&lt;p&gt;The test framework uses mock interfaces for the components that aren&amp;rsquo;t installed&#10;in the test environment, like ocm, s3 and csi. These mock interfaces are used to&#10;fake a success or failure from the components to test the controller code.&lt;/p&gt;</description></item><item><title>End to End testing</title><link>https://ramendr.github.io/ramen/docs/e2e/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/e2e/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="end-to-end-testing"&gt;End to End testing&lt;/h1&gt;&#10;&lt;p&gt;RamenDR end-to-end (e2e) tests validate various scenarios for regional DR using&#10;predefined workloads and deployment methods.&lt;/p&gt;&#10;&lt;h2 id="running-end-to-end-tests"&gt;Running End to End tests&lt;/h2&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;[!IMPORTANT]&#10;All commands must be ran from the e2e directory.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h3 id="preparing-a-configyaml-file"&gt;Preparing a &lt;code&gt;config.yaml&lt;/code&gt; file&lt;/h3&gt;&#10;&lt;h4 id="for-drenv-environment"&gt;For drenv environment&lt;/h4&gt;&#10;&lt;p&gt;If &lt;code&gt;drenv&lt;/code&gt; was used to configure RDR clusters, easily copy &lt;code&gt;config.yaml.sample&lt;/code&gt;&#10;and add the clusters kubeconfig paths into &lt;code&gt;config.yaml&lt;/code&gt; using:&lt;/p&gt;</description></item><item><title>Building ramen</title><link>https://ramendr.github.io/ramen/docs/build/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/build/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="building-ramen"&gt;Building ramen&lt;/h1&gt;&#10;&lt;h2 id="go-toolchain"&gt;Go toolchain&lt;/h2&gt;&#10;&lt;p&gt;&lt;em&gt;Ramen&lt;/em&gt; uses Go&amp;rsquo;s &lt;a href="https://go.dev/doc/toolchain"&gt;toolchain management&lt;/a&gt;&#10; to&#10;specify both the minimum required Go version and the recommended toolchain&#10;version in &lt;code&gt;go.mod&lt;/code&gt;:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The &lt;code&gt;go&lt;/code&gt; directive specifies the minimum Go version required to build &lt;em&gt;Ramen&lt;/em&gt;.&lt;/li&gt;&#10;&lt;li&gt;The &lt;code&gt;toolchain&lt;/code&gt; directive specifies the recommended Go toolchain for&#10;development. By default, Go automatically downloads this version when a newer&#10;toolchain is needed.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="building-with-an-older-go-toolchain"&gt;Building with an older Go toolchain&lt;/h3&gt;&#10;&lt;p&gt;If you are building in a disconnected environment or with a Go version older&#10;than the &lt;code&gt;toolchain&lt;/code&gt; directive, set &lt;code&gt;GOTOOLCHAIN&lt;/code&gt; to use the locally installed&#10;Go toolchain:&lt;/p&gt;</description></item><item><title>DRPolicy CRD</title><link>https://ramendr.github.io/ramen/docs/drpolicy-crd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/drpolicy-crd/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="drpolicy-crd"&gt;DRPolicy CRD&lt;/h1&gt;&#10;&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;The &lt;strong&gt;DRPolicy&lt;/strong&gt; custom resource defines the disaster recovery topology and&#10;replication configuration between peer clusters. It is a cluster-scoped resource&#10;created by administrators on the OCM hub cluster that establishes the DR&#10;relationship between two managed clusters.&lt;/p&gt;&#10;&lt;p&gt;A DRPolicy specifies:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Which two clusters participate in DR&lt;/li&gt;&#10;&lt;li&gt;The replication schedule for Async (Regional DR)&lt;/li&gt;&#10;&lt;li&gt;Storage class selectors for volume replication&lt;/li&gt;&#10;&lt;li&gt;Whether to use async (Regional DR) or sync (Metro DR)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;Lifecycle:&lt;/strong&gt; DRPolicy resources are created once during DR setup and are&#10;typically long-lived.&lt;/p&gt;</description></item><item><title>DRCluster CRD</title><link>https://ramendr.github.io/ramen/docs/drcluster-crd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/drcluster-crd/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="drcluster-crd"&gt;DRCluster CRD&lt;/h1&gt;&#10;&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;The &lt;strong&gt;DRCluster&lt;/strong&gt; custom resource represents a managed cluster registered for&#10;disaster recovery operations. It is a cluster-scoped resource created by&#10;administrators on the OCM hub cluster that provides:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;S3 configuration for storing PV metadata and cluster state&lt;/li&gt;&#10;&lt;li&gt;Network fencing configuration for Sync (Metro)&lt;/li&gt;&#10;&lt;li&gt;Cluster availability and fencing status&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;DRClusters are referenced by DRPolicy resources to define which clusters&#10;participate in DR relationships. Each managed cluster that participates in DR&#10;must have a corresponding DRCluster resource on the hub.&lt;/p&gt;</description></item><item><title>DRClusterConfig CRD</title><link>https://ramendr.github.io/ramen/docs/drclusterconfig-crd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/drclusterconfig-crd/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="drclusterconfig-crd"&gt;DRClusterConfig CRD&lt;/h1&gt;&#10;&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;The &lt;strong&gt;DRClusterConfig&lt;/strong&gt; custom resource provides cluster-specific disaster&#10;recovery configuration on managed clusters. It is a cluster-scoped resource that&#10;exists on each managed cluster (not on the hub) and serves two primary purposes:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Configuration Communication&lt;/strong&gt;: Conveys the cluster identity and desired&#10;replication schedules from the hub to the managed cluster&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Capability Discovery&lt;/strong&gt;: Scans the cluster for storage-related classes&#10;(StorageClass, VolumeSnapshotClass, VolumeReplicationClass, etc.) that have&#10;the required Ramen labels/annotations and reports them in its status. See the&#10;Status Fields section below for the specific label/annotation requirements&#10;for each class type.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; DRClusterConfig does not create these classes. Storage providers or&#10;administrators must create and label/annotate the classes appropriately.&#10;DRClusterConfig only discovers and reports them in its status.&lt;/p&gt;</description></item><item><title>DRPlacementControl CRD</title><link>https://ramendr.github.io/ramen/docs/drpc-crd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/drpc-crd/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="drplacementcontrol-crd"&gt;DRPlacementControl CRD&lt;/h1&gt;&#10;&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;The &lt;strong&gt;DRPlacementControl&lt;/strong&gt; (DRPC) custom resource is the primary interface for&#10;protecting and managing applications with disaster recovery capabilities.&#10;Created by users in the application namespace on the OCM hub cluster, it&#10;orchestrates:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Initial DR protection of applications deployed on the preferred cluster&lt;/li&gt;&#10;&lt;li&gt;Failover operations to peer clusters during disasters&lt;/li&gt;&#10;&lt;li&gt;Planned relocation between clusters&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The DRPC is the control plane for application DR - it creates and manages&#10;VolumeReplicationGroup (VRG) resources on managed clusters via ManifestWork,&#10;coordinates with OCM Placement, and tracks DR state.&lt;/p&gt;</description></item><item><title>VolumeReplicationGroup CRD</title><link>https://ramendr.github.io/ramen/docs/vrg-crd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/vrg-crd/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="volumereplicationgroup-crd"&gt;VolumeReplicationGroup CRD&lt;/h1&gt;&#10;&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;The &lt;strong&gt;VolumeReplicationGroup&lt;/strong&gt; (VRG) custom resource manages volume replication&#10;and Kubernetes object protection for an application on a managed cluster. VRGs&#10;are &lt;strong&gt;not directly created by users&lt;/strong&gt; - they are automatically created and&#10;managed by the DRPlacementControl (DRPC) on the hub cluster via ManifestWork.&lt;/p&gt;&#10;&lt;p&gt;A VRG controls:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Volume replication state (Primary/Secondary) for all PVCs matching the&#10;selector&lt;/li&gt;&#10;&lt;li&gt;VolumeReplication or VolSync resource creation and management for data&#10;replication&lt;/li&gt;&#10;&lt;li&gt;PV metadata storage in S3 for cross-cluster recovery&lt;/li&gt;&#10;&lt;li&gt;Kubernetes object capture and recovery (via Velero and Recipe)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;Lifecycle:&lt;/strong&gt; Created by DRPC when enabling DR protection. Exists on the active&#10;cluster as Primary and on the peer cluster as Secondary. Deleted when DRPC is&#10;removed.&lt;/p&gt;</description></item><item><title>MaintenanceMode CRD</title><link>https://ramendr.github.io/ramen/docs/maintenancemode-crd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ramendr.github.io/ramen/docs/maintenancemode-crd/</guid><description>&lt;!--&#10;SPDX-FileCopyrightText: The RamenDR authors&#10;SPDX-License-Identifier: Apache-2.0&#10;--&gt;&#10;&lt;h1 id="maintenancemode-crd"&gt;MaintenanceMode CRD&lt;/h1&gt;&#10;&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;The &lt;strong&gt;MaintenanceMode&lt;/strong&gt; custom resource enables coordination between Ramen and&#10;storage backends during disaster recovery operations. It is a cluster-scoped&#10;resource created by Ramen on managed clusters to signal storage providers that&#10;specific maintenance actions are required before proceeding with DR operations.&lt;/p&gt;&#10;&lt;p&gt;Storage backends use MaintenanceMode to:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Prepare storage systems for failover operations&lt;/li&gt;&#10;&lt;li&gt;Perform necessary cleanup or synchronization&lt;/li&gt;&#10;&lt;li&gt;Report readiness back to Ramen&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;This allows storage providers to integrate custom logic into Ramen&amp;rsquo;s DR&#10;workflows without Ramen needing to know storage-specific implementation details.&lt;/p&gt;</description></item></channel></rss>