KubernetesLV · Storage SnapshotsStorage snapshots
Snapshots are not backups — what CSI snapshots actually give you
What you'll learn
- Distinguish a snapshot from a backup
- Explain why a snapshot is not a substitute for a backup
- Identify what snapshots protect against and what they do not
- Apply the production discipline for combining snapshots and backups
Prerequisites
Verified against Kubernetes 1.34.x · kubeadm 1.34.x · kubectl 1.34.x · etcd 3.6.x · CoreDNS 1.11.x · containerd 1.7.x / 2.x · 2026-08-16
The most consequential confusion in Kubernetes storage is the conflation of “snapshot” with “backup.” A snapshot is not a backup; a backup is not a snapshot. This lesson establishes the distinction and the production discipline for combining them.
What a snapshot is
A snapshot is a point-in-time copy of a volume, stored on the same storage backend:
flowchart LR
A[Volume] -->|snapshot API| B[Snapshot]
B -->|same backend| C[Storage backend]
For CSI, the snapshot is a VolumeSnapshot CRD:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: postgres-snap-20260816
spec:
source:
persistentVolumeClaimName: data-postgres-0
volumeSnapshotClassName: postgres-snap
The snapshot is a delta from the volume’s state at the moment of creation. It is stored on the same backend; it shares the backend’s failure modes.
What a backup is
A backup is an independent copy of the data, stored separately from the production backend:
flowchart LR
A[Volume] -->|export| B[Backup]
B -->|different backend| C[Object storage: S3, GCS, Azure Blob]
The backup is independent:
- It is on a different backend (different availability zone, different region, different cloud).
- It has its own access controls.
- It has its own retention policy.
- It can be restored even if the primary backend is destroyed.
What snapshots protect against
Snapshots protect against:
- Operator errors: a bad
kubectl deleteof a PVC can be rolled back from a snapshot. - Application bugs: a database corruption caused by an application bug can be rolled back from a snapshot.
- Point-in-time recovery: a snapshot taken before a destructive operation can be restored.
- Fast rollback: snapshots are fast to create and restore (seconds to minutes).
What snapshots do not protect against
Snapshots do not protect against:
- Storage backend failure: if the backend fails, the snapshot fails with it.
- Region-wide outage: a snapshot in the same region as the volume is lost in a region-wide outage.
- Ransomware: a snapshot on the same backend can be encrypted by ransomware (the attacker has access to both).
- Operator error on the snapshot itself: a bad
kubectl delete volumesnapshotdeletes the snapshot. - Compliance: snapshots on the same backend may not meet compliance requirements for offsite storage.
The snapshot is not a backup
A backup is independent of the production backend. A snapshot is not.
| Property | Snapshot | Backup |
|---|---|---|
| Storage | Same backend | Different backend |
| Speed | Fast (seconds) | Slower (minutes) |
| Cost | Cheap | More expensive |
| Independence | No | Yes |
| Application-consistent | With cooperation | With cooperation |
| Offsite | No | Yes |
| Compliance | Limited | Yes |
| Recovery from backend failure | No | Yes |
The production rule: snapshots are for fast rollback; backups are for disaster recovery. Both are needed.
The snapshot lifecycle
stateDiagram-v2
[*] --> Available: snapshot created
Available --> Restoring: restore PVC from snapshot
Available --> Deleting: operator deletes snapshot
Available --> [*]: retention policy expires
Restoring --> Bound: new PVC bound
Restoring --> Failed: restore fails
Snapshots have lifecycle states:
- Available: the snapshot is ready for use.
- Restoring: a PVC is being restored from the snapshot.
- Failed: the restore failed (e.g., the backend is unavailable).
The production pattern
flowchart LR
A[Production database] --> B[Hourly snapshot<br/>CSI, 24h retention]
A --> C[Daily file backup<br/>S3, 7d retention]
A --> D[Daily logical backup<br/>S3, 30d retention]
B --> E[Same backend]
C --> F[Different backend]
D --> F
Snapshots for fast rollback; backups for disaster recovery; both tested regularly.
Quiz
Knowledge check · 4 questions
Q1. What is the key difference between a snapshot and a backup?
Q2. A CSI snapshot can be used as the sole data protection mechanism for production stateful workloads.
Q3. Your team's PostgreSQL production data is lost due to a backend outage. The team had hourly CSI snapshots. Walk through the analysis.
Production PostgreSQL on AWS EBS. Hourly CSI snapshots. The EBS backend has an outage that lasts 6 hours. The team tries to restore from the snapshot; the snapshot is also unavailable because it is on the same EBS backend.
Q4. Explain why a snapshot is not a backup and what the production pattern is.
Passing score: 75%. Answers are checked in this browser.
Production discipline
- A snapshot is not a backup. They are different things with different purposes.
- Snapshots are for fast rollback; backups are for disaster recovery. Use both.
- Backups must be on a different backend. S3, GCS, Azure Blob, or another cluster.
- Test backups regularly. A backup that is never restored is not a backup.
- Document the snapshot and backup policies. Every workload has a documented policy.