What is the recommended ArgoCD disaster recovery strategy, and how does git as single source of truth enable control-plane recovery without restoring etcd backups?
Quick Answer
ArgoCD disaster recovery leverages git as the authoritative source by exporting Application definitions, AppProjects, and cluster Secrets to a backup repository. Recovery involves reinstalling ArgoCD, restoring these declarative resources, and letting ArgoCD reconcile desired state from git. This avoids complex etcd restore procedures because the actual workload state is defined in git, not in ArgoCD's internal database.
Detailed Answer
Think of rebuilding a house after a fire. If you have the blueprints (git) and the building permits (Application definitions), you can reconstruct everything without needing the original furniture (ArgoCD's internal state). The key insight is that ArgoCD is itself a reconciliation engine, so its own configuration should follow the same GitOps principles it enforces on workloads.
ArgoCD's disaster recovery philosophy is grounded in the principle that git contains the truth about what should be deployed. The ArgoCD control plane stores Application resources, AppProject definitions, repository credentials, cluster connection Secrets, and RBAC policies. If the ArgoCD installation is lost, these resources are what need to be reconstructed. The actual workload manifests, Helm charts, and Kustomize overlays remain safely in git and do not need separate backup.
The recommended backup strategy has three layers. First, all ArgoCD Application and AppProject resources should themselves be managed via GitOps, typically using an app-of-apps pattern or ApplicationSets stored in a dedicated bootstrap repository. Second, Secrets containing cluster credentials, repository SSH keys, and OIDC configurations should be backed up to a secure store like Vault or AWS Secrets Manager, since these cannot be safely stored in git. Third, the argocd-export command produces a YAML dump of all ArgoCD resources from its internal state, which serves as a point-in-time snapshot for comparison and audit.
During recovery, the team installs a fresh ArgoCD instance, restores Secrets from the secure store, applies the bootstrap repository containing Application and AppProject definitions, and ArgoCD automatically begins reconciling all managed workloads from git. The first sync cycle may take significant time as ArgoCD clones all repositories, renders manifests, and diffs against live cluster state, but no workload changes are applied because the clusters already contain the correct resources. Monitoring during recovery should track sync status, repository clone success rates, and cluster connection health.
The non-obvious gotcha is that argocd-export does not capture everything. Custom resource health checks defined in argocd-cm ConfigMap, notification templates in argocd-notifications-cm, and RBAC policies in argocd-rbac-cm are ConfigMaps that must be version-controlled separately. Teams that rely solely on argocd-export discover during recovery that their custom health assessments, notification routing, and RBAC rules are missing, leaving them with a functional but misconfigured ArgoCD instance that approves resources it should block or fails to notify teams about sync failures.