K3S/Velero - A (long) way to DevSecOps - Épisode 6

K3S/Velero - A (long) way to DevSecOps - Épisode 6

Rappel de la saga : A long way to DevSecOps : Épisode 1, Épisode 2, Épisode 3, Épisode 4, Épisode 5, Épisode 6, Épisode 7, Épisode 8.

Edit 23/07/2020 : Remplacement de « local-path », par un nouveau provisionner de stockage (OpenEBS) qui supporte bien Velero. Un PR a été soumis, et apportera prochainement le support du stockage par défaut de K3S.

Le projet Velero

Historique

Le projet Velero naît sous le nom de « Ark » sous contrôle de l’entreprise Heptio. En 2018 alors que VMWare se rend compte de l’ampleur des technologies Kubernetes, l’entreprise décide d’absorber des compétences pour rattraper son retard sur ces technologies « Cloud-Native ». Il suffit de checker la page Wikipédia de VMWare pour se rendre compte de l’effort accordé aux technos Cloud, et le résultat qu’est aujourd’hui l’offre mature de PKS :

Velero est donc aujourd’hui sous contrôle de VMWare et l’offre « open source » de VMWare se retrouve sous le nom de VMWare Tanzu. On y retrouve Velero toujours librement accessible.

Fonctionnement

Bon, je ne vais pas refaire une nième description de ce logiciel. En gros Velero va sauvegarder tous les éléments permettant de restaurer une application. Une petite démo sympathique se trouve ici.

La sauvegarde des éléments constituant une application peut-être effectuée sur un stockage compatible AWS, c’est ici que l’on va utiliser Minio.

Projet démo

Depuis les dernières releases, il y a un petit projet démo qui est inclus dans Velero. Nous n’allons pas l’utiliser mais il y a toutes les ressources nécessaires pour comprendre rapidement le fonctionnement de Velero.

Installation et utilisation

Installation d’OpenEBS

Avec Helm c’est simple :

helm repo add openebs https://openebs.github.io/charts
helm repo update
helm install --namespace openebs --name openebs openebs/openebs

Installation de Minio

Il est possible d’installer Minio directement sur le cluster Kubernetes. Dans mon cas je l’ai installé ailleurs, pour déporter la sauvegarde en dehors du cluster (disaster recovery). Dans le projet de démo il y a le fichier Manifest nécessaire pour déployer Minio.

Installation de Velero

Ici tout se passe en une ligne de commande. Il faut néanmoins préparer le fichier permettant de se connecter à Minio. Fichier exemple (secrets) :

[default]
aws_access_key_id = accessid
aws_secret_access_key = secretpassword

Il suffit de lancer la commande velero disponible dans la release de votre choix (auparavant il faut créer un bucket sur votre Minio – ici le nom est velero, et d’avoir l’URL de votre Minio – remplacer anywhere.com) :

velero install --provider aws --bucket velero --secret-file secrets --use-volume-snapshots=false --use-restic --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=https://anywhere.com,publicUrl=https://anywhere.com --plugins velero/velero-plugin-for-aws:v1.0.0

La commande velero va pouvoir être utilisée par la suite pour gérer les sauvegardes (elle va se connecter automatiquement sur les APIs de l’application nouvellement déployée sur votre K8S).

Vous pouvez déjà vérifier l’état de santé de votre déploiement avec cette commande :

kubectl get deployments/velero -n velero

Le résultat attendu :

NAME     READY   UP-TO-DATE   AVAILABLE   AGE
velero   1/1     1            1           1h

Utilisation de Velero

J’ai déployé rapidement un Prometheus/Grafana sur mon infra K3S, on va le sauvegarder, le détruire puis le restaurer.

Monitoring

Voir l’épisode précédent.

Attention : il faut customiser le déploiement en utilisant « openebs-hostpath » en tant que StorageClass.

Visualisation du fonctionnement de Grafana

Sauvegarde du namespace Monitoring

Annotation des volumes de stockage (propre à mon déploiement) :

kubectl -n monitoring annotate pod/prometheus-server-596d96465b-lxnnc  backup.velero.io/backup-volumes=storage-volume
kubectl -n monitoring annotate pod/prometheus-alertmanager-644cf8f47c-bf5b4 backup.velero.io/backup-volumes=storage-volume
kubectl -n monitoring annotate pod/grafana-7fb88c95b7-lxzb2 backup.velero.io/backup-volumes=storage

Attention, ne faites comme moi ce n’est pas le nom du PVC qu’il faut mettre mais bien le volume que l’on obtient avec un petit « describe ».

velero backup create monitoring-save --include-namespaces monitoring

Vérification de la sauvegarde

# velero get backup

Visualisation dans Minio

Destruction de l’application

kubectl delete namespace monitoring

Vérification du statut

# kubectl get all -n monitoring
No resources found in monitoring namespace.

Restauration de l’application

velero restore create monitoring-restore --from-backup monitoring-save

Vérification du statut

# velero restore get
NAME                 BACKUP            STATUS      ERRORS   WARNINGS   CREATED                          SELECTOR
monitoring-restore   monitoring-save   Completed   0        0          2020-07-23 11:56:40 +0200 CEST   <none>

Tout est bien restauré et l’application est de retour, et on voit bien le petit temps d’indisponibilité sur la supervision :

Bonus

Politique de sauvegarde

Il est possible via la commande velero de programmer (scheduler :-p) des sauvegardes périodiques.

Toutes les heures avec un maximum d’une journée :

velero schedule create monitoring-hourly --schedule="@every 1h" --ttl 24h0m0s --include-namespaces monitoring

Tous les jours avec un maximum d’une semaine :

velero schedule create monitoring-daily --schedule="@every 24h" --ttl 168h0m0s --include-namespaces monitoring

Conclusion

Nous avons vu depuis le début de cette suite d’articles comment :

  • installer K3S,
  • déployer un provisionner de stockage (NFS ou vous pouvez utiliser Longhorn, comme je suis retourné sur un master node only, je vais utiliser OpenEBS),
  • superviser rapidement le cluster avec une solution de monitoring,
  • déployer ses premières applications (WordPress / Portainer),
  • les sauvegarder et les restaurer et mettre en place une politique de sauvegarde.

C’est déjà une bonne base d’un point de vue infra, il faudra voir ce que l’on veut approfondir par la suite, plus d’un point vue DevOps. Si vous avez des commentaires, des compléments, n’hésitez pas : ici ou sur Twitter, c’est permis !!! Kenavo.