Velero — Sauvegarde & Restauration
Velero est un outil open-source de backup et restauration pour Kubernetes. Il permet de sauvegarder l’ensemble des ressources du cluster (manifests) et des volumes persistants, puis de les restaurer sur le même cluster ou un autre.
Ce que Velero sauvegarde
Velero backup
├── Ressources Kubernetes (Deployments, Services, ConfigMaps, Secrets…)
├── Namespaces
├── PersistentVolumeClaims + données (via snapshots ou Restic/Kopia)
└── Métadonnées RBAC, CustomResourceDefinitions…
Les backups sont stockés dans un object storage (S3, GCS, Azure Blob, MinIO…).
Architecture
velero (pod dans le cluster)
│
├── surveille les ressources Kubernetes (via kube-apiserver)
│
├── stocke les manifests YAML → Object Storage (ex: S3)
│
└── snapshots des volumes → Cloud provider snapshots ou Kopia/Restic
Installation via Helm
helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts
helm repo update
helm install velero vmware-tanzu/velero \
--namespace velero \
--create-namespace \
--set configuration.backupStorageLocation[0].name=default \
--set configuration.backupStorageLocation[0].provider=aws \
--set configuration.backupStorageLocation[0].bucket=mon-bucket-velero \
--set configuration.backupStorageLocation[0].config.region=eu-west-1 \
--set credentials.secretContents.cloud="[default]\naws_access_key_id=XXXX\naws_secret_access_key=YYYY"Exemple : BackupStorageLocation (BSL)
Définit où stocker les backups (ici MinIO en self-hosted) :
apiVersion: velero.io/v1
kind: BackupStorageLocation
metadata:
name: default
namespace: velero
spec:
provider: aws # compatible S3
objectStorage:
bucket: velero-backups
prefix: cluster-prod
config:
region: minio
s3ForcePathStyle: "true"
s3Url: http://minio.storage.svc:9000
credential:
name: minio-credentials
key: cloudExemple : Backup manuel d’un namespace
apiVersion: velero.io/v1
kind: Backup
metadata:
name: backup-production-2024
namespace: velero
spec:
includedNamespaces:
- production
storageLocation: default
ttl: 720h # rétention 30 jours
snapshotVolumes: trueOu via CLI :
# Backup d'un namespace
velero backup create backup-prod --include-namespaces production
# Backup de tout le cluster
velero backup create backup-full
# Vérifier l'état
velero backup describe backup-prod
velero backup logs backup-prodExemple : Schedule (backup automatique)
apiVersion: velero.io/v1
kind: Schedule
metadata:
name: backup-quotidien
namespace: velero
spec:
schedule: "0 2 * * *" # tous les jours à 2h du matin
template:
includedNamespaces:
- production
- staging
storageLocation: default
ttl: 168h # rétention 7 jours
snapshotVolumes: trueRestauration
# Lister les backups disponibles
velero backup get
# Restaurer un backup complet
velero restore create --from-backup backup-prod
# Restaurer uniquement certaines ressources
velero restore create \
--from-backup backup-prod \
--include-namespaces production \
--include-resources deployments,services
# Vérifier la restauration
velero restore describe <nom-restore>Cas d’usage
| Scénario | Solution Velero |
|---|---|
| Migration cluster A → B | Backup sur A, restore sur B |
| Suppression accidentelle d’un namespace | Restore du namespace depuis le backup |
| Mise à jour Kubernetes risquée | Backup avant, rollback si besoin |
| Disaster Recovery | Backup régulier vers S3 cross-region |
Liens
- etcd — Velero complète la sauvegarde etcd (etcd = état interne, Velero = ressources applicatives)
- Plugins Kubernetes - Vue d’ensemble — vue globale
- argocd — ArgoCD + Velero : GitOps pour les manifests, Velero pour les données