This article explains how to change the Storage Class for a Persistent Volume.
apiVersion: v1
kind: ConfigMap
metadata:
# any name can be used; Velero uses the labels (below)
# to identify it rather than the name
name: change-storage-class-config
# must be in the velero namespace
namespace: velero
# the below labels should be used verbatim in your
# ConfigMap.
labels:
# this value-less label identifies the ConfigMap as
# config for a plugin (i.e. the built-in restore item action plugin)
velero.io/plugin-config: ""
# this label identifies the name and kind of plugin
# that this ConfigMap is for.
velero.io/change-storage-class: RestoreItemAction
data:
# add 1+ key-value pairs here, where the key is the old
# storage class name and the value is the new storage
# class name.
<old-storage-class>: <new-storage-class>
velero backup <backup name> --include-namespaces=<namespace>
kubectl scale deployment <Deployment name> --replicas=0
kubectl delete pvc <PVC name>
velero restore create --from-backup <Backup name>
kubectl scale deployment <Deployment name> --replicas=X
Note: This procedure will involve pod downtime between steps 3 and 6.
Velero docs which shows how to change the Storage Class on restoration.