Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Gestion des sauvegardes

Vue d'ensemble

La sauvegarde des ressources Kubernetes est un élément critique de la stratégie de résilience et de continuité d'activité. SdV intègre Velero comme solution de backup pour l'ensemble des objets du cluster, permettant la sauvegarde et la restauration à la fois des ressources Kubernetes et des volumes persistants.

Objectifs de la sauvegarde

La stratégie de sauvegarde mise en place répond à plusieurs besoins opérationnels :

ObjectifDescriptionExemple d'usage
Disaster RecoveryRestauration complète après incident majeurCorruption cluster, panne datacenter
Migration de clusterTransfert d'applications entre environnementsMigration dev → staging → prod
Rollback applicatifRetour arrière après déploiement défaillantAnnulation d'un release problématique
Clonage d'environnementDuplication d'une configuration complèteReproduction d'un bug en environnement isolé
Conformité et auditConservation de l'état du cluster à un instant TObligation réglementaire, forensic

Architecture de sauvegarde

Composants Velero

Velero s'appuie sur plusieurs composants pour assurer la sauvegarde et la restauration :

ComposantTypeRôle
Velero ServerDeployment dans le namespace veleroOrchestrateur des opérations de backup/restore
Node Agent DaemonSetDaemonSet sur chaque nœud workerSauvegarde des données des PersistentVolumes
Backend S3Stockage objet externeStockage distant et résilient des backups
Velero CLIOutil en ligne de commandeInterface d'administration depuis un poste client

Flux de sauvegarde

Diagramme Velero Simplifié

Périmètre de sauvegarde

Ressources sauvegardées

Velero peut sauvegarder l'ensemble des ressources Kubernetes ainsi que leurs données persistantes :

Ressources Kubernetes

Type de ressourceSauvegardé par défautNotes
NamespacesOuiStructure et métadonnées
Deployments, StatefulSets, DaemonSetsOuiDéfinitions complètes
Services, IngressOuiConfiguration réseau
ConfigMaps, SecretsOuiConfiguration applicative
PersistentVolumeClaimsNonMétadonnées + données si annotation spécifique présente sur le pod
CustomResourceDefinitions (CRDs)OuiDéfinitions et instances
ServiceAccounts, Roles, RoleBindingsOuiConfiguration RBAC
NetworkPoliciesOuiPolitiques réseau

Volumes persistants

Type de volumeMéthode de sauvegardePerformances
Volumes NFS (managed-nfs-storage)kopia (snapshot niveau fichier)Moyennes (scan complet au 1er backup)
PersistentVolumes avec hostPathNon supporté par défaut⚠️ Non recommandé en production
Volumes éphémères (emptyDir)❌ Non sauvegardéNature temporaire

Filtrage et sélection

Velero offre des mécanismes de filtrage pour cibler précisément le périmètre de sauvegarde :

Critère de filtrageExempleCas d'usage
Par namespace--include-namespaces production,stagingSauvegarder uniquement certains environnements
Par label--selector app=webapp,tier=frontendSauvegarder un sous-ensemble d'objets
Par type de ressource--include-resources deployments,servicesSauvegarder uniquement certaines ressources
Par exclusion--exclude-namespaces dev,testExclure des environnements non-critiques

Installation et configuration du CLI

Prérequis

Pour interagir avec Velero, vous devez disposer de :

  1. Accès au cluster Kubernetes : fichier kubeconfig fourni par SdV (généralement nommé kube_config_rke_config.yml)
  2. Connexion réseau : accès à l'API Kubernetes (via VPN si cluster en mode privé)
  3. Droits suffisants : permissions RBAC pour lire/créer des ressources Velero

Téléchargement du CLI

Velero CLI est disponible pour les principaux systèmes d'exploitation :

OSArchitectureLien de téléchargement
Linuxamd64velero-v1.17.1-linux-amd64.tar.gz
macOSamd64velero-v1.17.1-darwin-amd64.tar.gz
Windowsamd64velero-v1.17.1-windows-amd64.tar.gz

Installation

Linux
# Télécharger et extraire
wget https://github.com/vmware-tanzu/velero/releases/download/v1.17.1/velero-v1.17.1-linux-amd64.tar.gz
tar -xvzf velero-v1.17.1-linux-amd64.tar.gz
 
