Restore PVC data with GitOps

Restore PVC data when its managed in GitOps by ArgoCD.

1. Prerequisite

Setup velero-cli doc

2. Take backup

To take backup with Velero you have two options:

2.1: Option # 1 - Via CLI

velero backup create <NAME-OF-BACKUP> --include-namespaces <APPLICATION-NAMESPACE> --namespace openshift-velero

2.2: Option # 2 - Via CR

apiVersion: velero.io/v1
kind: Backup
metadata:
  name: <NAME-OF-BACKUP>
  namespace: openshift-velero
spec:
  includedNamespaces:
  - <APPLICATION-NAMESPACE>
  includedResources:
  - '*'
  storageLocation: default
  ttl: 2h0m0s

3. Disable self heal in ArgoCD:

Disable self heal in ArgoCD application that is managing PVC so it does not recreate resources from GitOps.

  syncPolicy:
    automated:
      prune: true
      selfHeal: false

4. Delete PVC

Scale down statefulset pod so PVC can be deleted

oc scale statefulsets <NAME> --replicas 0

Delete the PVC which you want to restore data so that its created again by Velero.

oc delete pvc <PVC-NAME> -n <NAMESPACE> 

5. Restore Velero Backup

To restore backup with Velero you have two options:

5.1: Option # 1 - Via CLI

velero restore create --from-backup <NAME-OF-BACKUP> --namespace openshift-velero

5.2: Option # 2 - Via CR

apiVersion: velero.io/v1
kind: Restore
metadata:
  name: <NAME-OF-BACKUP>
  namespace: openshift-velero
spec:
  backupName: <NAME-OF-BACKUP>
  excludedResources:
    - nodes
    - events
    - events.events.k8s.io
    - backups.velero.io
    - restores.velero.io
    - resticrepositories.velero.io
  includedNamespaces:
    - '*'

After a successful restore, you should be able to see pod up and running with restored backup data

6. Scale up statefulset again

Scale up statefulset set so new pod can be attached to restored PVC

oc scale statefulsets <NAME> --replicas 0

7. Validate

Validate the data exists in the database.

8. Enable self heal again

Enable self heal so ArgoCD start managing resources again.

  syncPolicy:
    automated:
      prune: true
      selfHeal: true