This is the documentation for the latest development version of Velero. Both code and docs may be unstable, and these docs are not guaranteed to be up to date or correct. See the latest version.
Filter objects by namespace, type, labels or resource policies.
This page describes how to filter resources for backup and restore.
Users can use include and exclude flags with the velero backup and velero restore commands. Users can also use resource policies for fine-grained resource filtering during backup and restore, as well as volume handling during backup.
By default, Velero includes all objects in a backup or restore when no filtering options are used.
Only specific resources are included, all others are excluded.
Wildcard takes precedence when both a wildcard and specific resource are included.
Namespaces to include. Accepts glob patterns (*, ?, [abc]). Default is *, all namespaces.
See Namespace Glob Patterns for more details on supported patterns.
Note: * alone is reserved for empty fields, which means all namespaces.
Backup a namespace and it’s objects.
velero backup create <backup-name> --include-namespaces <namespace>
Restore two namespaces and their objects.
velero restore create <backup-name> --include-namespaces <namespace1>,<namespace2>
Kubernetes resources to include in the backup, formatted as resource.group, such as storageclasses.storage.k8s.io (use * for all resources). Cannot work with --include-cluster-scoped-resources, --exclude-cluster-scoped-resources, --include-namespace-scoped-resources and --exclude-namespace-scoped-resources.
Backup all deployments in the cluster.
velero backup create <backup-name> --include-resources deployments
Restore all deployments and configmaps in the cluster.
velero restore create <backup-name> --include-resources deployments,configmaps
Backup the deployments in a namespace.
velero backup create <backup-name> --include-resources deployments --include-namespaces <namespace>
Includes cluster-scoped resources. Cannot work with --include-cluster-scoped-resources, --exclude-cluster-scoped-resources, --include-namespace-scoped-resources and --exclude-namespace-scoped-resources. This option can have three possible values:
true: all cluster-scoped resources are included.
false: no cluster-scoped resources are included.
nil (“auto” or not supplied):
Cluster-scoped resources are included when backing up or restoring all namespaces. Default: true.
Cluster-scoped resources are not included when namespace filtering is used. Default: false.
--include-cluster-resources=false.Backup entire cluster including cluster-scoped resources.
velero backup create <backup-name>
Restore only namespaced resources in the cluster.
velero restore create <backup-name> --include-cluster-resources=false
Backup a namespace and include cluster-scoped resources.
velero backup create <backup-name> --include-namespaces <namespace> --include-cluster-resources=true
Include resources matching the label selector.
velero backup create <backup-name> --selector <key>=<value>
Include resources that are not matching the selector
velero backup create <backup-name> --selector "<key> notin (<value>)"
For more information read the Kubernetes label selector documentation
To include the resources that match at least one of the label selectors from the list. Separate the selectors with or. The or is used as a separator to split label selectors, and it is not an operator.
This option cannot be used together with --selector.
Include resources matching any one of the label selector, foo=bar or baz=qux
velero backup create backup1 --or-selector "foo=bar or baz=qux"
Include resources that are labeled environment=production or env=prod or env=production or environment=prod.
velero restore create restore-prod --from-backup=prod-backup --or-selector "env in (prod,production) or environment in (prod, production)"
Kubernetes cluster-scoped resources to include in the backup, formatted as resource.group, such as storageclasses.storage.k8s.io(use ‘*’ for all resources). Cannot work with --include-resources, --exclude-resources and --include-cluster-resources. This parameter only works for backup, not for restore.
Backup all StorageClasses and ClusterRoles in the cluster.
velero backup create <backup-name> --include-cluster-scoped-resources="storageclasses,clusterroles"
Backup all cluster-scoped resources in the cluster.
velero backup create <backup-name> --include-cluster-scoped-resources="*"
Kubernetes namespace resources to include in the backup, formatted as resource.group, such as deployments.apps(use ‘*’ for all resources). Cannot work with --include-resources, --exclude-resources and --include-cluster-resources. This parameter only works for backup, not for restore.
Backup all Deployments and ConfigMaps in the cluster.
velero backup create <backup-name> --include-namespace-scoped-resources="deployments.apps,configmaps"
Backup all namespace resources in the cluster.
velero backup create <backup-name> --include-namespace-scoped-resources="*"
Exclude specific resources from the backup.
Wildcard excludes are ignored.
Namespaces to exclude. Accepts glob patterns (*, ?, [abc]).
See Namespace Glob Patterns for more details on supported patterns.
Exclude kube-system from the cluster backup.
velero backup create <backup-name> --exclude-namespaces kube-system
Exclude two namespaces during a restore.
velero restore create <backup-name> --exclude-namespaces <namespace1>,<namespace2>
Kubernetes resources to exclude, formatted as resource.group, such as storageclasses.storage.k8s.io. Cannot work with --include-cluster-scoped-resources, --exclude-cluster-scoped-resources, --include-namespace-scoped-resources and --exclude-namespace-scoped-resources.
Exclude secrets from the backup.
velero backup create <backup-name> --exclude-resources secrets
Exclude secrets and rolebindings.
velero backup create <backup-name> --exclude-resources secrets,rolebindings
velero.io/exclude-from-backup=true are not included in backup, even if it contains a matching selector label.Kubernetes cluster-scoped resources to exclude from the backup, formatted as resource.group, such as storageclasses.storage.k8s.io(use ‘*’ for all resources). Cannot work with --include-resources, --exclude-resources and --include-cluster-resources. This parameter only works for backup, not for restore.
Exclude StorageClasses and ClusterRoles from the backup.
velero backup create <backup-name> --exclude-cluster-scoped-resources="storageclasses,clusterroles"
Exclude all cluster-scoped resources from the backup.
velero backup create <backup-name> --exclude-cluster-scoped-resources="*"
Kubernetes namespace resources to exclude from the backup, formatted as resource.group, such as deployments.apps(use ‘*’ for all resources). Cannot work with --include-resources, --exclude-resources and --include-cluster-resources. This parameter only works for backup, not for restore.
Exclude all Deployments and ConfigMaps from the backup.
velero backup create <backup-name> --exclude-namespace-scoped-resources="deployments.apps,configmaps"
Exclude all namespace resources from the backup.
velero backup create <backup-name> --exclude-namespace-scoped-resources="*"
Velero provides resource policies (defined in a ConfigMap and referenced via --resource-policies-configmap or spec.resourcePolicy) to define fine-grained resource filters and volume handling rules.
Resource policies support both Backup and Restore operations, though certain policy sections are specific to backup workflows.
| Policy Section | Description | Supported Operations | Learn More |
|---|---|---|---|
namespacedFilterPolicies |
Fine-grained per-namespace and per-kind filters with label selectors and resource name patterns. | Backup & Restore | Fine-Grained Backup Filters / Fine-Grained Restore Filters |
clusterScopedFilterPolicy |
Fine-grained cluster-scoped filter overlays with per-kind label selectors and resource name patterns. | Backup & Restore | Fine-Grained Backup Filters / Fine-Grained Restore Filters |
volumePolicies |
Rules to control volume data backup methods (skip, snapshot, fs-backup) based on conditions. |
Backup only | See VolumePolicy |
includeExcludePolicy |
Reusable scoped resource include/exclude filters. | Backup only | See IncludeExcludePolicy |
Using resource policies is a two-step process:
Create the resource policies ConfigMap
Create a ConfigMap in the Velero installation namespace (typically velero) containing your YAML policy definition:
kubectl create cm <configmap-name> --from-file <yaml-file> -n velero
Reference the resource policies ConfigMap in a Backup or Restore
For Backup: Reference the ConfigMap via CLI flag or in the Backup CR spec:
velero backup create <backup-name> --resource-policies-configmap <configmap-name>
Or in Backup.spec:
spec:
resourcePolicy:
kind: ConfigMap
name: <configmap-name>
For Restore: Reference the ConfigMap via CLI flag or in the Restore CR spec:
velero restore create <restore-name> --from-backup <backup-name> --resource-policies-configmap <configmap-name>
Or in Restore.spec:
spec:
resourcePolicy:
kind: ConfigMap
name: <configmap-name>
These flags and fields can also be combined with standard include and exclude options.
The policies YAML config file showing all supported sections:
# Currently supports v1 version
version: v1
# Fine-grained namespace-scoped filters (Supported for both Backup and Restore)
namespacedFilterPolicies:
- namespace: "app-ns-*"
resourceFilters:
- kind: "deployment"
labelSelector:
matchLabels:
app: frontend
includedResourceNames:
- "web-*"
- kind: "secret"
excludedResourceNames:
- "sensitive-secret"
# Fine-grained cluster-scoped filter overlay (Supported for both Backup and Restore)
clusterScopedFilterPolicy:
resourceFilters:
- kind: "storageclass"
labelSelector:
matchLabels:
tier: gold
# Volume handling policies (Supported for Backup ONLY)
volumePolicies:
- conditions:
capacity: "10,100Gi"
csi:
driver: ebs.csi.aws.com
storageClass:
- gp2
- standard
pvcPhase:
- Pending
pvcVolumeMode: Block
pvcAccessModes:
- ReadWriteOnce
action:
type: skip
- conditions:
nfs: {}
action:
type: fs-backup
# Legacy scoped resource include/exclude filters (Supported for Backup ONLY)
# NOTE: Cannot be combined with --include-resources, --exclude-resources, or --include-cluster-resources in Backup.
includeExcludePolicy:
includedClusterScopedResources:
- "crd"
- "pv"
excludedClusterScopedResources: []
includedNamespaceScopedResources:
- "pod"
- "service"
- "deployment"
- "pvc"
excludedNamespaceScopedResources:
- "configmap"
- "secret"
namespacedFilterPolicies and clusterScopedFilterPolicy allow defining per-namespace and per-kind rules with independent label selectors and resource name patterns.
For comprehensive guides, syntax details, and detailed examples, see:
The includeExcludePolicy is used to filter resources based on the namespace-scoped and cluster-scoped resources. User can use it
to define a group of filters and reuse them across different backups.
For example, user can configmap my-policy of resource policies with following content:
version: v1
includeExcludePolicy:
includedClusterScopedResources:
- "crd"
excludedClusterScopedResources: []
includedNamespaceScopedResources: []
excludedNamespaceScopedResources:
- "configmap"
- "event"
If the user creates a backup via command like
velero backup create <backup-name> --resource-policies-configmap my-policy --include-namespaces my-workload-ns
The backup will include all resources in namespace my-workload-ns except for configmap and event, and all CRDs in the cluster.
The includeExcludePolicy does not work with --include-resources, --exclude-resources and --include-cluster-resources filters in Backup.
If the user create the backup with command like velero backup create my-backup --include-cluster-resources --include-namespaces workload-ns --resource-policies-configmap my-policy
the backup will fail with status FailedValidation
The filters in includeExcludePolicy cannot include *. Only specific resources can be set in the filters.
User can use the includeExcludePolicy with other scoped filters when creating a backup. velero will combine the filters when it’s collecting the resources during the backup. During this process the filters in the Backup Spec have higher priority. For example, if the user use this command to create a backup, reusing the resource policies created in the previous example:
velero backup create <backup-name> --resource-policies-configmap my-policy --include-namespace-scoped-resources * --include-cluster-scoped-resources -apiservices --include-namespaces my-workload-ns
The backup will include all resources in namespace my-workload-ns, including configmap and event, and all CRDs and
apiservices in the cluster.
VolumePolicy is a data structure to control how velero handle the volumes matching certain conditions.
There are three actions supported via the VolumePolicy feature:
Currently, Velero supports the volume attributes listed below:
capacity range. The capacity value should include the lower value and upper value concatenated by commas, the unit of each value in capacity could be Ti, Gi, Mi, Ki etc, which is a standard storage unit in Kubernetes. And it has several combinations below:
storageClass, such as gp2, ebs-sc in eksVelero supported conditions and format listed below:
# match volume has the size between 10Gi and 100Gi
capacity: "10Gi,100Gi"
# match volume has the storage class gp2 or ebs-sc
storageClass:
- gp2
- ebs-sc
Specify the volume source name, the name could be nfs, rbd, iscsi, csi etc, but Velero only support nfs and csi currently.
# match any volume has nfs volume source
nfs : {}
# match any volume has csi volume source
csi : {}
Specify details for the related volume source (currently we only support csi driver filter and nfs server or path filter)
# match volume has csi volume source and using `aws.efs.csi.driver`
csi:
driver: aws.efs.csi.driver
# match volume has nfs volume source and using below server and path
nfs:
server: 192.168.200.90
path: /mnt/nfs
For volume provisioned by Persistent Volumes support all above attributes, but for pod Volume only support filtered by volume source.
volume types
Support filter volumes by types
volumeTypes:
# matches volumes listed below
- emptyDir
- downwardAPI
- configmap
- cinder
Volume types could be found in Persistent Volumes and pod Volume
pvc Labels
This condition filters volumes based on the labels on their associated PVCs. The condition is specified as a simple key/value mapping. The volume matches this condition if all the key/value pairs defined in the policy are present on the PVC.
pvcLabels:
environment: production
Some examples:
environment: production.
volumePolicies:
- conditions:
pvcLabels:
environment: production
action:
type: snapshot
labels:
environment: production
team: backend
the following policy will match because it only requires environment: production:
volumePolicies:
- conditions:
pvcLabels:
environment: production
action:
type: skip
environment: production and app: frontend, but the PVC only has environment: production, the volume will not match.
volumePolicies:
- conditions:
pvcLabels:
environment: production
app: frontend
action:
type: skip
pvc Phase
This condition filters volumes based on the phase of their associated PVCs. The condition is specified as a list of phases to match. The volume matches this condition if the PVC’s phase matches any of the phases in the list. Supported phases are: Pending, Bound, and Lost.
pvcPhase:
- Pending
Some examples:
Pending phase (useful for PVCs that haven’t been bound to a PV yet).
volumePolicies:
- conditions:
pvcPhase:
- Pending
action:
type: skip
Pending or Lost phase.
volumePolicies:
- conditions:
pvcPhase:
- Pending
- Lost
action:
type: skip
Bound phase.
volumePolicies:
- conditions:
pvcPhase:
- Bound
action:
type: snapshot
volumePolicies:
- conditions:
pvcPhase:
- Pending
storageClass:
- gp2
action:
type: skip
pvc VolumeMode
This condition filters PVC-backed volumes based on the volume mode of their associated PVCs. The condition is specified as a single volume mode to match. The volume matches this condition if the PVC’s volume mode exactly matches the configured value. Matching is case-sensitive, so block does not match Block. Supported volume modes are: Filesystem and Block. If pvcVolumeMode is omitted from a policy, volume mode is not restricted. Non-PVC volumes, such as emptyDir, configMap, or inline volumes without an associated PVC, do not match policies that require this condition.
pvcVolumeMode: Block
Some examples:
Block volume mode.
volumePolicies:
- conditions:
pvcVolumeMode: Block
action:
type: skip
volumePolicies:
- conditions:
pvcVolumeMode: Block
pvcPhase:
- Bound
action:
type: snapshot
pvc AccessModes
This condition filters PVC-backed volumes based on the access modes of their associated PVCs. The condition is specified as a list of access modes to match. The volume matches this condition only if the PVC has all of the access modes in the list. Matching is case-sensitive, so readwriteonce does not match ReadWriteOnce. Supported access modes are: ReadWriteOnce, ReadOnlyMany, ReadWriteMany, and ReadWriteOncePod. Non-PVC volumes, such as emptyDir, configMap, or inline volumes without an associated PVC, do not match policies that require this condition.
pvcAccessModes:
- ReadWriteOnce
Some examples:
ReadWriteOnce access mode.
volumePolicies:
- conditions:
pvcAccessModes:
- ReadWriteOnce
action:
type: skip
ReadOnlyMany and ReadWriteMany.
volumePolicies:
- conditions:
pvcAccessModes:
- ReadOnlyMany
- ReadWriteMany
action:
type: snapshot
volumePolicies:
- conditions:
pvcAccessModes:
- ReadWriteOnce
pvcVolumeMode: Block
action:
type: snapshot
backup.Spec.SnapshotVolumes has the fourth priority.fs-backup and snapshot actions via volume policy featurefs-backup and snapshot.snapshot action supports an optional snapshotClass parameter that specifies which VolumeSnapshotClass to use for CSI snapshots. This is useful when multiple storage arrays share the same CSI driver but require different VolumeSnapshotClasses. When specified, this takes priority over backup annotations and VolumeSnapshotClass labels, but is overridden by PVC-level annotations. See the
CSI documentation for the full VolumeSnapshotClass selection priority order.snapshot action via Volume Policy has higher priority if there is a snapshot action matching for a particular volume, this volume would be backed up via snapshot irrespective of the value of backup.Spec.SnapshotVolumes.snapshot matching action then the volume will be backed up via snapshot given that backup.Spec.SnapshotVolumes is not explicitly set to false.fs-backup and snapshot action purposes:We will use a simple application example in which there is an application pod which has 2 volumes:
gp2-csigp3-csiNow lets go through some example uses-cases and their outcomes:
Example 1: User wants to use fs-backup action for backing up the volumes having storage class as gp2-csi
version: v1
volumePolicies:
- conditions:
storageClass:
- gp2-csi
action:
type: fs-backup
fs-backup operation only on Volume 1 as only Volume 1 satisfies the criteria for fs-backup action.Example 2: User wants to use snapshot action for backing up the volumes having storage class as gp2-csi
version: v1
volumePolicies:
- conditions:
storageClass:
- gp2-csi
action:
type: snapshot
snapshot operation only on Volume 1 as only Volume 1 satisfies the criteria for snapshot action.Example 3: User wants to use snapshot action for backing up the volumes having storage class as gp2-csi and wants to use fs-backup action for backing up the volumes having storage class as gp3-csi
version: v1
volumePolicies:
- conditions:
storageClass:
- gp2-csi
action:
type: snapshot
- conditions:
storageClass:
- gp3-csi
action:
type: fs-backup
snapshot operation only on Volume 1 as only Volume 1 satisfies the criteria for snapshot action. Also, velero would perform fs-backup operation only on Volume 2 as only Volume 2 satisfies the criteria for fs-backup action.Example 4: User wants to use snapshot action for backing up the volumes having storage class as gp3-csi and at the same time also annotates the pod to use opt-in fs-backup legacy approach for Volume 1
backup.velero.io/backup-volumes=Volume 1version: v1
volumePolicies:
- conditions:
storageClass:
- gp3-csi
action:
type: snapshot
snapshot operation for Volume 2 as it matches the action criteria and velero would also perform the fs-backup operation for Volume-1 via the legacy annotations based fallback approach as there is no matching action for Volume-1Example 5: User wants to use fs-backup action for backing up the volumes having storage class as gp2-csi and at the same time also specifies defaultVolumesToFSBackup: true (fallback option for no action matching volumes)
defaultVolumesToFSBackup: true:version: v1
volumePolicies:
- conditions:
storageClass:
- gp2-csi
action:
type: fs-backup
fs-backup operation on both the volumes
fs-backup on Volume 1 because Volume 1 satisfies the criteria for fs-backup action.fs-backup operation will be done as defaultVolumesToFSBackup: true is specified by the user).Example 6: User has two storage arrays using the same CSI driver and needs different VolumeSnapshotClasses for each
version: v1
volumePolicies:
- conditions:
storageClass:
- array-1-sc
action:
type: snapshot
parameters:
snapshotClass: vsc-array-1
- conditions:
storageClass:
- array-2-sc
action:
type: snapshot
parameters:
snapshotClass: vsc-array-2
vsc-array-1 VolumeSnapshotClass for volumes on storage class array-1-sc and vsc-array-2 VolumeSnapshotClass for volumes on storage class array-2-sc, even though both storage classes use the same CSI driver.Resource policies (volume policies) are normally opt-in per backup via --resource-policies-configmap. An administrator can instead configure a cluster-wide baseline that applies to every backup by starting the Velero server with the --global-backup-volume-policies-configmap flag, pointing at a ConfigMap in the Velero install namespace:
velero server --global-backup-volume-policies-configmap global-volume-policy
The ConfigMap uses the exact same format as a per-backup resource policies ConfigMap (a single data key holding a ResourcePolicies YAML document):
apiVersion: v1
kind: ConfigMap
metadata:
name: global-volume-policy
namespace: velero
data:
policies.yaml: |
version: v1
volumePolicies:
- conditions:
storageClass:
- gp2
action:
type: skip
Only volumePolicies apply globally. If the global ConfigMap contains includeExcludePolicy, clusterScopedFilterPolicy, or namespacedFilterPolicies, those sections are ignored and a warning is logged. Those filters are tied to a specific backup use case, so they remain per-backup only.
Merge semantics. When a backup runs, the effective volumePolicies list is the backup-level policies followed by the global policies:
merged.volumePolicies = backup.volumePolicies ++ global.volumePolicies
Because the first matching policy wins, a backup can override the global baseline for a specific volume while still inheriting every global rule it does not override. If a backup references no resource policy, the global policy applies on its own.
Validation. The global ConfigMap is validated at server startup (the server fails to start if it is missing or invalid) and again on each backup (a backup whose global policy has become missing or invalid is moved to the FailedValidation phase).
Global policy (--global-backup-volume-policies-configmap=global-volume-policy): skip gp2 volumes.
version: v1
volumePolicies:
- conditions:
storageClass:
- gp2
action:
type: skip
Backup-level policy (--resource-policies-configmap backup01): fs-backup NFS volumes.
version: v1
volumePolicies:
- conditions:
nfs: {}
action:
type: fs-backup
Effective (merged) policy used for the backup — backup rules first, then global:
version: v1
volumePolicies:
- conditions:
nfs: {}
action:
type: fs-backup
- conditions:
storageClass:
- gp2
action:
type: skip
When a global policy contributes to a backup, velero backup describe surfaces the contributing ConfigMap under a Global volume policies section.
To help you get started, see the documentation.