# Copier le binaire dans le PATH
sudo mv velero-v1.17.1-linux-amd64/velero /usr/local/bin/
 
# Vérifier l'installation
velero version --client-only

Configuration du kubeconfig

Pour que le CLI Velero puisse communiquer avec votre cluster, vous devez spécifier le fichier kubeconfig fourni par SdV :

Méthode 1 : Variable d'environnement (recommandée)

Terminal
# Définir la variable d'environnement (à ajouter dans ~/.bashrc ou ~/.zshrc)
export KUBECONFIG=/chemin/vers/kube_config_rke_config.yml
 
# Vérifier la connexion
kubectl cluster-info
velero version

Méthode 2 : Option en ligne de commande

Terminal
# Spécifier le kubeconfig à chaque commande
velero backup get --kubeconfig=/chemin/vers/kube_config_rke_config.yml

Validation de l'installation

Une fois le CLI installé et configuré, vérifiez la communication avec le cluster :

Terminal
# Vérifier la version du CLI et du serveur Velero
velero version
 
# Lister les backups existants
velero backup get
 
# Vérifier la configuration du backend de stockage
velero backup-location get
 
# Vérifier le statut de la sauvegarde des volumes persistants
velero repo get
Sortie attendue :
Client:
	Version: v1.17.1
	Git commit: -
 
Server:
	Version: v1.17.1

Opérations de sauvegarde

Sauvegarde ponctuelle

Sauvegarde complète d'un namespace

Terminal
# Sauvegarder tous les objets d'un namespace
velero backup create backup-production-$(date +%Y%m%d-%H%M%S) \
  --include-namespaces production \
  --wait
 
# Surveiller la progression
velero backup describe backup-production-20260219-143000 --details
Paramètres :
  • --include-namespaces : liste des namespaces à sauvegarder
  • --wait : attend la fin du backup avant de rendre la main

Sauvegarde sélective par labels

Terminal
# Sauvegarder uniquement les ressources avec un label spécifique
velero backup create backup-webapp-$(date +%Y%m%d-%H%M%S) \
  --selector app=webapp,environment=production \

Sauvegarde multi-namespaces

Terminal
# Sauvegarder plusieurs namespaces
velero backup create backup-multi-ns-$(date +%Y%m%d-%H%M%S) \
  --include-namespaces production,staging,integration \

Sauvegarde complète du cluster

Terminal
# Sauvegarder l'intégralité du cluster (hors namespaces système)
velero backup create backup-cluster-complet-$(date +%Y%m%d-%H%M%S) \
  --exclude-namespaces kube-system,kube-public,kube-node-lease,velero \

Sauvegarde planifiée (Schedule)

Les sauvegardes planifiées garantissent une protection continue sans intervention manuelle.

Créer une sauvegarde quotidienne

Terminal
# Sauvegarde quotidienne à 2h00 du matin
velero schedule create daily-production \
  --schedule="0 2 * * *" \
  --include-namespaces production \
  --ttl 720h0m0s
Paramètres :
  • --schedule : expression cron (format standard Unix)
  • --ttl : durée de rétention (ici 30 jours = 720 heures)

Exemples d'expressions cron

ExpressionDescriptionHeure d'exécution
0 2 * * *Tous les jours à 2h00Quotidien
0 3 * * 0Tous les dimanches à 3h00Hebdomadaire
0 4 1 * *Le 1er de chaque mois à 4h00Mensuel
0 */6 * * *Toutes les 6 heuresToutes les 6h
0 0 * * 1-5Du lundi au vendredi à minuitJours ouvrés

Lister les sauvegardes planifiées

Terminal
# Afficher toutes les schedules
velero schedule get
 
# Détails d'une schedule
velero schedule describe daily-production

Modifier ou supprimer une schedule

Terminal
# Supprimer une schedule
velero schedule delete daily-production
 
# Mettre en pause temporairement (la schedule reste définie mais n'est plus exécutée)
kubectl patch schedule daily-production -n velero --type merge -p '{"spec":{"paused":true}}'
 
# Réactiver une schedule en pause
kubectl patch schedule daily-production -n velero --type merge -p '{"spec":{"paused":false}}'

Surveiller les sauvegardes

Lister les backups

Terminal
# Lister tous les backups
velero backup get
 
# Filtrer par statut
velero backup get --selector velero.io/schedule-name=daily-production
 
