Skip to content

Disaster Recovery

You can use argocd admin to import and export all Argo CD data.

Make sure you have ~/.kube/config pointing to your Argo CD cluster.

Figure out what version of Argo CD you're running:

argocd version | grep server
# ...
export VERSION=v1.0.1

Export to a backup:

docker run -v ~/.kube:/home/argocd/.kube --rm quay.io/argoproj/argocd:$VERSION argocd admin export > backup.yaml

Import from a backup:

docker run -i -v ~/.kube:/home/argocd/.kube --rm quay.io/argoproj/argocd:$VERSION argocd admin import - < backup.yaml

Note

If you are running Argo CD on a namespace different than default remember to pass the namespace parameter (-n ). 'argocd admin export' will not fail if you run it in the wrong namespace.

Exporting a clean, re-creatable manifest set

By default, argocd admin export includes the status field of exported resources (e.g. Application sync history and health). This is useful for warm-standby/disaster-recovery setups where you want the restored resources to retain their last known status.

If instead you want a clean backup that can be applied directly with kubectl apply or re-created from scratch (for example, to seed a new cluster or store manifests in git), pass --strip-status to omit the status field from the export:

argocd admin export --strip-status > backup.yaml
kubectl apply -f backup.yaml

[!NOTE] --strip-status only affects the export. On update, argocd admin import only overwrites the live resource's status when the backup manifest actually contains a status field, so importing a --strip-status backup will not clear the status of existing live resources. On create, the new resource simply gets whatever status (if any) was present in the backup.