Backup and Recovery¶
Overview¶
Backups protect state that GitOps cannot recreate. Git restores manifests; it does not restore PostgreSQL rows, Redis persistence, MinIO objects, Elasticsearch indices, or local-path PersistentVolume data.
Recommended Layers¶
| Layer | Tool | Protects |
|---|---|---|
| Kubernetes resources | Velero | Namespaces, resources, and supported volume snapshots |
| PostgreSQL | CloudNativePG backup | Base backups and WAL for point-in-time recovery |
| Object data | MinIO replication or mc mirror |
Buckets and objects |
| Search data | Elasticsearch snapshots | Indices and cluster metadata |
| Cluster bootstrap | Git plus encrypted secret backup | Argo CD applications and configuration |
Redis used only as a cache normally does not need backup. Kafka or Redpanda requires a separate retention and disaster-recovery decision; copying a live data directory is not a safe backup strategy.
Storage Rule¶
Send backups to object storage outside the VPS and preferably outside its provider. MinIO running on the same node is a working S3 endpoint, not disaster recovery.
Verification¶
velero backup get
velero backup describe <BACKUP_NAME> --details
kubectl get scheduledbackup,backup -A
Schedule restore drills into a new namespace or temporary cluster. Record recovery point objective (acceptable data loss) and recovery time objective (acceptable downtime); a backup is useful only if it can be restored within both targets.