# Afficher les backups des 7 derniers jours
velero backup get --selector 'velero.io/backup.expiration-date>'$(date -d '7 days ago' +%Y-%m-%d)

Vérifier le statut d'un backup

Terminal
# Statut résumé
velero backup describe backup-production-20260219-143000
 
# Statut détaillé avec liste des erreurs éventuelles
velero backup describe backup-production-20260219-143000 --details
 
# Consulter les logs
velero backup logs backup-production-20260219-143000
États possibles :
  • New : backup créé mais pas encore démarré
  • InProgress : backup en cours
  • Completed : backup terminé avec succès
  • PartiallyFailed : backup terminé mais avec des erreurs non-bloquantes
  • Failed : backup échoué

Télécharger un backup localement

Terminal
# Télécharger les métadonnées et les ressources d'un backup
velero backup download backup-production-20260219-143000 \
  --output-dir ./backup-export/
 
# Cette commande télécharge :
# - backup-production-20260219-143000.tar.gz (ressources Kubernetes)
# - backup-production-20260219-143000-logs.gz (logs du backup)

Suppression de backups

Terminal
# Supprimer un backup unique
velero backup delete backup-production-20260219-143000
 
# Supprimer tous les backups expirés
velero backup delete --expired
 
# Supprimer tous les backups d'une schedule
velero backup delete --selector velero.io/schedule-name=daily-production --confirm

Opérations de restauration

Restauration complète

Restaurer un namespace complet

Terminal
# Restaurer un namespace depuis un backup
velero restore create restore-production-$(date +%Y%m%d-%H%M%S) \
  --from-backup backup-production-20260219-143000 \
  --wait
 
# Surveiller la progression
velero restore describe restore-production-20260219-143000 --details

Restaurer plusieurs namespaces

Terminal
# Restaurer plusieurs namespaces spécifiques
velero restore create restore-multi-ns-$(date +%Y%m%d-%H%M%S) \
  --from-backup backup-multi-ns-20260219-143000 \
  --include-namespaces production,staging

Restauration sélective

Restaurer uniquement certaines ressources

Terminal
# Restaurer uniquement les Deployments et Services
velero restore create restore-partial-$(date +%Y%m%d-%H%M%S) \
  --from-backup backup-production-20260219-143000 \
  --include-resources deployments,services \
  --include-namespaces production

Restaurer avec mapping de namespace

Terminal
# Restaurer dans un namespace différent (utile pour tests)
velero restore create restore-production-to-test-$(date +%Y%m%d-%H%M%S) \
  --from-backup backup-production-20260219-143000 \
  --namespace-mappings production:test-production
Cas d'usage :
  • Cloner un environnement de production vers staging
  • Tester une restauration sans impacter la production
  • Debugger un problème dans un environnement isolé

Restaurer par labels

Terminal
# Restaurer uniquement les ressources avec un label spécifique
velero restore create restore-webapp-$(date +%Y%m%d-%H%M%S) \
  --from-backup backup-production-20260219-143000 \
  --selector app=webapp,tier=frontend

Gestion des conflits

Par défaut, Velero ne restaure pas les ressources déjà existantes dans le cluster pour éviter les écrasements accidentels.

Forcer la restauration (écraser les ressources existantes)

Terminal
# Restaurer en écrasant les ressources existantes
velero restore create restore-force-$(date +%Y%m%d-%H%M%S) \
  --from-backup backup-production-20260219-143000 \
  --existing-resource-policy=update
Politiques disponibles :
  • none (défaut) : ignore les ressources existantes
  • update : met à jour les ressources existantes avec les données du backup

Surveiller les restaurations

Terminal
# Lister toutes les restaurations
velero restore get
 
# Détails d'une restauration
velero restore describe restore-production-20260219-143000
 
# Logs de restauration
velero restore logs restore-production-20260219-143000
États possibles :
  • New : restauration créée mais pas encore démarrée
  • InProgress : restauration en cours
  • Completed : restauration terminée avec succès
  • PartiallyFailed : restauration terminée mais avec des erreurs non-bloquantes
  • Failed : restauration échouée

Validation post-restauration

Après une restauration, vérifiez systématiquement l'état du cluster :

Terminal
# Vérifier les Pods du namespace restauré
kubectl get pods -n production
 
# Vérifier les événements récents
kubectl get events -n production --sort-by='.lastTimestamp'
 
