Skip to content

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