|
| 1 | +--- |
| 2 | +title: Trilio Continuous Restore |
| 3 | +date: 2026-04-08 |
| 4 | +tier: sandbox |
| 5 | +summary: A demonstration of Trilio Continuous Restore for stateful applications |
| 6 | +rh_products: |
| 7 | + - Red Hat OpenShift Container Platform |
| 8 | + - Red Hat OpenShift GitOps |
| 9 | + - Red Hat Advanced Cluster Management |
| 10 | +partners: |
| 11 | + - Trilio |
| 12 | +industries: |
| 13 | + - General |
| 14 | +aliases: /trilio-cr/ |
| 15 | +links: |
| 16 | + github: https://github.com/trilio-demo/trilio-continuous-restore |
| 17 | + install: getting-started |
| 18 | + bugs: https://github.com/trilio-demo/trilio-continuous-restore/issues |
| 19 | + feedback: https://docs.google.com/forms/d/e/1FAIpQLScI76b6tD1WyPu2-d_9CCVDr3Fu5jYERthqLKJDUGwqBg7Vcg/viewform |
| 20 | +--- |
| 21 | + |
| 22 | +# Trilio Continuous Restore — Red Hat Validated Pattern |
| 23 | + |
| 24 | +## Overview |
| 25 | + |
| 26 | +This Validated Pattern delivers an automated, GitOps-driven Disaster Recovery (DR) solution for stateful applications running on Red Hat OpenShift. It integrates [Trilio for Kubernetes](https://trilio.io) with the [Red Hat Validated Patterns framework](https://validatedpatterns.io) to provide: |
| 27 | + |
| 28 | +- **Automated backup** of stateful workloads on the primary (hub) cluster |
| 29 | +- **Continuous Restore** — Trilio's accelerated Recovery Time Objective (RTO) DR path that continuously pre-stages backup data on the DR cluster so that recovery requires only metadata retrieval, not a full data transfer |
| 30 | +- **Automated DR testing** — the full backup-to-restore lifecycle runs as a scheduled, self-healing GitOps workflow with no human intervention after initial setup |
| 31 | +- **Multi-cluster lifecycle management** via Red Hat Advanced Cluster Management (ACM) |
| 32 | + |
| 33 | +### Use Case |
| 34 | + |
| 35 | +The pattern targets organisations that need a documented, repeatable DR posture for Kubernetes-native workloads — particularly those that must demonstrate RTO/Recovery Point Objective (RPO) targets through regular, automated DR tests rather than annual manual exercises. |
| 36 | + |
| 37 | +A WordPress + MySQL deployment is included as a representative stateful application. It serves as the reference workload for the full backup, restore, and URL-rewrite lifecycle. |
| 38 | + |
| 39 | +--- |
| 40 | + |
| 41 | +## Architecture |
| 42 | + |
| 43 | +```mermaid |
| 44 | +graph TD |
| 45 | + subgraph Git["Git (Source of Truth)"] |
| 46 | + values["values-hub.yaml\nvalues-secondary.yaml\ncharts/"] |
| 47 | + end |
| 48 | +
|
| 49 | + subgraph Hub["Hub Cluster (primary)"] |
| 50 | + ACM["ACM"] |
| 51 | + ArgoCD["ArgoCD"] |
| 52 | + Vault["HashiCorp Vault + ESO"] |
| 53 | + Trilio_Hub["Trilio Operator + TVM"] |
| 54 | + CronJob["Imperative CronJob\n(DR lifecycle automation)"] |
| 55 | + end |
| 56 | +
|
| 57 | + subgraph Spoke["DR Cluster (secondary)"] |
| 58 | + Trilio_Spoke["Trilio Operator + TVM"] |
| 59 | + EventTarget["EventTarget pod\n(pre-stages PVCs)"] |
| 60 | + ConsistentSet["ConsistentSet\n(restore point)"] |
| 61 | + end |
| 62 | +
|
| 63 | + S3["Shared S3 Bucket"] |
| 64 | +
|
| 65 | + Git -->|GitOps sync| ArgoCD |
| 66 | + ArgoCD --> Trilio_Hub |
| 67 | + Vault -->|S3 creds + license| Trilio_Hub |
| 68 | + Trilio_Hub -->|backups| S3 |
| 69 | + ACM -->|provisions| Spoke |
| 70 | + S3 -->|EventTarget polls| EventTarget |
| 71 | + EventTarget --> ConsistentSet |
| 72 | + CronJob -->|restore from ConsistentSet| ConsistentSet |
| 73 | +``` |
| 74 | + |
| 75 | +### Component Roles |
| 76 | + |
| 77 | +| Component | Where | Role | |
| 78 | +|-----------|-------|------| |
| 79 | +| Trilio Operator | Hub + Spoke | Installed via Operator Lifecycle Manager (OLM) from the `certified-operators` catalog, channel `5.3.x` | |
| 80 | +| TrilioVaultManager | Hub + Spoke | Trilio operand Custom Resource (CR); manages the Trilio data plane | |
| 81 | +| Red Hat OpenShift | Hub + Spoke | Container orchestration platform; provides OLM, storage, networking, and the GitOps operator substrate | |
| 82 | +| Red Hat OpenShift GitOps (ArgoCD) | Hub + Spoke | GitOps sync engine; all configuration is driven from Git | |
| 83 | +| Red Hat Advanced Cluster Management (ACM) | Hub | Cluster lifecycle, policy enforcement, and spoke provisioning | |
| 84 | +| Validated Patterns Imperative CronJob | Hub + Spoke | Runs the automated DR lifecycle on a 10-minute schedule | |
| 85 | +| BackupTarget | Hub + Spoke | Points to the shared S3 bucket; the spoke BackupTarget has the EventTarget flag set | |
| 86 | +| BackupPlan | Hub | Defines backup scope (wordpress namespace), quiesce/unquiesce hooks, and retention | |
| 87 | +| CR BackupPlan | Hub | Continuous Restore variant of BackupPlan; drives pre-staging on the spoke | |
| 88 | +| EventTarget pod | Spoke | Watches the shared S3 bucket for new backups; pre-stages Persistent Volume Claims (PVCs) locally | |
| 89 | +| ConsistentSet | Spoke | Cluster-scoped CR representing a fully pre-staged restore point | |
| 90 | +| HashiCorp Vault and External Secrets Operator (ESO) | Hub | Secret management; S3 credentials and Trilio license are never stored in Git | |
| 91 | + |
| 92 | +### How Continuous Restore Works |
| 93 | + |
| 94 | +1. The hub creates a backup using the CR BackupPlan and writes it to the shared S3 storage. |
| 95 | +2. The EventTarget pod on the spoke detects the new backup and begins copying volume data locally — ahead of any DR event. |
| 96 | +3. When the spoke's imperative job detects an Available ConsistentSet, it submits a Restore CR. Because the data is already local, only backup metadata is fetched — resulting in significantly lower RTO than a standard on-demand restore. |
| 97 | +4. The post-restore Hook CR rewrites WordPress database URLs to the DR cluster's ingress domain. |
| 98 | + |
| 99 | +## Links |
| 100 | + |
| 101 | +- [Trilio for Kubernetes documentation](https://docs.trilio.io/kubernetes) |
| 102 | +- [Red Hat Validated Patterns](https://validatedpatterns.io) |
| 103 | +- [Validated Patterns imperative framework](https://validatedpatterns.io/learn/imperative-actions/) |
| 104 | +- [Red Hat Advanced Cluster Management (ACM)](https://access.redhat.com/documentation/en-us/red_hat_advanced_cluster_management_for_kubernetes) |
| 105 | +- [External Secrets Operator](https://external-secrets.io) |
0 commit comments