Velero est un outil open source pour sauvegarder et restaurer en toute sécurité, effectuer une reprise après sinistre et migrer les ressources du cluster Kubernetes et les volumes persistants. Velero se compose d’un processus serveur fonctionnant comme un déploiement dans votre cluster Kubernetes et d’une interface en ligne de commande (CLI) avec laquelle les équipes DevOps et les opérateurs de plate-forme configurent les sauvegardes planifiées, déclenchent des sauvegardes ponctuelles, effectuent des restaurations, et plus encore.
Contrairement aux autres outils qui accèdent directement à la base de données Kubernetes etcd pour effectuer des sauvegardes et des restaurations, Velero utilise l’API Kubernetes pour capturer l’état des ressources du cluster et les restaurer si nécessaire. Cette approche axée sur les API présente un certain nombre d’avantages clés :
Les sauvegardes peuvent capturer des sous-ensembles de ressources du cluster, filtrant par espace de noms, type de ressource et/ou sélecteur d’étiquettes, offrant un haut degré de flexibilité autour de ce qui est sauvegardé et restauré.
Les ressources exposées par les serveurs API agrégés peuvent facilement être sauvegardées et restaurées, même si elles sont stockées dans une base de données distincte.
Cette fiche pratique vous est délivrée pour information uniquement, Velero n’est pas un composant obligatoire. Vous êtes totalement libre d’utiliser n’importe quel autre outil. Aucun support ne sera délivré sur Velero.
Prérequis
Un bucket compatible S3 accessible par le cluster pour que velero y stocke les données de sauvegarde.
D’autres type de stockage sont compatibles, la liste se trouve ici : https://velero.io/docs/v1.6/supported-providers/
A des fins de tests, vous pouvez déployer un server minio pour agir comme un stockage objet.
Installation
Outil ligne de commande
Velero est géré par un outil de ligne de commande installé sur votre machine d’administration. L’outil utilise la configuration kubectl actuelle pour se connecter au cluster kubernetes pour faire une sauvegarde, créer une plannification et restaurer
Avant de commencer les binaires de velero doivent être téléchargés depuis le site de VMware. Un compte gratuit sera requis.
Même si dans le nom de variable il est spécifié le terme AWS, il faut savoir que Velero est compatible avec d’autres providers, il s’agit juste d’un nom de variable qu’il faut utiliser. La liste des providers est disponible ici https://velero.io/docs/v1.6/supported-providers/ A des fins de test, il est possible de déployer assez simplement un serveur minio pour agir comme un stockage S3.
I0324 09:15:17.781299 2971533 request.go:655] Throttling request took 1.110498807s, request: GET:https://100.101.250.5:6443/apis/policy/v1?timeout=32s CustomResourceDefinition/backups.velero.io: attempting to create resource CustomResourceDefinition/backups.velero.io: attempting to create resource client CustomResourceDefinition/backups.velero.io: created CustomResourceDefinition/backupstoragelocations.velero.io: attempting to create resource CustomResourceDefinition/backupstoragelocations.velero.io: attempting to create resource client CustomResourceDefinition/backupstoragelocations.velero.io: created CustomResourceDefinition/deletebackuprequests.velero.io: attempting to create resource CustomResourceDefinition/deletebackuprequests.velero.io: attempting to create resource client CustomResourceDefinition/deletebackuprequests.velero.io: created CustomResourceDefinition/downloadrequests.velero.io: attempting to create resource CustomResourceDefinition/downloadrequests.velero.io: attempting to create resource client CustomResourceDefinition/downloadrequests.velero.io: created CustomResourceDefinition/podvolumebackups.velero.io: attempting to create resource CustomResourceDefinition/podvolumebackups.velero.io: attempting to create resource client CustomResourceDefinition/podvolumebackups.velero.io: created CustomResourceDefinition/podvolumerestores.velero.io: attempting to create resource CustomResourceDefinition/podvolumerestores.velero.io: attempting to create resource client CustomResourceDefinition/podvolumerestores.velero.io: created CustomResourceDefinition/resticrepositories.velero.io: attempting to create resource CustomResourceDefinition/resticrepositories.velero.io: attempting to create resource client CustomResourceDefinition/resticrepositories.velero.io: created CustomResourceDefinition/restores.velero.io: attempting to create resource CustomResourceDefinition/restores.velero.io: attempting to create resource client CustomResourceDefinition/restores.velero.io: created CustomResourceDefinition/schedules.velero.io: attempting to create resource CustomResourceDefinition/schedules.velero.io: attempting to create resource client CustomResourceDefinition/schedules.velero.io: created CustomResourceDefinition/serverstatusrequests.velero.io: attempting to create resource CustomResourceDefinition/serverstatusrequests.velero.io: attempting to create resource client CustomResourceDefinition/serverstatusrequests.velero.io: created CustomResourceDefinition/volumesnapshotlocations.velero.io: attempting to create resource CustomResourceDefinition/volumesnapshotlocations.velero.io: attempting to create resource client CustomResourceDefinition/volumesnapshotlocations.velero.io: created Waiting for resources to be ready in cluster... Namespace/velero: attempting to create resource Namespace/velero: attempting to create resource client Namespace/velero: created ClusterRoleBinding/velero: attempting to create resource ClusterRoleBinding/velero: attempting to create resource client ClusterRoleBinding/velero: created ServiceAccount/velero: attempting to create resource ServiceAccount/velero: attempting to create resource client ServiceAccount/velero: created Secret/cloud-credentials: attempting to create resource Secret/cloud-credentials: attempting to create resource client Secret/cloud-credentials: created BackupStorageLocation/default: attempting to create resource BackupStorageLocation/default: attempting to create resource client BackupStorageLocation/default: created VolumeSnapshotLocation/default: attempting to create resource VolumeSnapshotLocation/default: attempting to create resource client VolumeSnapshotLocation/default: created Deployment/velero: attempting to create resource Deployment/velero: attempting to create resource client Deployment/velero: created Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero' to view the status.
Sauvegarde
Pour plus d’informations, il est recommandé de se reporter à la documentation officielle : https://velero.io/docs
Il est aussi possible de filtrer les éléments à restaurer en utilisant des filtres pendant la restauration (–include-namespaces, –selector)…
Sauvegarder et Restaurer un cluster de management
Il est possible de sauvegarder et restaurer un cluster de management avec velero, la CustomResourceDefination sera sauvegardée et restaurée via l’API Kubernetes.
Afin de ne pas recréer des ressources en doublons vous pouvez ignorer les namespaces suivants : capi-kubeadm-bootstrap-system, capi-kubeadm-control-plane-system, capi-system, capvcd-system
Avant de lancer une sauvegarde, il est recommandé de mettre le cluster de management en pause afin d’avoir une sauvegarde cohérente et éviter les modifications pendant la sauvegarde.
/!\ Il n’y a aucun impact sur vos clusters de travail.