# Vérifier les PVC et leur montage
kubectl get pvc -n production
kubectl describe pvc <pvc-name> -n production
 
# Tester la connectivité applicative
kubectl run test-curl --image=curlimages/curl:latest -it --rm -- sh
# Dans le pod : curl http://mon-service.production.svc.cluster.local

Bonnes pratiques

Stratégie de sauvegarde

Fréquence de sauvegarde recommandée

EnvironnementFréquenceRétentionJustification
ProductionQuotidienne (2h00)30 joursBalance entre protection et coût de stockage
StagingHebdomadaire14 joursEnvironnement moins critique
DéveloppementOptionnel7 joursDonnées facilement reconstituables

Sauvegardes avant maintenance

Effectuez toujours une sauvegarde immédiatement avant :

  • Mise à jour majeure d'une application
  • Modification de la configuration réseau ou stockage
  • Intervention sur l'infrastructure du cluster
  • Opération de migration ou de réorganisation
Terminal
# Backup pré-maintenance avec annotation
velero backup create pre-maintenance-$(date +%Y%m%d-%H%M%S) \
  --include-namespaces production \
  --labels maintenance=true,date=$(date +%Y%m%d)

Sécurité et confidentialité

Protection des Secrets

Les objets Secret Kubernetes sont sauvegardés par Velero. Pour une sécurité renforcée :

Terminal
# Exclure les Secrets de la sauvegarde (si géré par un vault externe)
velero backup create backup-no-secrets-$(date +%Y%m%d-%H%M%S) \
  --include-namespaces production \
  --exclude-resources secrets

Alternativement, utilisez une solution de gestion de secrets externe (HashiCorp Vault, Sealed Secrets, etc.) pour ne pas persister les secrets sensibles dans les backups.

Contrôle d'accès RBAC

Limitez l'accès aux opérations Velero via des RoleBindings Kubernetes :

rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: velero-operator
  namespace: production
subjects:
- kind: User
  name: ops-team@sdv.fr
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: velero-operator
  apiGroup: rbac.authorization.k8s.io

Tests de restauration

Fréquence de test recommandée

FréquenceType de testEnvironnement cible
MensuelRestauration complète d'un namespaceCluster de test dédié
TrimestrielDisaster Recovery completNouveau cluster temporaire
Avant migrationRestauration dans l'environnement cibleCluster destination

Procédure de test type

Terminal
# 1. Créer un namespace de test
kubectl create namespace test-restore-$(date +%Y%m%d)
 
# 2. Restaurer le backup dans ce namespace
velero restore create test-restore-$(date +%Y%m%d-%H%M%S) \
  --from-backup backup-production-20260219-143000 \
  --namespace-mappings production:test-restore-20260219
 
# 3. Valider le fonctionnement
kubectl get all -n test-restore-20260219
 
# 4. Nettoyer après validation
kubectl delete namespace test-restore-20260219

Monitoring et alerting

Vérification automatique des backups

Mettez en place un monitoring automatique pour détecter les échecs de backup :

Terminal
# Lister les backups en erreur
velero backup get | grep -E "Failed|PartiallyFailed"
 
# Vérifier qu'au moins un backup récent existe
velero backup get | grep "Completed" | head -1
Métriques à surveiller :
  • Statut du dernier backup (succès/échec)
  • Temps écoulé depuis le dernier backup réussi
  • Taille des backups (détection de dérives)
  • Durée d'exécution des backups (dégradation des performances)

Intégration avec Prometheus

Velero expose des métriques Prometheus accessibles via un ServiceMonitor :

servicemonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: velero
  namespace: velero
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: velero
  endpoints:
  - port: monitoring
    path: /metrics
Métriques clés :
  • velero_backup_total : nombre total de backups créés
  • velero_backup_success_total : nombre de backups réussis
  • velero_backup_failure_total : nombre de backups échoués
  • velero_backup_duration_seconds : durée des backups

Optimisation des performances

Accélérer les sauvegardes

Terminal
# Exclure les namespaces non-critiques
velero backup create backup-optimized-$(date +%Y%m%d-%H%M%S) \
  --include-namespaces production \
  --exclude-resources events,events.events.k8s.io
 
# Exclure les volumes temporaires
velero backup create backup-no-tmpfs-$(date +%Y%m%d-%H%M%S) \
  --include-namespaces production \
  --snapshot-volumes=false

