Running workloads on kubernetes without a reliable backup strategy is like building a house on sand. Pods get evicted, nodes fail, storage classes change, and entire clusters can disappear. While Kubernetes handles scheduling and scaling well, backup and disaster recovery is entirely your responsibility.
Three open-source projects have emerged as the leading self-hosted solutions for Kubernetes backup orchestration: Velero, Stash, and VolSync. Each takes a different architectural approach to protecting your cluster state, persistent volumes, and application data.
This guide compares all three tools across features, installation, backup strategies, and operational complexity to help you choose the right solution for your infrastructure.
Why Back Up Kubernetes at All?
Kubernetes controllers constantly reconcile desired state, but they cannot recreate your data. Persistent Volume Claims (PVCs) hold stateful application data — databases, file uploads, message queues, and configuration stores. When a StorageClass provisioner fails, a disk corrupts, or someone accidentally runs kubectl delete ns production, that data is gone without backups.
Even if your cloud provider offers snapshots, those are tied to the provider’s storage backend. A self-hosted backup strategy gives you portability (restore to any cluster, any provider), versioning (roll back to a point in time), and off-cluster storage (protect against total cluster loss).
The Three Contenders at a Glance
| Feature | Velero | Stash | VolSync |
|---|---|---|---|
| GitHub Stars | 9,968 | 1,407 | 960 |
| Last Updated | Apr 2026 | Apr 2026 | Apr 2026 |
| Language | Go | Go | Go |
| License | Apache 2.0 | Enterprise/Community | Apache 2.0 |
| Primary Scope | Full cluster backup & migration | App-level backup (Kubernetes native) | Volume replication & sync |
| Backup Targets | S3, Azure Blob, GCS, generic object storage | S3, GCS, Azure, B2, Restic repos, SFTP | S3, PVC-to-PVC, rsync, rclone, Multicluster |
| Backup Engine | Native snapshot API + Restic/Kopia | Restic or Kopia (pluggable) | Restic, rclone, rsync, external-snapshotter |
| Namespace-Level | Yes | Yes | Yes |
| Full Cluster | Yes | Partial (resource-focused) | No (volume-focused) |
| Cluster Migration | Yes (backup + restore to different cluster) | Limited | Limited |
| Schedule Support | Built-in Cron-like schedules | Built-in CronJob-based schedules | Built-in ReplicationDestination/Source |
| Resource Filtering | Label selectors, namespace include/exclude | Label selectors, namespace targeting | Label selectors, PVC targeting |
| Hook Support | Pre/post backup and restore hooks | Pre/post backup and restore hooks | No native hooks |
| CSI Snapshot | Yes (CSI VolumeSnapshot integration) | No (uses Restic/Kopia sidecar) | Yes (via external-snapshotter) |
| Incremental Backup | Yes (via Restic/Kopia or CSI) | Yes (via Restic/Kopia) | Yes (all backends) |
| Disaster Recovery | Full cluster state + data restore | Application data restore | Volume-level restore only |
| Multi-Cluster | Via shared object storage | Via shared backend storage | Native multi-cluster sync |
| Helm Install | helm install velero vmware-tanzu/velero | helm install stash appscode/stash | helm install volsync backube/volsync |
| CLI Tool | velero | kubectl (CRD-based) | kubectl (CRD-based) |
| Maturity | Production-ready (since 2017) | Production-ready | Growing adoption (part of ODF) |
Velero: The Established Standard
Velero is the most widely adopted Kubernetes backup solution. Originally developed by Heptio (later acquired by VMware), it has been the de facto standard for cluster backup since 2017.
How Velero Works
Velero operates as a Kubernetes controller that creates Backup and Restore custom resources. For PersistentVolumes, it supports two modes:
- CSI snapshots — leverages the CSI VolumeSnapshot API for fast, storage-level snapshots (if your CSI driver supports it)
- Filesystem backup — uses Restic or Kopia to back up PV data file-by-file via a DaemonSet sidecar
For Kubernetes resources (Deployments, Services, ConfigMaps, etc.), Velero serializes them to JSON and stores them alongside the PV backup in your object storage.
Installing Velero via Helm
| |
Creating a Backup
| |
Velero Backup CRD Example
| |
Stash: Application-Aware Backup Operator
Stash, developed by AppsCode, takes a different philosophy. Instead of backing up entire cluster state, Stash focuses on application-level backup — it integrates directly into the workload’s pod and backs up only the data that matters.
How Stash Works
Stash uses Kubernetes operators and Custom Resource Definitions (CRDs) to manage backups. When you create a BackupConfiguration resource, Stash injects a sidecar container (running Restic or Kopia) into your target pod. This sidecar performs incremental backups directly from within the pod’s network namespace, eliminating the need for a separate backup DaemonSet.
Stash supports a wide range of backends: S3-compatible object storage, Google Cloud Storage, Azure Blob Storage, Backblaze B2, Restic repositories, and SFTP servers.
Installing Stash via Helm
| |
Defining a Backup Backend
| |
Creating a BackupConfiguration
| |
The Stash Restore Process
| |
VolSync: Volume-Centric Replication and Sync
VolSync takes a fundamentally different approach. Instead of backing up full cluster state or individual applications, VolSync focuses exclusively on PersistentVolume replication and synchronization. It’s designed for scenarios where you need to replicate data between clusters, storage backends, or PVCs on a schedule.
VolSync is part of the OpenShift Data Foundation (ODF) ecosystem but works on any Kubernetes cluster.
How VolSync Works
VolSync uses two primary CRDs:
- ReplicationSource — defines what to back up (a source PVC) and where to send it
- ReplicationDestination — defines where to receive replicated data
Unlike Velero and Stash, VolSync does not back up Kubernetes resources (Deployments, Services, etc.). It’s purely a volume replication tool, which makes it simpler but also more limited in scope.
Installing VolSync via Helm
| |
Creating a ReplicationSource (Backup to S3)
| |
ReplicationSecret for S3 Storage
| |
ReplicationDestination (Restore / Cross-Cluster Sync)
| |
Choosing the Right Tool
Pick Velero if:
- You need full cluster backup and disaster recovery (resources + PVs)
- You plan to migrate workloads between clusters
- You want a single tool that handles both stateless resources and stateful data
- Your CSI driver supports VolumeSnapshots for fast PV backups
- You need pre/post hooks for database dumps before backup
Pick Stash if:
- You want application-aware backup integrated at the pod level
- Your team already uses AppsCode products (Kubedb, Stash Enterprise)
- You need fine-grained backup policies per application
- You prefer sidecar injection over DaemonSet-based filesystem backup
- You want Kopia as a backup engine option alongside Restic
Pick VolSync if:
- You only need volume-level replication (not full cluster state)
- You are replicating data between clusters or storage backends
- You’re on OpenShift and want native ODF integration
- You need asynchronous replication with configurable RPO
- Your backup target is another PVC (PVC-to-PVC sync)
Disaster Recovery Architecture
A production-grade self-hosted Kubernetes disaster recovery plan typically combines tools rather than relying on a single solution:
| |
The pattern: use Velero for periodic full-cluster snapshots (your ultimate fallback), and layer Stash or VolSync for frequent, application-specific backups with faster RPOs. Store all backups on an off-cluster MinIO or S3-compatible target — setting up MinIO is straightforward and gives you full control over your backup storage.
Backup Strategy Best Practices
Follow the 3-2-1 rule: Keep at least 3 copies of your data, on 2 different storage types, with 1 copy off-site. For Kubernetes, this means: active PVCs, cluster-local snapshots, and off-cluster object storage.
Test restores regularly: A backup you cannot restore is not a backup. Schedule periodic restore drills to a staging namespace. See our backup verification guide for automated integrity testing strategies.
Separate resource and data backups: Kubernetes resource manifests (YAML) are small and fast to back up. PV data is large and slow. Velero handles both; VolSync handles only data. Choose based on your RTO/RPO requirements.
Use CSI snapshots when available: CSI-native snapshots are instant and don’t copy data during backup. Velero leverages this automatically. Restic/Kopia filesystem backup is slower but works with any CSI driver.
Encrypt your backup data: Both Restic and Kopia encrypt data client-side before uploading. Always set a strong
RESTIC_PASSWORD. If using Velero with CSI snapshots, ensure your storage backend supports encryption at rest.Version your backup tool: Pin your Helm chart version. Velero, Stash, and VolSync all introduce breaking CRD changes between major versions. Test upgrades on a non-production cluster first.
For database-specific backup strategies (PostgreSQL, MySQL), dedicated tools like the ones covered in our PostgreSQL backup comparison provide more granular control than general-purpose Kubernetes backup tools.
FAQ
Can Velero, Stash, and VolSync be used together?
Yes. In fact, this is a recommended pattern for production environments. Velero handles full cluster state and resource backup (Deployments, Services, ConfigMaps, Secrets), while Stash or VolSync provides frequent, application-level or volume-level backups with tighter RPOs. They do not conflict because they operate on different CRD namespaces and target different scopes.
Does Velero support Restic and Kopia?
Velero originally used Restic for filesystem backup and added Kopia support in version 1.12. Both are available as plugins. Kopia is generally faster for incremental backups due to its content-addressable storage and better deduplication. Enable filesystem backup with --set configuration.defaultVolumesToFsBackup=true in your Helm values.
Which tool is best for multi-cluster replication?
VolSync is purpose-built for this scenario. Its ReplicationSource and ReplicationDestination CRDs are designed for asynchronous volume replication between clusters, with configurable schedules and retention policies. Velero can migrate data between clusters via shared object storage, but it is not designed for continuous replication.
Do any of these tools support encrypted backups?
Yes. Stash (via Restic/Kopia) and VolSync (via Restic) both encrypt data client-side before it leaves the cluster. The RESTIC_PASSWORD (or Kopia passphrase) is the encryption key — if you lose it, your backup data is unrecoverable. Velero with CSI snapshots relies on the storage provider’s encryption; filesystem backup via Restic/Kopia adds client-side encryption.
Can I restore individual files from a backup?
Stash and VolSync (via Restic) support browsing and restoring individual files from backup snapshots using the stash restore command or restic mount for FUSE-based access. Velero’s restore is namespace or resource-level — it does not support single-file restore from PV backups. For file-level recovery, Stash or VolSync is the better choice.
What happens if my backup storage (S3/MinIO) goes down?
Backups queued during storage unavailability will fail and be retried according to the tool’s retry policy. Velero retries failed backups automatically. Stash marks failed BackupConfigurations with status conditions. VolSync ReplicationSources will retry on the next scheduled trigger. Ensure your object storage has its own redundancy (e.g., MinIO erasure coding across multiple nodes).
How do I back up etcd alongside these tools?
None of these tools back up etcd — they back up Kubernetes resources via the API server. etcd backup is a separate concern. Use etcdctl snapshot save for etcd backups, and store the snapshot file in the same object storage as your Velero/Stash backups. For a complete etcd backup strategy, refer to your distribution’s documentation.
Are these tools compatible with all Kubernetes distributions?
Velero works with most distributions (kubeadm, k3s, EKS, GKE, AKS, OpenShift). Stash works similarly but has better documentation for AppsCode’s own distributions. VolSync is officially part of OpenShift Data Foundation but works on any cluster with the external-snapshotter CRDs installed. Test on your specific distribution before production deployment.