L’utilisation de Kubernetes est surtout dirigée vers le déploiement d’applications stateless, c’est-à-dire sans stockage persistant.
Mais de plus en plus Kubernetes est utilisé pour des applications stateful, avec stockage persistant de données critiques.
Même si les données sont réparties sur des volumes redondés et séparés, cela ne nous protège pas d’un sinistre majeur. C’est là qu’intervient le besoin de sauvegarder nos données.
Velero est un outil open source de VMware sous licence Apache, il est membre sandbox de la CNCF, disponible depuis Août 2017. Il permet de sauvegarder et de restaurer en toute sécurité, d’effectuer un Disaster Recovery et de migrer les ressources des clusters Kubernetes et les volumes persistants.
Velero est un outil de sauvegarde qui ne se contente pas de sauvegarder les volumes persistants (PV Kubernetes) : il permet de sauvegarder la totalité de son cluster (pods, services, volumes…) avec tout un système de filtres par labels ou objets Kubernetes.
Il fonctionne aussi bien sur site que dans un cloud public. Velero se compose d’un processus serveur exécuté en tant que déploiement dans votre cluster Kubernetes et d’une interface de ligne de commande (CLI) avec laquelle les équipes DevOps et les opérateurs de plateforme configurent des sauvegardes programmées, déclenchent des sauvegardes ponctuelles, effectuent des restaurations, etc.
Velero est idéal pour la reprise après sinistre, ainsi que pour l’instantanéisation de l’état de votre application, avant d’effectuer des opérations systèmes critiques sur votre cluster, comme des mises à niveau.
Chaque opération de Velero on-demand backup, scheduled backup, restore est une ressource personnalisée, définie avec une définition de ressource personnalisée Kubernetes (CRD) et stockée dans etcd.
Velero comprend également des contrôleurs qui traitent les ressources personnalisées pour effectuer des sauvegardes, des restaurations et toutes les opérations connexes.
Vous pouvez sauvegarder ou restaurer tous les objets de votre cluster, ou vous pouvez filtrer les objets par type, namespaces et/ou label.
En quoi Velero se distingue-t-il ?
Contrairement aux autres outils qui accèdent directement à la base de données etcd de Kubernetes pour effectuer des sauvegardes et des restaurations, Velero utilise l’API de Kubernetes pour capturer l’état des ressources du cluster et les restaurer si nécessaire. Cette approche basée sur l’API présente un certain nombre d’avantages essentiels :
Les sauvegardes peuvent capturer des sous-ensembles de ressources du cluster, en filtrant par espace de noms, type de ressource et/ou sélecteur d’étiquette, ce qui offre un haut degré de flexibilité autour de ce qui est sauvegardé et restauré.
Velero inclut tous les objets dans une sauvegarde ou une restauration lorsqu’aucune option de filtrage n’est utilisée.
Exemple de filtrage:
| Option | Description |
|---|---|
--include-namespaces mon-namespace |
Pour un backup restreint à un namespace. |
--include-resources deployments |
On ne backup que les Deployments. |
--include-cluster-resources=false |
Les ressources scopées au cluster ne sont pas incluses. |
--selector <key>=<value> |
On peut filtrer sur un label en particulier. |
--exclude-namespaces kube-system |
Le namespace kube-system est exclus du backup. |
--exclude-resources secrets,rolebindings |
Les Secrets et les Rolebidings sont exclus |
Les ressources avec le label Velero.io/exclude-from-backup=true ne sont pas incluses dans les backups Velero
Velero traite le stockage d’objets comme la source de vérité. Il vérifie en permanence que les ressources de sauvegarde correctes sont toujours présentes.
S’il existe un fichier de sauvegarde dans le bucket de stockage, mais aucune ressource correspondante dans l’API Kubernetes, Velero synchronise les informations du stockage d’objets vers Kubernetes.
Cela permet à la fonctionnalité de restauration de fonctionner dans un scénario de migration de cluster, où les objets de sauvegarde originaux n’existent pas dans le nouveau cluster.
De même, si un objet de sauvegarde existe dans Kubernetes mais pas dans le stockage d’objets, il sera supprimé de Kubernetes puisque la sauvegarde n’existe plus.
Velero peut stocker des sauvegardes dans un certain nombre d’emplacements. Ceux-ci sont représentés dans le cluster via le CRD BackupStorageLocation. Velero supporte les principaux providers pour le stockage, vous pouvez retrouver la liste sur cette page.
Get Les Filles et Les Garçons de la Tech’s stories in your inbox
Join Medium for free to get updates from this writer.
Velero nécessite au moins un BackupStorageLocation par défaut, mais peut en définir plusieurs qui pourront être sélectionnés lors de la création des backups.
Un backup ne peut avoir pour l’instant qu’un seul BackupStorageLocation.
VolumeSnapshotLocation
Velero peut aussi faire des instantanés de volumes persistants.
Un VolumeSnapshotLocation est l’emplacement dans lequel sont stockés les snapshot de volume créés pour une sauvegarde. La liste des providers supportée se retrouve sur cette page.
Il n’est pas nécessaire d’avoir un VolumeSnapshotLocation par défaut, on peut en créer plusieurs, mais un snapshot ne peut avoir pour l’instant qu’un seul VolumeSnapshotLocation.
Lors de l’installation on va définir principalement :
La configuration de ces objets est relative au provider utiliser pour le stockage.
Créer un fichier portant les credentials :
backup-credentials
default:
aws_access_key_id: Your_Access_Key
aws_secret_access_key: Your_Secret_Key
helm install Velero vmware-tanzu/Velero \
— namespace <YOUR NAMESPACE> \
— create-namespace \
— set-file credentials.secretContents.cloud=<FULL PATH TO FILE> \
— set configuration.provider=<PROVIDER NAME> \# Définition de la backupStorageLocation par défaut
— set configuration.backupStorageLocation.name=<BACKUP STORAGE LOCATION NAME> \
— set configuration.backupStorageLocation.bucket=<BUCKET NAME> \
— set configuration.backupStorageLocation.config.region=<REGION> \# Définition de la volumeSnapshotLocation par défaut
— set configuration.volumeSnapshotLocation.name=<VOLUME SNAPSHOT LOCATION NAME> \
— set configuration.volumeSnapshotLocation.config.region=<REGION> \
— set initContainers[0].name=Velero-plugin-for-<PROVIDER NAME> \
— set initContainers[0].image=Velero/Velero-plugin-for-<PROVIDER NAME>:<PROVIDER PLUGIN TAG> \
— set initContainers[0].volumeMounts[0].mountPath=/target \
— set initContainers[0].volumeMounts[0].name=plugins
On peut créer une sauvegarde unique ponctuelle via un objet backup, CRD fourni par Velero.
backup.yaml:
apiVersion: Velero.io/v1
kind: Backup
metadata:
name: mon-app-backup
namespace: Velero # namespace où Velero est installé
spec:
includedNamespaces:
— mon-namespace
ttl: 24h0m0s # par défaut 720h0m0s
storageLocation: default # backupStoragelocation
volumeSnapshotLocations:
— default
On peut également programmer une sauvegarde sur une fréquence donnée.
scheduled-backup.yaml:
apiVersion: Velero.io/v1
kind: Schedule
metadata:
name: mon-app-scheduled-backup
namespace: Velero
spec:
schedule: ‘@every 24h’
template:
includedNamespaces:
— mon-app
ttl: 168h # Le backup sera conservé une semaine
On peut ensuite utiliser le client Velero pour restaurer une sauvegarde suite à un problème.
NB : Mettre votre backupStorageLocation en mode ReadOnly pour éviter la création ou la suppression d’objets de sauvegarde dans le backupStorageLocation pendant le processus de restauration
kubectl patch backupstoragelocation <STORAGE LOCATION NAME> \
— namespace Velero \
— type merge \
— patch ‘{“spec”:{“accessMode”:”ReadOnly”}}’
On lance la restauration à partir d’un backup sain:
Velero restore create — from-backup <SCHEDULE NAME>-<TIMESTAMP>
On peut monitorer l’état de la restauration avec les commandes suivantes:
velero restore get
Donne une description :
velero restore describe <RESTORE_NAME>
Affiche les logs :
velero restore logs <RESTORE_NAME>
NB : Remettre le backupStorageLocation en mode ReadWrite
kubectl patch backupstoragelocation <STORAGE LOCATION NAME> \
— namespace Velero \
— type merge \
— patch ‘{“spec”:{“accessMode”:”ReadWrite”}}’
Velero est simple à mettre en place, peut s’adapter aux solutions majeures de stockage.
Velero apporte une sécurité importante pour la partie stateful de vos clusters et même pour tout votre cluster, une solution efficace pour vos stratégies de reprise après incident.
INFO : Voir cet article complet