Utiliser les annotations pour contrôler la sauvegarde des volumes persistants

pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: webapp
  namespace: production
  annotations:
    # Ignorer ce Pod dans les backups de volume persistant
    backup.velero.io/backup-volumes-excludes: cache-volume,tmp-volume
spec:
  containers:
  - name: webapp
    image: webapp:1.0
    volumeMounts:
    - name: data-volume
      mountPath: /data
    - name: cache-volume
      mountPath: /cache
  volumes:
  - name: data-volume
    persistentVolumeClaim:
      claimName: webapp-data
  - name: cache-volume
    emptyDir: {}

Rétention et nettoyage

Définir une politique de rétention

Terminal
# Schedule avec rétention de 30 jours
velero schedule create production-30d \
  --schedule="0 2 * * *" \
  --include-namespaces production \
  --ttl 720h0m0s
 
# Schedule avec rétention de 90 jours (backups mensuels)
velero schedule create production-monthly \
  --schedule="0 3 1 * *" \
  --include-namespaces production \
  --ttl 2160h0m0s

Nettoyage manuel

Terminal
# Supprimer les backups de plus de 60 jours
velero backup get -o json | jq -r '.items[] | select(.status.expiration < now) | .metadata.name' | xargs -I {} velero backup delete {}
 
# Supprimer tous les backups d'un namespace supprimé
velero backup delete --selector velero.io/namespace=ancien-namespace --confirm

Dépannage et résolution de problèmes

Problèmes courants

Backup bloqué en état InProgress

Symptômes :
Terminal
velero backup get
# NAME            STATUS        ...
# backup-prod     InProgress    ...
Diagnostic :
Terminal
# Vérifier les logs du backup
velero backup logs backup-prod
 
# Vérifier les Pods Velero
kubectl get pods -n velero
 
# Vérifier les logs du serveur Velero
kubectl logs -n velero deployment/velero -f
Solutions :
  • Vérifier la connectivité au backend S3
  • Vérifier les quotas de stockage
  • Redémarrer le serveur Velero si nécessaire : kubectl rollout restart deployment/velero -n velero

Échec de sauvegarde des volumes

Symptômes :
PartiallyFailed: some volumes failed to backup
Diagnostic :
Terminal
# Vérifier le status
velero repo get
 
# Vérifier les logs du DaemonSet
kubectl logs -n velero daemonset/node-agent -f
Solutions possibles :
  • Volume non compatible (ex: hostPath)
  • Permissions insuffisantes sur le volume
  • Ajouter l'annotation backup.velero.io/backup-volumes sur les Pods

Restauration partielle

Symptômes :
PartiallyFailed: some resources failed to restore
Diagnostic :
Terminal
# Afficher les erreurs détaillées
velero restore describe <restore-name> --details
 
# Vérifier les événements Kubernetes
kubectl get events -A --sort-by='.lastTimestamp' | grep -i error
Causes fréquentes :
  • StorageClass non disponible sur le cluster cible
  • CustomResourceDefinitions manquantes
  • Conflits de noms avec des ressources existantes
  • Quotas de ressources dépassés
Solutions :
  • Installer les CRDs manquantes avant la restauration
  • Utiliser --existing-resource-policy=update si approprié
  • Augmenter les quotas du namespace

Collecte d'informations pour le support

En cas de problème persistant, collectez les informations suivantes avant de contacter le support SdV :

Terminal
# Dump complet de la configuration Velero
kubectl get all -n velero -o yaml > velero-resources.yaml
 
# Logs du serveur Velero
kubectl logs -n velero deployment/velero --tail=500 > velero-server.log
 
# Logs node-agent
kubectl logs -n velero daemonset/node-agent --tail=500 --all-containers=true > node-agent.log
 
# Configuration du backend de stockage
velero backup-location get -o yaml > backup-locations.yaml
 
# Liste des backups et restaurations récentes
velero backup get > backups-list.txt
velero restore get > restores-list.txt

Ressources complémentaires

Documentation officielle

Pages liées

Support SdV

Pour toute question ou assistance sur la configuration avancée de Velero :

  • Email support technique : support@sdv.fr
  • Outil de requêtes : requete.sdv.fr
  • Hotline : Consultez votre documentation de livraison pour les coordonnées