Sauvegarder un cluster Managed Kubernetes OVHcloud avec Velero
Découvrez comment sauvegarder un cluster Managed Kubernetes OVHcloud avec Velero, y compris les volumes persistants
Objectif
Dans ce tutoriel, nous utilisons Velero pour sauvegarder et restaurer un cluster Managed Kubernetes OVHcloud.
Velero est un outil Open Source permettant de sauvegarder et restaurer en toute sécurité, d'effectuer une reprise après sinistre et de migrer les ressources d'un cluster Kubernetes.
Pour la sauvegarde de la configuration du cluster, nous utilisons le Swift Object Storage de notre Public Cloud avec l'API Swift S3 comme backend de stockage pour Velero. Velero utilise le protocole Amazon S3 pour stocker les sauvegardes du cluster sur un stockage objet compatible S31.
Pour la sauvegarde des volumes persistants, nous utilisons la prise en charge des snapshots CSI par Velero, qui permet à Velero de sauvegarder et de restaurer les volumes gérés par CSI via les API Kubernetes CSI Snapshot Beta.
Avant de commencer
Ce tutoriel suppose que vous disposez déjà d'un cluster Managed Kubernetes OVHcloud fonctionnel, ainsi que de connaissances de base sur son fonctionnement. Pour en savoir plus sur ces sujets, consultez la documentation Déployer une application Hello World.
En pratique
Créer le bucket Object Storage pour Velero
Velero a besoin d'un bucket compatible S3 comme backend de stockage pour stocker les données de votre cluster. Dans cette section, vous allez créer votre bucket S3 sur OVHcloud Object Storage.
Préparer votre environnement de travail
Avant de créer votre bucket Object Storage, vous devez :
Définir les variables d'environnement OpenStack
Vous devriez maintenant avoir accès à votre fichier RC OpenStack, avec un nom de fichier du type <user_name>-openrc.sh, ainsi qu'au nom d'utilisateur et au mot de passe de votre compte OpenStack.
Définissez les variables d'environnement en sourçant le fichier RC OpenStack :
Le shell vous demandera votre mot de passe OpenStack :
Créer les identifiants EC2
Les tokens Object Storage sont différents ; vous avez besoin de 2 paramètres (access et secret) pour générer un token Object Storage.
Ces identifiants seront stockés en toute sécurité dans Keystone. Pour les générer avec le client python-openstack :
Notez les paramètres access et secret :
Configurer le client awscli
Installez le client awscli :
Créez le fichier d'identifiants dans ~/.aws/credentials :
Où <AWS_ACCESS_KEY_ID> et <AWS_SECRET_ACCESS_KEY> sont les identifiants Object Storage access et secret générés à l'étape précédente.
Complétez et enregistrez la configuration dans ~/.aws/config :
Remplacez s3_region par la région Public Cloud sans les chiffres (par exemple : gra, sbg, bhs)
Vous pouvez tester votre configuration en exécutant cette commande :
Si votre fichier .aws/config ne contient qu'un seul profil, l'argument --profile default est facultatif.
Créer un bucket Object Storage pour Velero
Créez un nouveau bucket :
Assurez-vous que le nom de votre bucket est suffisamment spécifique, sous peine d'obtenir une erreur BucketAlreadyExists, car les noms de bucket doivent être uniques parmi tous les utilisateurs S3.
Listez vos buckets :
Installer Velero
Nous vous recommandons fortement d'utiliser une release officielle de Velero. Les archives tar de chaque release contiennent le client en ligne de commande velero. Décompressez l'archive et ajoutez-la à votre PATH.
Installez Velero, y compris tous les prérequis, dans le cluster et démarrez le déploiement. Cela créera un namespace nommé velero, et y placera un déploiement nommé velero.
Exemple pour velero v1.16.2 :
Remplacez s3_region par la région Public Cloud sans les chiffres (par exemple : gra, sbg, bhs).
Depuis la version 1.14, le plugin-for-csi est intégré à Velero. Pour mettre à niveau une version plus ancienne, suivez les notes de mise à niveau : Upgrade-to-1.14. Consultez ces liens pour vérifier la compatibilité des plugins de Velero : velero-plugin-for-aws et velero-plugin-for-csi.
Pour permettre à Velero de réaliser des Volume Snapshots, nous devons déployer une nouvelle VolumeSnapshotClass.
Créez un fichier velero-snapclass.yaml avec le contenu suivant :
Appliquez la nouvelle classe :
Dans notre exemple, le résultat ressemble à ceci :
Vérifier que Velero fonctionne sans volumes persistants
Pour vérifier que Velero fonctionne correctement, testons avec un exemple de déploiement :
Copiez le code suivant dans un fichier nginx-example-without-pv.yml :
Déployez-le sur votre cluster :
Vérifiez que les Pods ont bien été créés :
Créez une sauvegarde du namespace :
Depuis Velero 1.14, les CSI VolumeSnapshots sont utilisés par défaut pour les volumes persistants. Le flag --snapshot-move-data n'est plus nécessaire pour les volumes gérés par CSI et peut être omis sans risque. Il n'est requis que pour les volumes non-CSI sauvegardés avec Restic.
Vérifiez que la sauvegarde est terminée :
Attendez que le statut soit égal à Completed.
Simulez un sinistre :
Restaurez le namespace supprimé :
Vérifiez que la restauration s'est bien déroulée :
Vous pouvez constater que les ressources ont bien été recréées comme attendu :
Avant de continuer, nettoyez le namespace nginx-example :
Vérifier que Velero fonctionne avec des volumes persistants
Node Agents (Restic) : les node agents sont principalement utilisés pour les sauvegardes au niveau fichier ou pour les volumes persistants qui ne sont pas gérés par CSI.
Pour les volumes persistants gérés via CSI (comme avec le Managed Kubernetes OVHcloud), les CSI VolumeSnapshots constituent la méthode recommandée. Dans ce cas, il n'est pas nécessaire de déployer de Node Agents, car les sauvegardes et restaurations sont gérées nativement par le mécanisme de snapshot CSI.
Pour vérifier que Velero fonctionne correctement avec les Volume Snapshots des volumes persistants, testons avec un exemple de déploiement :
Copiez le code suivant dans un fichier nginx-example-with-pv.yml :
Portez attention à la partie déploiement de ce manifeste : vous verrez que nous avons défini un .spec.strategy.type. Il spécifie la stratégie utilisée pour remplacer les anciens Pods par de nouveaux, et nous l'avons défini sur Recreate, afin que tous les Pods existants soient supprimés avant que de nouveaux ne soient créés.
Nous procédons ainsi car la Storage Class que nous utilisons, csi-cinder-high-speed, ne prend en charge que le mode ReadWriteOnce : nous ne pouvons donc avoir qu'un seul pod écrivant sur le volume persistant à un instant donné.
Déployez-le sur le cluster :
Créez un fichier index.html :
Vérifiez que le serveur web répond comme attendu :
Nous pouvons maintenant demander à velero de réaliser la sauvegarde du namespace :
Rappel : --snapshot-move-data n'est pas nécessaire pour les volumes gérés par CSI. Il a été retiré de la commande ci-dessous.
Vérifiez que la sauvegarde s'est terminée avec succès :
Décrivez la sauvegarde pour confirmer que les volumesnapshots CSI ont bien été inclus dans la sauvegarde :
Simulez un sinistre :
Restaurez le namespace supprimé :
Vérifiez que la restauration s'est bien déroulée :
Vérifiez que le serveur web répond comme attendu :
Le contenu du fichier a bien été restauré !
Planifier des sauvegardes avec Velero
Avec Velero, vous pouvez planifier des sauvegardes régulières, une bonne solution pour la reprise après sinistre.
Dans ce guide, vous allez créer une ressource Velero schedule qui créera des sauvegardes régulières.
Copiez le code suivant dans un fichier schedule.yml :
Appliquez-le sur le cluster :
Vérifiez que la planification a bien été créée :
Attendez quelques minutes et vérifiez qu'une sauvegarde a été créée automatiquement :
Vous devriez obtenir un résultat comme celui-ci :
Suppression (nettoyage)
Nettoyez le namespace nginx-example :
Nettoyez la planification velero :
Nettoyez les sauvegardes velero existantes :
Aller plus loin
Vous disposez maintenant d'un Velero fonctionnel sur votre cluster.
Consultez la documentation officielle de Velero pour apprendre à l'utiliser, notamment la planification des sauvegardes, l'utilisation des hooks pre- et post-backup, et d'autres sujets.
- Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.
Échangez avec notre communauté d'utilisateurs.
1 : S3 est une marque déposée appartenant à Amazon Technologies, Inc. Les services de OVHcloud ne sont pas sponsorisés, approuvés, ou affiliés de quelque manière que ce soit.