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.
CSI Snapshot Data Movement is built according to the
Volume Snapshot Data Movement design and is specifically designed to move CSI snapshot data to a backup storage location.
CSI Snapshot Data Movement takes CSI snapshots through the CSI plugin in nearly the same way as
CSI snapshot backup. However, it doesn’t stop after a snapshot is taken. Instead, it tries to access the snapshot data through various data movers and back up the data to a backup storage connected to the data movers.
Consequently, the volume data is backed up to a pre-defined backup storage in a consistent manner.
After the backup completes, the CSI snapshot will be removed by Velero and the snapshot data space will be released on the storage side.
CSI Snapshot Data Movement is useful in below scenarios:
Besides, Velero
File System Backup which could also back up the volume data to a pre-defined backup storage. CSI Snapshot Data Movement works together with
File System Backup to satisfy different requirements for the above scenarios. And whenever available, CSI Snapshot Data Movement should be used in preference since the
File System Backup reads data from the live PV, in which way the data is not captured at the same point in time, so is less consistent.
Moreover, CSI Snapshot Data Movement brings more possible ways of data access, i.e., accessing the data from the block level, either fully or incrementally.
On the other hand, there are quite some cases that CSI snapshot is not available (i.e., you need a volume snapshot plugin for your storage platform, or you’re using EFS, NFS, emptyDir, local, or any other volume type that doesn’t have a native snapshot), then
File System Backup will be the only option.
CSI Snapshot Data Movement supports both Velero built-in data movers and customized data movers. For the details of how Velero works with customized data movers, check the Volume Snapshot Data Movement design.
Velero Built-in Data Mover (VBDM) provides two data movers:
Velero File System Data Mover (velero-fs):
--data-mover velero or no data mover parameter is specified.Velero Block Data Mover (velero-block):
SnapshotMetadataService) to identify allocated blocks (for full backups) and changed blocks (for incremental backups).FileSystem and Block volumeMode volumes (as long as backed by block storage). On restore, writes raw block data and can rebind to either FileSystem or Block mode target PVCs.Both built-in data movers read/write snapshot data from/to the Unified Repository.
Velero built-in data mover restores both volume data and metadata, so the data mover pods need to run as root user.
The following table summarizes the key differences among the three approaches to back up volume data:
| Capability / Scenario | Block Data Mover | File System Data Mover | File System Backup |
|---|---|---|---|
| Data Source | CSI VolumeSnapshot | CSI VolumeSnapshot | Live, mounted workload Pod volume |
| Point-in-Time Consistency | Yes (crash-consistent) | Yes (crash-consistent) | No |
| Storage Backend | Block storage only (EBS, Azure Disk, Ceph RBD, CNS, etc.) | File storage and Block storage (EFS, Azure Files, CephFS, etc.) | Any storage (including local, emptyDir, HostPath, NFS) |
| CSI Snapshot Required? | Yes | Yes | No |
| Supported Volume Modes | Block mode and FileSystem mode |
FileSystem mode only |
FileSystem mode only |
| Node OS for Data Mover | Linux nodes only | Linux and Windows nodes | Linux and Windows nodes |
| Incremental Mechanism | CSI Changed Block Tracking (CBT) | File attributes check | File metadata check |
| Incremental Efficiency for Large Files | Very High (reads and uploads only changed blocks) | Low (must scan entire file on change) | Low (must scan entire file on change) |
| Performance with Huge Number of Small Files | Very High (raw sequential block I/O, no filesystem syscall overhead) | Low (millions of inode lookups and file system calls) | Low (millions of inode lookups and file system calls) |
| Data Deduplication | yes (fix sized) | yes (variable sized) | yes (variable sized) |
| Data Encryption At Rest | yes | yes | yes |
Use Block Data Mover whenever possible if:
volumeMode: Block).Use File System Data Mover when:
Use File System Backup (fs-backup) only when:
emptyDir, hostPath, or non-CSI NFS shares).The file system data mover and File System Backup operate at the file and directory abstraction level:
mtime or file size), the file system uploader must read the entire file from beginning to end.In contrast, the Block Data Mover queries the CSI CBT API directly for changed block ranges. It completely skips unchanged regions and reads only the specific blocks that were modified directly from the block device using direct I/O, drastically reducing I/O, CPU consumption, and backup time.
Even in environments where CSI Changed Block Tracking (CBT) is unavailable (e.g., storage platforms that have not yet implemented the CBT API, or when falling back to a full backup), the block data mover provides substantial advantages over the file system data mover:
Elimination of Filesystem Metadata Bottlenecks:
velero-fs must execute individual POSIX system calls (stat, lstat, opendir, readdir, open, read, close) for every file and directory.Predictable Throughput Independent of File Count:
Faster Restoration:
SnapshotMetadataService).csiSnapshotMetadataServiceConfigs in the node-agent-config ConfigMap.Velero Node Agent is a Kubernetes daemonset that hosts Velero data movement controllers and launches data mover pods.
If you are using Velero built-in data mover, Node Agent must be installed. To install Node Agent, use the --use-node-agent flag.
Velero built-in data mover doesn’t require the host path for pod volumes into Node Agent pods. The installation by default creates it in order to support fs-backup. If you don’t use fs-backup and want to remove it from Node Agent, you can specify the --node-agent-disable-host-path flag.
velero install --use-node-agent --node-agent-disable-host-path
When using the Velero block data mover (velero-block), the data mover pod communicates with the CSI driver’s SnapshotMetadataService to query allocated or changed blocks. If your CSI driver’s CBT service requires authentication with a dedicated Kubernetes service account, you can configure it in the node-agent-config ConfigMap under csiSnapshotMetadataServiceConfigs:
{
"csiSnapshotMetadataServiceConfigs": {
"saName": "<cbt-service-account-name>"
}
}
Specify the ConfigMap during Velero installation:
velero install --use-node-agent --node-agent-configmap=<ConfigMap-Name> ...
When configured, Velero automatically passes --cbt-sa-name=<cbt-service-account-name> to the data mover pod. For more details on configuring node-agent, see
Node-agent Configuration.
At present, Velero backup repository supports object storage as the backup storage. Velero gets the parameters from the
BackupStorageLocation to compose the URL to the backup storage.
Velero’s known object storage providers are included here
supported providers, for which, Velero pre-defines the endpoints. If you want to use a different backup storage, make sure it is S3 compatible and you provide the correct bucket name and endpoint in BackupStorageLocation. Velero handles the creation of the backup repo prefix in the backup storage, so make sure it is specified in BackupStorageLocation correctly.
Velero creates one backup repository per namespace. For example, if backing up 2 namespaces, namespace1 and namespace2, using kopia repository on AWS S3, the full backup repo path for namespace1 would be https://s3-us-west-2.amazonaws.com/bucket/kopia/ns1 and for namespace2 would be https://s3-us-west-2.amazonaws.com/bucket/kopia/ns2.
There may be additional installation steps depending on the cloud provider plugin you are using. You should refer to the plugin specific documentation for the must up to date information.
Note: Currently, Velero creates a secret named velero-repo-credentials in the velero install namespace, containing a default backup repository password.
You can update the secret with your own password encoded as base64 prior to the first backup (i.e.,
File System Backup, snapshot data movements) targeting to the backup repository. The value of the key to update is
data:
repository-password: <custom-password>
Backup repository is created during the first execution of backup targeting to it after installing Velero with node agent. If you update the secret password after the first backup which created the backup repository, then Velero will not be able to connect with the older backups.
On source cluster, Velero needs to manipulate CSI snapshots through the CSI volume snapshot APIs, so you must enable the EnableCSI feature flag on the Velero server.
To integrate Velero with the CSI volume snapshot APIs, you must enable the EnableCSI feature flag.
From release-1.14, the github.com/velero-io/velero-plugin-for-csi repository, which is the Velero CSI plugin, is merged into the github.com/velero-io/velero repository.
The reasons to merge the CSI plugin are:
As a result, no need to install Velero CSI plugin anymore.
velero install \
--features=EnableCSI \
--plugins=<object storage plugin> \
...
For Velero built-in data movement, CSI facilities are not required necessarily in the target cluster. On the other hand, Velero built-in data movement creates a PVC with the same specification as it is in the source cluster and expects the volume to be provisioned similarly. For example, the same storage class should be working in the target cluster.
By default, Velero won’t restore storage class resources from the backup since they are cluster scope resources. However, if you specify the --include-cluster-resources restore flag, they will be restored. For a cross provider scenario, the storage class from the source cluster is probably not usable in the target cluster.
In either of the above cases, the best practice is to create a working storage class in the target cluster with the same name as it in the source cluster. In this way, even though --include-cluster-resources is specified, Velero restore will skip restoring the storage class since it finds an existing one.
Otherwise, if the storage class name in the target cluster is different, you can change the PVC’s storage class name during restore by the
changing PV/PVC storage class method. You can also configure to skip restoring the storage class resources from the backup since they are not usable.
For Velero built-in data mover, data mover pods launched during CSI snapshot data movement will use the priority class name configured in the node-agent configmap. The node-agent daemonset itself gets its priority class from the --node-agent-priority-class-name flag during Velero installation. This can help ensure proper scheduling behavior in resource-constrained environments. For more details on configuring data mover pod resources, see
Data Movement Pod Resource Configuration.
If you are using a customized data mover, follow the data mover’s instructions for any further prerequisites.
For Velero side configurations mentioned above, the installation and configuration of node-agent may not be required.
Velero uses a custom resource DataUpload to drive the data movement. The selected data mover watches and reconciles these CRs.
Velero allows users to decide whether CSI snapshot data should be moved, which data mover to use, and whether to perform a full or incremental backup.
The data mover can be chosen per backup using the --data-mover flag:
velero (default): Uses the default built-in data mover (currently refers to velero-fs).velero-block: Uses the Velero block data mover.velero-fs: Uses the Velero file system data mover.<custom-data-mover>: Uses a customized data mover plugin.Velero supports selecting the backup type via the --backup-type flag:
Incremental (default):
velero-block: Velero interacts with the CSI SnapshotMetadataService to retrieve changed blocks since the previous snapshot, and backs up only those changed blocks to the backup repository. Unchanged blocks share the same data with the parent snapshots.velero-fs: Velero uploads newly added or modified files based on file attributes.Full:
velero-block: Velero queries the CSI SnapshotMetadataService for all allocated blocks in the volume and backs them up. Unallocated regions are treated as zeroes and deduplicated in the backup repository.velero-fs: Velero scans and uploads all files in the volume.To take an incremental backup with the Velero block data mover:
velero backup create NAME --snapshot-move-data --data-mover velero-block OPTIONS...
To take a full backup with the Velero block data mover:
velero backup create NAME --snapshot-move-data --data-mover velero-block --backup-type Full OPTIONS...
To take a backup with the Velero file system data mover:
velero backup create NAME --snapshot-move-data --data-mover velero-fs OPTIONS...
Or using a customized data mover:
velero backup create NAME --snapshot-move-data --data-mover DATA-MOVER-NAME OPTIONS...
In many environments, a single backup may protect volumes from different storage backends—such as block storage volumes (e.g., AWS EBS) alongside file storage volumes (e.g., AWS EFS, Azure Files) or storage classes that lack CBT support.
You can mix velero-block and velero-fs within the same backup by defining a Volume Policy. Under the snapshot action in the policy, configure parameters.dataMover as velero-block or velero-fs:
volumePolicies:
- conditions:
storageClass:
- fast-ebs-sc
action:
type: snapshot
parameters:
dataMover: velero-block
- conditions:
storageClass:
- efs-sc
action:
type: snapshot
parameters:
dataMover: velero-fs
Volumes matched by the volume policy conditions will use the specified data mover, while any other volumes will fall back to the backup’s --data-mover setting. For more details on configuring volume policies, see
Resource Filtering & Volume Policy.
For incremental backups using velero-block, Velero will automatically fall back to a full backup of all allocated blocks in the following situations:
When fallback occurs, unallocated regions are still skipped and identical data blocks remain deduplicated by the backup repository. The backup description will clearly indicate that a fallback took place: Backup Type: Incremental (fallen back to Full). In addition, the reason for the fallback is captured in the status.activities field of the corresponding DataUpload CR.
When the backup starts, you will see the VolumeSnapshot and VolumeSnapshotContent objects created, but after the backup finishes, the objects will disappear.
After snapshots are created, you will see one or more DataUpload CRs created.
You may also see some intermediate objects (i.e., pods, PVCs, PVs) created in the Velero namespace or cluster scope; these assist data movers in transferring data and are automatically deleted after completion.
The phase of a DataUpload CR transitions through several states and eventually reaches a terminal state: Completed, Failed, or Cancelled. While the DataUpload is in progress, progress is displayed with BYTES DONE (amount of data processed so far) and TOTAL BYTES (estimated total volume data). Upon completion, these two numbers will match. In addition, INCREMENTAL BYTES indicates the amount of data that is new or changed since the last backup. For velero-block, this represents the volume data identified as changed by CBT:
kubectl -n velero get datauploads -l velero.io/backup-name=YOUR_BACKUP_NAME -w
By default, INCREMENTAL BYTES is not displayed in the kubectl get output. Use -o wide to view it:
kubectl -n velero get datauploads -o wide -l velero.io/backup-name=YOUR_BACKUP_NAME -w
When the backup completes, you can inspect detailed information:
velero backup describe YOUR_BACKUP_NAME --details
In the --details output, each volume’s Data Movement section displays the configured data mover, the backup type, the uploader type, and the transferred/incremental data size:
Data Movement:
Operation ID: velero-backup-xxxx.pvc-yyyy
Data Mover: velero-block
Backup Type: Incremental
Uploader Type: velero-block
Moved data Size (bytes): 10737418240
Incremental data Size (bytes): 104857600
Result: Completed
If an incremental backup fell back to full, it will show:
Backup Type: Incremental (fallen back to Full)
You can also view the full DataUpload custom resource:
kubectl -n velero get datauploads -l velero.io/backup-name=YOUR_BACKUP_NAME -o yaml
In the DataUpload status:
status.activities: Lists operational activity and progress messages encountered during data movement, such as incremental fallback reasons.status.message: Describes the terminal status if the operation failed or was cancelled.You do not need to specify data mover information when creating a restore. Velero automatically retrieves the configurations (data mover type, backup mode, uploader) from the backup metadata.
To restore from your Velero backup:
velero restore create --from-backup BACKUP_NAME OPTIONS...
When the restore starts, you will see one or more DataDownload CRs created.
You may also see some intermediate objects (i.e., pods, PVCs, PVs) created in Velero namespace or the cluster scope, they are to help data movers to move data. And they will be removed after the restore completes.
The phase of a DataDownload CR changes several times during the restore process and finally goes to one of the terminal status, Completed, Failed or Cancelled. You can see the phase changes as well as the data download progress by watching the DataDownload CRs:
kubectl -n velero get datadownloads -l velero.io/restore-name=YOUR_RESTORE_NAME -w
When the restore completes, view details about the restore:
velero restore describe YOUR_RESTORE_NAME --details
Sample output in --details:
Data Movement:
Operation ID: velero-restore-xxxx.pvc-yyyy
Data Mover: velero-block
Uploader Type: velero-block
Restore Type: full
Restored data Size (bytes): 10737418240
You can also view the DataDownload custom resources directly:
kubectl -n velero get datadownloads -l velero.io/restore-name=YOUR_RESTORE_NAME -o yaml
Similar to DataUpload, status.activities captures operational activities during data download, while status.message describes terminal failure or cancellation details.
chown/chmod can report success while changing nothing, silently losing file ownership (and on FUSE mounts, permission bits). See
File Ownership and Permission Preservation for details and remediation.Run the following checks:
Are your Velero server and daemonset pods running?
kubectl get pods -n velero
Does your backup repository exist, and is it ready?
velero repo get
velero repo get REPO_NAME -o yaml
Are there any errors in your Velero backup/restore?
velero backup describe BACKUP_NAME --details
velero backup logs BACKUP_NAME
velero restore describe RESTORE_NAME --details
velero restore logs RESTORE_NAME
When reviewing backup details, check whether an incremental backup fell back to full:
Backup Type: Incremental (fallen back to Full) under Data Movement. This indicates that CBT metadata retrieval was unsuccessful or the parent snapshot was missing.status.activities on the DataUpload CR:
kubectl -n velero get datauploads -l velero.io/backup-name=BACKUP_NAME -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{range .status.activities}{" - "}{.}{"\n"}{end}{end}'
What is the status of your DataUpload and DataDownload?
kubectl -n velero get datauploads -l velero.io/backup-name=BACKUP_NAME -o yaml
kubectl -n velero get datadownloads -l velero.io/restore-name=RESTORE_NAME -o yaml
Key fields to check in the CR status:
status.phase: Displays the current lifecycle phase (e.g., Accepted, Prepared, InProgress, Completed, Failed, Cancelled).status.activities: Lists events and progress messages that occurred during data movement (such as fallback details or warnings).status.message: Details the reason when the CR reaches a terminal failure or cancelled status.Is there any useful information in the Velero server or data mover pod logs?
kubectl -n velero logs deploy/velero
kubectl -n velero logs DAEMON_POD_NAME
For block data mover:
SnapshotMetadataService is healthy and reachable.csiSnapshotMetadataServiceConfigs.saName is configured with the correct service account name in the node-agent-config ConfigMap.NOTE: You can increase the verbosity of the pod logs by adding --log-level=debug as an argument to the container command in the deployment/daemonset pod template spec.
If you are using a customized data mover, follow the data mover’s instruction for additional troubleshooting methods.
CSI snapshot data movement is a combination of CSI snapshot and data movement, which is jointly executed by Velero server, CSI plugin and the data mover. This section lists general concepts of how CSI snapshot data movement backup and restore work. For detailed mechanisms and workflows, refer to the Volume Snapshot Data Movement design, VGDP Micro Service For Volume Snapshot Data Movement design, and the Block Data Mover design.
Velero has three custom resource definitions and associated controllers:
DataUpload - represents a data upload of a volume snapshot. The CSI plugin creates one DataUpload per CSI snapshot. Data movers need to handle these CRs to finish the data upload process.
Velero built-in data mover runs a controller for this resource on each node (in node-agent daemonset). Controllers from different nodes may handle one CR in different phases, but finally the data transfer is done by a data mover pod in one node.
DataDownload - represents a data download of a volume snapshot. The CSI plugin creates one DataDownload per volume to be restored. Data movers need to handle these CRs to finish the data upload process.
Velero built-in data mover runs a controller for this resource on each node (in node-agent daemonset). Controllers from different nodes may handle one CR in different phases, but finally the data transfer is done by a data mover pod in one node.
BackupRepository - represents/manages the lifecycle of Velero’s backup repositories. Velero creates a backup repository per namespace when the first CSI snapshot backup/restore for a namespace is requested. You can see information about your Velero’s backup repositories by running velero repo get.
This CR is used by Velero built-in data movers, customized data movers may or may not use it.
For other resources or controllers involved by customized data movers, check the data mover’s instructions.
Velero backs up resources for CSI snapshot data movement backup in the same way as other backup types. When it encounters a PVC, specific logic is executed:
VolumeSnapshot and VolumeSnapshotContent objects.backupType, creates a DataUpload CR, and returns to the Velero backup workflow.--item-operation-sync-frequency Velero server parameter, default is 10s). The CSI plugin checks the phase of the DataUpload CRs.DataUpload CRs reach a terminal state (Completed, Failed, or Cancelled), the Velero backup persists all metadata and completes.DataUpload CR does not reach a terminal state within the configured timeout, it is cancelled (configurable via --item-operation-timeout, default is 4 hours).When Velero built-in data mover processes the DataUpload CR:
BackupPVC in volumeMode: Block, regardless of whether the source volume was volumeMode: FileSystem or volumeMode: Block.SnapshotMetadataService via gRPC:
BackupPVC in volumeMode: FileSystem.Velero restores resources for CSI snapshot data movement restore in the same way as other restore types. When it encounters a PVC, specific logic is executed:
DataDownload CR populated with the appropriate data mover type and returns to the restore workflow.--item-operation-sync-frequency Velero server parameter, default every 10s) queries the data movement status from the CSI plugin.DataDownload CRs reach a terminal state (Completed, Failed, or Cancelled), the restore finishes.When Velero built-in data mover processes the DataDownload CR:
volumeMode: Block.volumeMode: FileSystem, Kubernetes does not allow directly binding a block PV to a filesystem PVC. The exposer creates a FileSystem mode PV, and binds it to the target PVC.velero-fs):
volumeMode: FileSystem.When a backup is created, a snapshot is saved into the repository for the volume data as a reference to the volume data stored in the repository.
When deleting a backup, Velero calls the repository to delete the repository snapshot. The repository snapshot disappears immediately after the backup is deleted. The volume data backed up in the repository then becomes orphaned, and the repository relies on maintenance jobs to delete the orphaned data.
As a result, after you delete a backup, the backup storage size does not reduce until a full repository maintenance job completes successfully. Ensure that periodical repository maintenance jobs run and complete successfully.
For the file system data mover:
Even after deleting all backups and their backup data (via repository maintenance), repository metadata remains to preserve the repository instance. If you stop using the backup repository, you can empty the backup storage manually.
Velero calls the CSI plugin concurrently for volumes, so DataUpload/DataDownload CRs are created concurrently.
How DataUpload/DataDownload CRs are processed across nodes and within a node depends on the data mover and node-agent configuration:
For Velero built-in data movers, the Kubernetes scheduler mounts the snapshot volume or restore volume associated with a DataUpload/DataDownload CR to a specific node, where the local DataUpload/DataDownload controller processes it.
By default, a controller in one node handles one request at a time. You can configure higher concurrency per node using
node-agent Concurrency Configuration. Snapshot and restore volumes spread across different nodes are processed in parallel, while volumes on the same node are processed concurrently according to your concurrency configuration.
The preparation process of mounting volumes may create intermediate objects. To control the number of pending intermediate objects, configure the node-agent Prepare Queue Length.
You can monitor which node is processing each CR and observe progress:
kubectl -n velero get datauploads -l velero.io/backup-name=YOUR_BACKUP_NAME -w
kubectl -n velero get datadownloads -l velero.io/restore-name=YOUR_RESTORE_NAME -w
For each individual volume, parallelism operates as follows:
--parallel-files-upload backup flag or --parallel-files-download restore flag. If omitted, Velero defaults to the number of CPU cores in the node hosting the data mover pod.Notice that Golang 1.25 and later respects the CPU limit set to the pods to decide the physical threads provisioned to the pod processes (see
Container-aware GOMAXPROCS for more details), so for Velero 1.18 (which consumes Golang 1.25) and later, if you set a CPU limit to the data mover pods, you may not get the expected performance (e.g., backup/restore throughput) with the default parallelism. The outcome may or may not be obvious varying on your volume data. If it is required, you could customize --parallel-files-upload or --parallel-files-download according to the CPU limit set to the data mover pods.
When Velero server is restarted, if the resource backup/restore has completed, so the backup/restore has excceded InProgress status and is waiting for the completion of the data movements, Velero will recapture the status of the running data movements and resume the execution.
When node-agent is restarted, Velero tries to recapture the status of the running data movements and resume the execution; if the resume fails, the data movements are canceled.
At present, Velero backup and restore doesn’t support end to end cancellation that is launched by users.
However, Velero cancels the DataUpload/DataDownload in below scenarios automatically:
InProgress statusDataUpload/DataDownload fails4 hours)Customized data movers that support cancellation could cancel their ongoing tasks and clean up any intermediate resources. If you are using Velero built-in data mover, the cancellation is supported.
When the Velero server pod’s SecurityContext sets the ReadOnlyRootFileSystem parameter to true, the Velero server pod’s filesystem is running in read-only mode. Then the backup deletion may fail, because the repository needs to write some cache and configuration data into the pod’s root filesystem.
Errors: /error to connect repo with storage: error to connect to repository: unable to write config file: unable to create config directory: mkdir /home/cnb/udmrepo: read-only file system
The workaround is making those directories as ephemeral k8s volumes, then those directories are not counted as pod’s root filesystem.
The user-name is the Velero pod’s running user name. The default value is cnb.
apiVersion: apps/v1
kind: Deployment
metadata:
name: velero
namespace: velero
spec:
template:
spec:
containers:
- name: velero
......
volumeMounts:
......
- mountPath: /home/<user-name>/udmrepo
name: udmrepo
- mountPath: /home/<user-name>/.cache
name: cache
......
volumes:
......
- emptyDir: {}
name: udmrepo
- emptyDir: {}
name: cache
......
At present, Velero doesn’t allow setting the ReadOnlyRootFileSystem parameter on data mover pods, so the root filesystem for the data mover pods is always writable.
Both the uploader and repository consume remarkable CPU/memory during the backup/restore, especially for massive small files or large backup size cases.
For Velero built-in data mover, Velero uses
BestEffort as the QoS for data mover pods (so no CPU/memory request/limit is set), so that backups/restores wouldn’t fail due to resource throttling in any cases.
If you want to constraint the CPU/memory usage, you need to
Customize Data Mover Pod Resource Limits. The CPU/memory consumption is always related to the scale of data to be backed up/restored, refer to
Performance Guidance for more details, so it is highly recommended that you perform your own testing to find the best resource limits for your data.
During the restore, the repository may also cache data/metadata so as to reduce the network footprint and speed up the restore. The repository uses its own policy to store and clean up the cache.
For Kopia repository, by default, the cache is stored in the data mover pod’s root file system. If your root file system space is limited, the data mover pods may be evicted due to running out of the ephemeral storage, which causes the restore fails. To cope with this problem, Velero allows you:
The node where a data movement backup/restore runs is decided by the data mover.
For Velero built-in data movers, the Kubernetes scheduler mounts the snapshot volume or restore volume associated with a DataUpload/DataDownload CR to a specific node, and the local data mover controller runs the data transfer on that node.
The BackupPVC serves as an intermediate Persistent Volume Claim (PVC) utilized during data movement backup operations, providing efficient access to data.
In complex storage environments, optimizing BackupPVC configurations can significantly enhance the performance of backup operations.
This document outlines advanced configuration options for BackupPVC, allowing users to fine-tune access modes and storage class settings based on their storage provider’s capabilities. Note that for the block data mover, the BackupPVC is always created with volumeMode: Block.
The RestorePVC serves as an intermediate Persistent Volume Claim (PVC) utilized during data movement restore operations, providing efficient access to data.
Sometimes, RestorePVC needs to be configured to increase the performance of restore operations.
This document outlines advanced configuration options for RestorePVC, allowing users to fine-tune access modes and storage class settings based on their storage provider’s capabilities. Note that for the block data mover, the intermediate RestorePVC is provisioned with volumeMode: Block during data restore and rebound appropriately to match the target PVC.
To help you get started, see the documentation.