| title | Getting started |
|---|---|
| weight | 20 |
| aliases | /trilio-cr/getting-started/ |
git clone https://github.com/trilio-demo/trilio-continuous-restore
cd trilio-continuous-restoreEdit values-hub.yaml and values-secondary.yaml to set your S3 bucket name and region:
# In both values-hub.yaml and values-secondary.yaml, under the trilio-operand app overrides:
overrides:
- name: backupTarget.bucketName
value: <your-bucket-name>
- name: backupTarget.region
value: <your-bucket-region> # for example, us-east-1Create values-secret.yaml from the template:
cp values-secret.yaml.template ~/values-secret-trilio-continuous-restore.yamlEdit ~/values-secret-trilio-continuous-restore.yaml and fill in your credentials:
secrets:
- name: trilio-license
vaultPrefixes:
- global
fields:
- name: key
value: <your-trilio-license-key> # single unbroken line, no escape characters
- name: trilio-s3
vaultPrefixes:
- global
fields:
- name: accessKey
value: <your-s3-access-key>
- name: secretKey
value: <your-s3-secret-key>Always update secrets in your home directory, never in the repo's
values-secret.yaml.templateso that secrets are never committed to git.
./pattern.sh make installThis command:
- Bootstraps HashiCorp Vault and loads secrets from
~/values-secret-trilio-continuous-restore.yaml - Installs the Validated Patterns operator on the hub
- Creates the
ValidatedPatternCR which triggers ArgoCD to deploy all hub components
Monitor progress in the ArgoCD UI or by running:
oc get application -n openshift-gitopsAll applications should reach Synced / Healthy within 10–15 minutes.
Alternative: manual secret population by using oc
To write or rotate secrets directly in HashiCorp Vault without re-running ./pattern.sh make install:
# Extract Vault root token
VAULT_TOKEN=$(oc get secret vaultkeys -n imperative \
-o jsonpath='{.data.vault_data_json}' | \
base64 -d | python3 -c "import sys,json; print(json.load(sys.stdin)['root_token'])")
# Write Trilio license
oc exec -n vault vault-0 -- env VAULT_TOKEN=$VAULT_TOKEN \
vault kv put secret/global/trilio-license key="<your-license-key>"
# Write S3 credentials
oc exec -n vault vault-0 -- env VAULT_TOKEN=$VAULT_TOKEN \
vault kv put secret/global/trilio-s3 accessKey="<key>" secretKey="<secret>"You can also reload secrets from ~/values-secret-trilio-continuous-restore.yaml by running:
./pattern.sh make load-secretsCheck that Trilio is healthy:
oc get triliovaultmanager -n trilio-system
# STATUS should be Deployed or Updated
oc get target -n trilio-system
# STATUS should be AvailableCheck the end-to-end DR status (updated automatically by the imperative framework):
make dr-statusInitial run: trilio-enable-cr and trilio-backup complete within the first two CronJob cycles (~20 minutes). Standard restore follows. All phases PASS indicates the hub is fully operational.
Import the DR cluster through the ACM console or the oc CLI. Note the cluster name assigned during import.
make onboard-spoke CLUSTER=<acm-cluster-name>This labels the cluster with clusterGroup=secondary, which triggers ACM to deploy the spoke configuration through ArgoCD.
After running make onboard-spoke, kick the spoke-side ArgoCD application to sync immediately (run on the spoke cluster context):
oc patch application.argoproj.io main-trilio-continuous-restore-secondary \
-n openshift-gitops --type merge \
-p '{"operation":{"sync":{}}}'make spoke-status CLUSTER=<acm-cluster-name>Expected progression:
- Trilio operator installs (OLM subscription)
- TrilioVaultManager deploys (ESO delivers S3 + license secrets)
- BackupTarget becomes Available (EventTarget pod starts)
- ConsistentSets begin appearing as hub backups are detected (~10–20 minutes after the hub's CR backup completes)
- Spoke imperative restore runs automatically after the first ConsistentSet is Available
The full spoke onboarding sequence typically takes 15–25 minutes from label application to a running TrilioVaultManager. The imperative restore adds another 30–45 minutes on top of that for the first ConsistentSet to appear and the restore to complete.
ArgoCD may show trilio-operand as OutOfSync / Missing immediately after spoke onboarding. This is a CRD timing issue — ArgoCD attempts to sync the TrilioVaultManager CR before the Trilio operator has finished registering its Custom Resource Definitions (CRDs).
The SkipDryRunOnMissingResource=true sync option is set in values-secondary.yaml to handle this automatically. If the issue persists after 5–10 minutes, manually refresh the ArgoCD application:
oc patch application trilio-operand -n main-trilio-continuous-restore-secondary \
--type merge -p '{"operation":{"sync":{}}}'