SlideShare ist ein Scribd-Unternehmen logo
1 von 84
Marvelous March
Les 4 Filles et Garçons du Dr March
2023/02/02
Un Grand Merci A
Velero: sauvegardez et restaurez (proprement)
vos applications Kubernetes
Rémi Verchère @ Accenture
Avant-propos
Je ne suis pas expert backup, je ne suis là par pur altruisme
C'est probablement la dernière fois que je fais cette présentation en public On
est entre nous, je risque de lancer quelques trolls
Surtout après les échanges sur Twitter ce week-end
Pas de live coding, que du REX
Au sommaire
Présentation de l'outil
Utilisation en prod, gestion des données, etc..
Exemple de migration
Des fails, parce que vous aimez ça
Qui suis-je ?
Rémi Verchère
Cloud Native Infrastructure Consultant
Ops qui aime bien les Devs
Papa x
Certified Kubernetes
{Associate,Dev,Admin,Security}
@rverchere
https://presentations.verchere.fr/
Backup, Kubernetes ?
Backup & Kubernetes
Pourquoi ?
Conteneurs Stateless
Manifest YAML facilement redéployables
CI/CD
GitOps
Boucle de réconciliation
kubectl apply || crictl run et c'est réglé ^^
Plein d'autres raisons approximatives...
Backup & Kubernetes
Parce que, des fois, dans la vraie vie...
Conteneurs Statefull
Migration & Protection des données
Reprise après sinistre
Ressources en prod pas "exactement" les mêmes
L'erreur est humaine
$ kubectl delete namespace la-prod
Backup & Kubernetes
Velero - Généralités
Un peu d'histoire
Heptio Ark, "open-sourcé" mi 2017
Société rachetée par VMware fin 2018
Intégré à l'offre Tanzu (TMC)
Actuellement en version 1.10.1 (2023-02-06)
$ git log --reverse
commit 2fe501f527a88ea292ca3dde80992ec60b388dda
Author: Andy Goldstein <andy.goldstein@gmail.com>
Date: Wed Aug 2 13:27:17 2017 -0400
Velero - Généralités
Fonctionnalités principales
Sauvegarde des ressources d'un cluster et les restaure en cas de perte.
Migration, Réplication des ressources d'un cluster à un autre.
Custom Ressources qui définissent quoi sauvegarder, comment et quand (selector,
schedule)
Composants
Serveur (Controller) qui tourne sur votre cluster
Client en ligne de commande qui s'exécute localement
https://velero.io/docs/main/index.html
Velero - Architecture
https://docs.ondat.io/docs/usecases/velero-backups/
Velero - Installation
Cluster: Chart Helm
$ helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts && helm repo update
$ helm install velero vmware-tanzu/velero --create-namespace -n velero
Release "velero" has been installed. Happy Helming!
Poste client: CLI
$ asdf plugin add velero && asdf install velero 1.10.1 && asdf global velero 1.10.1
$ velero version
Client:
Version: v1.10.1
Git commit: 948b3790d5577dc7e77410a8b80ef7d8a6b00303
Server:
Version: v1.10.1
Aurélie Vache - Understanding Kubernetes in a visual way
Aurélie Vache - Understanding Kubernetes in a visual way
Mise en situation : la prod
Il était une fois la prod "de confiance"
Contexte
Plusieurs clusters Kubernetes managés OVHcloud
Storage object Openstack Swift & block Cinder
Applications hétérogènes
Outils de gestion d'infra majoritairement Open Source
Besoin de Backup :
Sur stockage S3, loin
Réplication des applications sur cluster de test
Possibilité de PRA sur un autre cloud provider
Exemple d'application
Nextcloud
Chart Helm
1 déploiement de l'application 1
base Mariadb
1 cache Redis (master / replicas)
Ingress, Cronjobs, etc.
https://github.com/nextcloud/helm
Exemple d'application
Nextcloud
$ kubectl get deployment,statefulset,cronjob,service,ingress
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nextcloud 1/1 1 1 28d
NAME READY AGE
statefulset.apps/nextcloud-mariadb 1/1 28d
statefulset.apps/nextcloud-redis-master 1/1 28d
statefulset.apps/nextcloud-redis-replicas 1/1 28d
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/nextcloud-cron */15 * * * *
F
alse
0 62s 28d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nextcloud ClusterIP 10.3.124.75 <none> 8080/TCP 28d
service/nextcloud-mariadb ClusterIP 10.3.145.33 <none> 3306/TCP 28d
service/nextcloud-redis-headless ClusterIP None <none> 6379/TCP 28d
service/nextcloud-redis-master ClusterIP 10.3.207.110 <none> 6379/TCP 28d
service/nextcloud-redis-replicas ClusterIP 10.3.249.214 <none> 6379/TCP 28d
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/nextcloud <none> nextcloud.demo.vrchr.fr ip-135-125-84-204.gra.lb.ovh.net 80, 443 28d
Backup & Restore, l'aventure...
Velero - Première fois
1er backup
$ velero backup create nextcloud-backup-1 --include-namespaces nextcloud
$ velero backup describe nextcloud-backup-1
nextcloud-backup-1
velero
Name:
Namespace:
[...]
Phase:
Comple
ted
Errors: 0
Warnings:
[...]
0
Total items to be backed up: 200
Items backed up:
[...]
200
Velero - Première fois
1er restore
$ velero restore create nextcloud-restore-1 --from-backup nextcloud-backup-1
$ velero restore nextcloud-restore-1
Name: nextcloud-restore-1
Namespace:velero
Labels: <none>
Annotations:
<none>
Phase: Completed
Total items to be restored:
200 Items restored:
200
Velero - Première fois
1er fail
“ Objets kubernetes sauvés, données
sacrifiées
!
“
Velero Snapshots, Backups, Restore
Volumes Persistants
Velero - Sauvegarde des données
Objects Kubernetes
Les objets kubernetes sont exportés sur bucket S3
Données persistantes : 2x2 possibilités
1. Snapshots des Persistent Volumes (PV)
via API du Cloud Provider
via CSI (>= version 1.4). Compatibilité Cloud Provider (Cinder: )
3. Export des volumes montés par les pods : File System Backup FSB (Swift:
) via Restic
via Kopia (>= version 1.10)
Velero - Snapshot PV via CSI
Velero - Snapshot PV via CSI
Activation avec chart Helm
Sous réserve que votre CSI le supporte : --features=EnableCSI
# $ helm get values velero
snapshotsEnabled: true
[...]
configuration:
[...]
features: EnableCSI
[...]
initContainers:
- name: velero-plugin-for-csi
image: velero/velero-plugin-for-
csi:v0.4.0 volumeMounts:
- mountPath: /target
name: plugins
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
daily-s3-20220920000000 Failed 0 0 2022-09-20 02:00:00 +0200 CEST
1d
velero-gra9 <none>
daily-s3-20220916000004 Completed 0 0 2022-09-16 02:00:04 +0200 CEST
1d
velero-gra9 <none>
daily-s3-20220915000003 Completed 0 0 2022-09-15 02:00:03 +0200 CEST
5h
velero-gra9 <none>
daily-snapshot-20220920010027 Failed 0 0 2022-09-20 03:00:27 +0200 CEST
1d
velero-gra9 <none>
daily-snapshot-20220915010003 Completed 0 0 2022-09-15 03:00:03 +0200 CEST
6h
velero-gra9 <none>
Velero - Snapshot PV via CSI
J'ai testé pour vous
$ kubectl logs -f velero-5b86bc8db-5p8md
time="2022-10-03T19:32:22Z" level=info msg="Waiting for volumesnapshotcontents
snapcontent-bc5660db-b0a4-4cc5-98cb-a071d5473dcb to have snapshot handle. Retrying in 5s" [...]
time="2022-10-03T19:32:27Z" level=info msg="Waiting for volumesnapshotcontents
snapcontent-bc5660db-b0a4-4cc5-98cb-a071d5473dcb to have snapshot handle. Retrying in 5s" [...]
$ velero backup
get NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
daily-s3-20221004182135 Completed 0 0 2022-10-04 20:21:35 +0200 CEST 1d velero-gra9 <none>
daily-s3-20221004181435 Completed 0 0 2022-10-04 20:14:35 +0200 CEST 1d velero-gra9 <none>
[...]
daily-snapshot-20221004190535 Completed 0 0 2022-10-04 21:05:35 +0200 CEST 1d velero-gra9 <none>
daily-snapshot-20221004190035 Completed 0 0 2022-10-04 21:00:35 +0200 CEST 1d velero-gra9 <none>
daily-snapshot-20221004185535 Completed 0 0 2022-10-04 20:55:35 +0200 CEST 1d velero-gra9 <none>
daily-snapshot-20221004185035 Completed 0 0 2022-10-04 20:50:35 +0200 CEST 1d velero-gra9 <none>
[...]
Velero - Snapshot PV via CSI
J'ai insisté, avec les équipes du CSP
Aux limites configurées côté storage provider
N'est pas considéré comme stockage pérenne
Velero - Backup via File System Backup (FSB)
Velero - Backup via FSB (Restic)
Activation avec chart Helm
# $ helm get values velero
deployNodeAgent: true
# Deploiement des Daemonsets sur les nodes
[...]
configuration:
[...]
uploaderType: restic # par défaut pour le moment
defaultVolumesToFsBackup:
true [...]
initContainers:
# Deja défini pour l'export des objets k8s
- name: velero-plugin-for-aws
image: velero/velero-plugin-for-
aws:v1.6.0 volumeMounts:
- mountPath: /target
name: plugins
Velero - Backup via FSB (Restic)
2 modes de backup
1. Opt-in: rien par défaut, on sélectionne ce qu'on veut sauvegarder
podAnnotations:
## Velero annotations
backup.velero.io/backup-volumes-includes: nextcloud-main
2. Opt-out: tout par défaut, on sélectionne ce qu'on veut exclure
Par défaut depuis Velero 1.5
podAnnotations:
## Velero annotations
backup.velero.io/backup-volumes-excludes: redis-data
Velero - Restore
Process de restore "presque" l'inverse du backup, mais en plus :
Validation des ressources seront compatibles
Ordre de restauration des ressources
Possibilité de changer de namespace --namespace-mappings
Possibilité de changer de storage class velero.io/change-storage-class
Mode "incrémental" --existing-resource-policy
Données (PV/PVC)
Si Snapshot : Restore du volume, puis remapping / reference
Si FSB: Création d'un nouveau volume, réhydratation des données
Velero - Restore avec FSB (Restic)
Snapshots ou FSB ?
Velero - Snapshots ou FSB ?
Snapshot FSB
Non atomique Non atomique
Même média Média différent
Plus rapide Plus lent
Proche Distant ( coût transferts)
Non chiffré ( Storage Class) Chiffré
Même Cloud Provider ( Zone) Cloud Provider Agnostic
Velero - Snapshots ou FSB ?
Rappels de bonnes pratiques
voir même 3-2-1-1
https://www.msp360.com/resources/blog/following-3-2-1-backup-strategy/
Velero - Snapshots ou FSB ?
Les 2 ! Mais...
Bien configurer l'opt-in / opt-out côté FSB (defaultVolumesToFsBackup) Bien
configurer includes / excludes des volumes
--snapshot-volumes
Bien configurer l'utilisation de snapshots ( )
Certaines combinaisons ne fonctionnent pas ensemble
Si opt-in && includes : pas de snapshots des volumes
time="2022-10-02T00:01:04Z" level=info msg="Skipping snapshot of persistent volume 
because volume is being backed up with restic."
Velero - Snapshots ou FSB ?
Mes recommendations
opt-out par défaut
1 schedule classique: backup S3, avec excludes pour certains volumes, sans
snapshots (snapshotVolumes: false)
1 schedule snapshots: defaultVolumesToFsBackup: false (opt-in)
Dans le doute : FSB
Restic vs Kopia : https://velero.io/docs/v1.10/performance-guidance/
1 point sur les hooks...
Velero - Hooks
Pre & Post Hooks
Pod Annotation ou Backup Spec
pre.hook.backup.velero.io/container
pre.hook.backup.velero.io/command
pre.hook.backup.velero.io/on-error
pre.hook.backup.velero.io/timeout
commande doit être disponible, sinon utilisation de sidecar container
Et 1 autre sur les Bases de Données !
Velero - BDD & Atomicité
fsfreeze
1. Utilisation des hooks avec , sqldump
blocage de la BDD le temps du backup
2. Utilisation de BDD réplica en read-only Hook
de backup sur le réplica, à l'ancienne
2. En dehors du cluster Kubernetes
3. Utilisation de BDD managée
Blueprints de backups ? Voir Kanister
Cas de migration cloud
Velero - Cas d'une migration cloud
Velero - Cas d'une migration cloud
Quelques points de vigilance
Bascule DNS (CQFD)
Version de Kubernetes & API différentes : "API Group Versions Feature"
Certaines ressources non nécessaires : "--exclude-resources"
$ velero restore --exclude-resources CustomResourceDefinition,CertificateRequest,Order
Storage différent : "Changing PV/PVC Storage Class"
kind: ConfigMap
metadata:
labels:
velero.io/change-storage-class: RestoreItemAction
data:
<old-storage-class>: <new-storage-class>
Velero - Cas d'une migration cloud
Temps de restauration assez long (si plusieurs centaines de Go)
Comment optimiser ce temps de "bascule" ?
--existing-resource-policy
Flag pour restore "incrémental" ?
Velero - Cas d'une migration cloud
Temps de restauration assez long (si plusieurs centaines de Go)
Comment optimiser ce temps de "bascule" ?
Réponse: rsync !
OpenShift MTC
OpenShift MTC
“ The Migration Toolkit for Containers (MTC) enables you to migrate stateful application
workloads between OpenShift Container Platform 4 clusters at the granularity of a
namespace.
“ The file system copy method uses Restic for indirect migration or Rsync for direct
volume migration.
https://docs.openshift.com/container-
platform/4.11/migration_toolkit_for_containers/about-mtc.html
“
“
Quelques fails
Velero - Backup qui s'est mal passé
1. Storage Location
Oubli de préciser, Velero ne sait pas où sauvegarder
spec:
storageLocation: ovh-velero-storage-location
$ kubectl logs -f velero-7dcfbb4b6b-k8fl9
time="2023-01-31T03:09:07Z" level=warning msg="There is no existing backup storage location set as default.
Please see `velero backup-location-h` for options." controller=backup-storage-location
logSource="pkg/controller/backup_storage_location_controller.go:173"
2. Timeout
Sur gros volumes, Restic part en timeout
configuration:
resticTimeout: 2h
Velero - Backup qui s'est mal passé
3. Objets S3
Backup trop gros (beaucoup de namespaces)
Velero - Backup qui s'est mal passé
4. Restic OOMKilled !
Augmenter les requests & limits (grosse amélioration depuis Restic 0.14.0)
GOGC ! (https://tip.golang.org/doc/gc-guide)
Ressources Daemonset
Restic Prune !
configuration:
extraEnvVars:
GOGC: 10
resources: # Velero
limits:
cpu: null
memory: 2Gi # <---
restic:
resources:
limits:
cpu: "2"
memory: 4Gi
Velero - Backup qui s'est mal passé
5. Restic Locked backend
Gestion multi clusters : attention aux storage location RW
stderr=unable to create lock in backend: repository is already locked exclusively by PID 11108
on velero-76cfbd7858-5fr8t by nonroot (UID 65532, GID 65532)
lock was created at 2022-09-30 04:00:05 (1m5.593684965s ago)
storage ID 44a72b6f the `unlock` command can be used to remove stale locks
exit status 1" error.file="/go/src/github.com/vmware-tanzu/velero/pkg/restic/backupper.go:184"
error.function="github.com/vmware-tanzu/velero/pkg/restic.(*backupper).BackupPodVolumes"
logSource="pkg/backup/backup.go:417"
name=nextcloud-mariadb-0
$ kubectl patch backupstoragelocation <STORAGE LOCATION NAME> 
--namespace velero 
--type merge 
--patch '{"spec":{"accessMode":"ReadOnly"}}'
Velero - Backup qui s'est mal passé
5. Restic, NFS & ReadWriteMany
1. Backup Serveur NFS
1. Backup PV Pod 1
1. Backup PV Pod 2
1. Backup PV Pod N
msg="Pod volume uses a persistent volume claim which has already been backed up 
with restic from another pod, skipping."
Velero - Restore qui s'est mal passé
1. Restic Annotations
Oubli d'annoter 1 volume lors du backup
podAnnotations:
backup.velero.io/backup-volumes-includes:
2. Selector
Tout n'est pas pris en compte
$ kubectl get all -l app=mariadb-database
NAME READY STATUS RESTARTS AGE
pod/mariadb-database-0 1/1 Running 0 93d
Velero - Restore qui s'est mal passé
3. Base de données corrompue !
Pas d'atomicité : Utilisation des pre-hooks & post-hooks Sur
Backup, mais aussi sur Restore
metadata:
annotations:
backup.velero.io/backup-volumes: data
pre.hook.backup.velero.io/command: '["/bin/bash", "-
c",
"mkdir -p /bitnami/mariadb/backups 
&& mysqldump -u $MARIADB_USER -p$MARIADB_PASSWORD 
$MARIADB_DATABASE > /bitnami/mariadb/backups/nextcloud.dump"]'
Faut-il aussi pouvoir récupérer les dumps (tar)...
$ kubectl cp nextcloud-mariadb-0:~/nextcloud.dump ./nextcloud.dump
command terminated with exit code 126
Velero - Restore qui s'est mal passé
4. Statefulset disparu ?!
Bug avec velero.io/change-storage-class
$ velero restore create nextcloud-migration-22091501 --from-backup nextcloud-22091501
$ velero restore describe nextcloud-migration-
22091501 [...]
Phase: PartiallyFailed (run 'velero restore logs nextcloud-migration-22091501' for more
information) Total items to be restored: 105
Items restored: 105
Started: 2022-09-15 21:02:46 +0200 CEST
Completed: 2022-09-15 22:13:04 +0200 CEST
[...]
Errors:
Namespaces:
nextcloud: error preparing statefulsets.apps/nextcloud/nextcloud-mariadb: rpc error: code = Aborted desc = plugin panicked:
 runtime error: invalid memory address or nil pointer dereference
error preparing statefulsets.apps/nextcloud/nextcloud-redis-master: rpc error: code = Aborted desc = plugin panicked:

runtime error: invalid memory address or nil pointer dereference
Velero, encore plus !
Monitoring
metrics:
serviceMonitor:
enabled: true
# HELP velero_backup_attempt_total Total number of attempted backups
# HELP velero_backup_deletion_success_total Total number of successful backup
deletions # HELP velero_backup_duration_seconds Time taken to complete backup, in
seconds
# HELP velero_backup_failure_total Total number of failed backups
# HELP velero_backup_items_errors Total number of errors encountered during backup
# HELP velero_backup_validation_failure_total Total number of validation failed
backups # HELP velero_csi_snapshot_attempt_total Total number of CSI attempted volume
snapshots
successful volume snapshots
# HELP velero_restore_attempt_total Total number of attempted
restores # HELP velero_restore_total Current number of existent
restores
# HELP velero_restore_validation_failed_total Total number of failed restores failing
Monitoring
Alerting !
Backup Policies
Kyverno
“
https://kyverno.io/policies/?policytypes=V
elero
“
Derniers conseils
Lisez la doc Velero !
Vérifiez l'état de vos backups
Validez vos restaurations régulièrement
On n'est pas obligé de tout mettre dans Kubernetes, cf services managés En
vrai, ça marche plutôt pas mal, faut-il bien configurer l'outil.
Ils utilisent Velero
Openshift "OADP" & "MTC"
VMware "TMC"
Accenture
Vous ? Parlons-en !
Merci !
Rémi Verchère @ Accenture
Gestion de votre infrastructure
depuis K8s avec Crossplane.
Sérieusement décontracté.e.s
SOMMAIRE
68
PRÉSENTATION
“LIMITES”
DEMO
CONCLUSION
PRÉSENTATION
UN BESOIN
70
LA PROMESSE DE CROSSPLANE
71
Kubernetes API
Crossplane Operator
CLUSTER
CENTRALISATION DES RESSOURCES
LE PRINCIPE DE CROSSPLANE
72
YAML
RESOURCE
CONTROLLER
EXTERNAL
RESOURCE
CRD
RESOURCE
CLAIMS
READS
PROVISIONS
Provider
RECONCILES
“LIMITES”
LIMITES (AVANT 2023)
74
LIMITES (AVANT 2023)
75
TERRAJET/UPJET
76
Terraform Provider Crossplane Provider
Upbound/Upjet
framework
Ressources déployable via
Terraform
Ressources manageables par
Crossplane
DÉMO
AU MENU
● EXPLICATION INSTALLATION ET PRÉREQUIS
● PRÉSENTATION RAPIDE DES FICHIERS DE CONFIG ET DE RESSOURCES
● DÉPLOIEMENT MULTI CLOUD
● MISE EN ÉVIDENCE DE LA RÉCONCILIATION
78
79
CONCLUSION
UN OUTIL À HAUT POTENTIEL !
● CLOUD NATIVE
● ENVIRONNEMENT KUBERNETES
● PAS DE LANGAGE PROPRE (MANIFEST YAML UNIQUEMENT)
● COMPATIBLE AVEC TOUT OUTIL CAPABLE D’UTILISER L’API K8S (ex: Grafana)
● AMÉLIORATION DE LA DISPONIBILITÉ DES RESSOURCES (réconciliation)
● DÉSORMAIS CAPABLE DE GÉRER UNE MYRIADE DE RESSOURCES
81
MERCI DE VOTRE
ATTENTION.
Sérieusement décontracté.e.s
Quizz !!
www.kahoot.it
meetup.com/Devops-Aix-
Marseille
ibd.sh/openbar

Weitere ähnliche Inhalte

Ähnlich wie 2023-02-02 - Marvelous March

Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide
 
The real WAX ROADSHOW K8S 2022.pdf
The real WAX ROADSHOW K8S 2022.pdfThe real WAX ROADSHOW K8S 2022.pdf
The real WAX ROADSHOW K8S 2022.pdfFrançois Berthault
 
Dev cloud java : la tête dans les nuages
Dev cloud java : la tête dans les nuagesDev cloud java : la tête dans les nuages
Dev cloud java : la tête dans les nuagesSOAT
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOSgcatt
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à dockerBoubker ABERWAG
 
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sKubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sArnaud MAZIN
 
Rapport atelier Web App Security 2015
Rapport atelier Web App Security 2015Rapport atelier Web App Security 2015
Rapport atelier Web App Security 2015Hamza Ben Marzouk
 
Tadx - Présentation Conteneurisation
Tadx -  Présentation ConteneurisationTadx -  Présentation Conteneurisation
Tadx - Présentation ConteneurisationTADx
 
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-gr__ce-__-Docker.pptx
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-gr__ce-__-Docker.pptxJFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-gr__ce-__-Docker.pptx
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-gr__ce-__-Docker.pptxAnisSalhi3
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et DockerStephane Manciot
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesChristophe Furmaniak
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...adri1s
 
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...OpenNebula Project
 
20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natifHenri Gomez
 
20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natifHenri Gomez
 
Virt lightning-montreal-linux-meetup-2020-02
Virt lightning-montreal-linux-meetup-2020-02Virt lightning-montreal-linux-meetup-2020-02
Virt lightning-montreal-linux-meetup-2020-02Gonéri Le Bouder
 
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdfJFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdfqsdqsd4
 

Ähnlich wie 2023-02-02 - Marvelous March (20)

Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
The real WAX ROADSHOW K8S 2022.pdf
The real WAX ROADSHOW K8S 2022.pdfThe real WAX ROADSHOW K8S 2022.pdf
The real WAX ROADSHOW K8S 2022.pdf
 
Dev cloud java : la tête dans les nuages
Dev cloud java : la tête dans les nuagesDev cloud java : la tête dans les nuages
Dev cloud java : la tête dans les nuages
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOS
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à docker
 
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sKubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
 
Rapport atelier Web App Security 2015
Rapport atelier Web App Security 2015Rapport atelier Web App Security 2015
Rapport atelier Web App Security 2015
 
rapportWAS
rapportWASrapportWAS
rapportWAS
 
Tadx - Présentation Conteneurisation
Tadx -  Présentation ConteneurisationTadx -  Présentation Conteneurisation
Tadx - Présentation Conteneurisation
 
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-gr__ce-__-Docker.pptx
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-gr__ce-__-Docker.pptxJFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-gr__ce-__-Docker.pptx
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-gr__ce-__-Docker.pptx
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et Docker
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
 
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
 
Présentation1
Présentation1Présentation1
Présentation1
 
20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif
 
20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif
 
Virt lightning-montreal-linux-meetup-2020-02
Virt lightning-montreal-linux-meetup-2020-02Virt lightning-montreal-linux-meetup-2020-02
Virt lightning-montreal-linux-meetup-2020-02
 
DevOps 3 - Docker.pdf
DevOps 3 - Docker.pdfDevOps 3 - Docker.pdf
DevOps 3 - Docker.pdf
 
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdfJFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
 

Mehr von Frederic Leger

2024-01 - slides du meetup devops aix-marseille
2024-01 - slides du meetup devops aix-marseille2024-01 - slides du meetup devops aix-marseille
2024-01 - slides du meetup devops aix-marseilleFrederic Leger
 
KubeTrain sponsor prospectus Aix-Marseille
KubeTrain sponsor prospectus Aix-MarseilleKubeTrain sponsor prospectus Aix-Marseille
KubeTrain sponsor prospectus Aix-MarseilleFrederic Leger
 
meetup devops aix-marseille - décembre 2023
meetup devops aix-marseille - décembre 2023meetup devops aix-marseille - décembre 2023
meetup devops aix-marseille - décembre 2023Frederic Leger
 
Level up your ci-cd experience
Level up your ci-cd experienceLevel up your ci-cd experience
Level up your ci-cd experienceFrederic Leger
 
Slides du meetup devops aix-marseille d'ocotbre 2023
Slides du meetup devops aix-marseille d'ocotbre 2023Slides du meetup devops aix-marseille d'ocotbre 2023
Slides du meetup devops aix-marseille d'ocotbre 2023Frederic Leger
 
slides meetup devops aix-marseille - septembre 2023
slides meetup devops aix-marseille - septembre 2023slides meetup devops aix-marseille - septembre 2023
slides meetup devops aix-marseille - septembre 2023Frederic Leger
 
slides meetup devops aix-marseille - juillet 2023
slides meetup devops aix-marseille - juillet 2023slides meetup devops aix-marseille - juillet 2023
slides meetup devops aix-marseille - juillet 2023Frederic Leger
 
meetup devops 2023-06-15
meetup devops 2023-06-15meetup devops 2023-06-15
meetup devops 2023-06-15Frederic Leger
 
meetup devops aix marseille du 16/05/23
meetup devops aix marseille du 16/05/23meetup devops aix marseille du 16/05/23
meetup devops aix marseille du 16/05/23Frederic Leger
 
meetup devops 2023/04/04 - Astonish April
meetup devops 2023/04/04 - Astonish Aprilmeetup devops 2023/04/04 - Astonish April
meetup devops 2023/04/04 - Astonish AprilFrederic Leger
 
2023-01-24 - dry january.pptx
2023-01-24 - dry january.pptx2023-01-24 - dry january.pptx
2023-01-24 - dry january.pptxFrederic Leger
 
2022-11-22 - November Rain
2022-11-22 - November Rain2022-11-22 - November Rain
2022-11-22 - November RainFrederic Leger
 
meetup devops aix-marseille 27/10/2022
meetup devops aix-marseille 27/10/2022meetup devops aix-marseille 27/10/2022
meetup devops aix-marseille 27/10/2022Frederic Leger
 
Maltacademy: securing your k8s cluster with CNCF falco
Maltacademy: securing your k8s cluster with CNCF falcoMaltacademy: securing your k8s cluster with CNCF falco
Maltacademy: securing your k8s cluster with CNCF falcoFrederic Leger
 
Voyage en terre du multi-cloud
Voyage en terre du multi-cloudVoyage en terre du multi-cloud
Voyage en terre du multi-cloudFrederic Leger
 
Meetup vault - ScaaS Secrets as a Service
Meetup vault - ScaaS Secrets as a ServiceMeetup vault - ScaaS Secrets as a Service
Meetup vault - ScaaS Secrets as a ServiceFrederic Leger
 
Aws beanstalk - Pastis Tech 21/11/2019
Aws beanstalk - Pastis Tech 21/11/2019Aws beanstalk - Pastis Tech 21/11/2019
Aws beanstalk - Pastis Tech 21/11/2019Frederic Leger
 
Des jeux et des devops
Des jeux et des devopsDes jeux et des devops
Des jeux et des devopsFrederic Leger
 
Lightning talk: Les Load Balancers HTTP modernes
Lightning talk: Les Load Balancers HTTP modernesLightning talk: Les Load Balancers HTTP modernes
Lightning talk: Les Load Balancers HTTP modernesFrederic Leger
 
Meetup DevOps Aix-Marseille - théorie du chaos et architectures résilientes
Meetup DevOps Aix-Marseille - théorie du chaos et architectures résilientesMeetup DevOps Aix-Marseille - théorie du chaos et architectures résilientes
Meetup DevOps Aix-Marseille - théorie du chaos et architectures résilientesFrederic Leger
 

Mehr von Frederic Leger (20)

2024-01 - slides du meetup devops aix-marseille
2024-01 - slides du meetup devops aix-marseille2024-01 - slides du meetup devops aix-marseille
2024-01 - slides du meetup devops aix-marseille
 
KubeTrain sponsor prospectus Aix-Marseille
KubeTrain sponsor prospectus Aix-MarseilleKubeTrain sponsor prospectus Aix-Marseille
KubeTrain sponsor prospectus Aix-Marseille
 
meetup devops aix-marseille - décembre 2023
meetup devops aix-marseille - décembre 2023meetup devops aix-marseille - décembre 2023
meetup devops aix-marseille - décembre 2023
 
Level up your ci-cd experience
Level up your ci-cd experienceLevel up your ci-cd experience
Level up your ci-cd experience
 
Slides du meetup devops aix-marseille d'ocotbre 2023
Slides du meetup devops aix-marseille d'ocotbre 2023Slides du meetup devops aix-marseille d'ocotbre 2023
Slides du meetup devops aix-marseille d'ocotbre 2023
 
slides meetup devops aix-marseille - septembre 2023
slides meetup devops aix-marseille - septembre 2023slides meetup devops aix-marseille - septembre 2023
slides meetup devops aix-marseille - septembre 2023
 
slides meetup devops aix-marseille - juillet 2023
slides meetup devops aix-marseille - juillet 2023slides meetup devops aix-marseille - juillet 2023
slides meetup devops aix-marseille - juillet 2023
 
meetup devops 2023-06-15
meetup devops 2023-06-15meetup devops 2023-06-15
meetup devops 2023-06-15
 
meetup devops aix marseille du 16/05/23
meetup devops aix marseille du 16/05/23meetup devops aix marseille du 16/05/23
meetup devops aix marseille du 16/05/23
 
meetup devops 2023/04/04 - Astonish April
meetup devops 2023/04/04 - Astonish Aprilmeetup devops 2023/04/04 - Astonish April
meetup devops 2023/04/04 - Astonish April
 
2023-01-24 - dry january.pptx
2023-01-24 - dry january.pptx2023-01-24 - dry january.pptx
2023-01-24 - dry january.pptx
 
2022-11-22 - November Rain
2022-11-22 - November Rain2022-11-22 - November Rain
2022-11-22 - November Rain
 
meetup devops aix-marseille 27/10/2022
meetup devops aix-marseille 27/10/2022meetup devops aix-marseille 27/10/2022
meetup devops aix-marseille 27/10/2022
 
Maltacademy: securing your k8s cluster with CNCF falco
Maltacademy: securing your k8s cluster with CNCF falcoMaltacademy: securing your k8s cluster with CNCF falco
Maltacademy: securing your k8s cluster with CNCF falco
 
Voyage en terre du multi-cloud
Voyage en terre du multi-cloudVoyage en terre du multi-cloud
Voyage en terre du multi-cloud
 
Meetup vault - ScaaS Secrets as a Service
Meetup vault - ScaaS Secrets as a ServiceMeetup vault - ScaaS Secrets as a Service
Meetup vault - ScaaS Secrets as a Service
 
Aws beanstalk - Pastis Tech 21/11/2019
Aws beanstalk - Pastis Tech 21/11/2019Aws beanstalk - Pastis Tech 21/11/2019
Aws beanstalk - Pastis Tech 21/11/2019
 
Des jeux et des devops
Des jeux et des devopsDes jeux et des devops
Des jeux et des devops
 
Lightning talk: Les Load Balancers HTTP modernes
Lightning talk: Les Load Balancers HTTP modernesLightning talk: Les Load Balancers HTTP modernes
Lightning talk: Les Load Balancers HTTP modernes
 
Meetup DevOps Aix-Marseille - théorie du chaos et architectures résilientes
Meetup DevOps Aix-Marseille - théorie du chaos et architectures résilientesMeetup DevOps Aix-Marseille - théorie du chaos et architectures résilientes
Meetup DevOps Aix-Marseille - théorie du chaos et architectures résilientes
 

2023-02-02 - Marvelous March

  • 1. Marvelous March Les 4 Filles et Garçons du Dr March 2023/02/02
  • 3. Velero: sauvegardez et restaurez (proprement) vos applications Kubernetes Rémi Verchère @ Accenture
  • 4. Avant-propos Je ne suis pas expert backup, je ne suis là par pur altruisme C'est probablement la dernière fois que je fais cette présentation en public On est entre nous, je risque de lancer quelques trolls Surtout après les échanges sur Twitter ce week-end Pas de live coding, que du REX Au sommaire Présentation de l'outil Utilisation en prod, gestion des données, etc.. Exemple de migration Des fails, parce que vous aimez ça
  • 5. Qui suis-je ? Rémi Verchère Cloud Native Infrastructure Consultant Ops qui aime bien les Devs Papa x Certified Kubernetes {Associate,Dev,Admin,Security} @rverchere https://presentations.verchere.fr/
  • 7. Backup & Kubernetes Pourquoi ? Conteneurs Stateless Manifest YAML facilement redéployables CI/CD GitOps Boucle de réconciliation kubectl apply || crictl run et c'est réglé ^^ Plein d'autres raisons approximatives...
  • 8. Backup & Kubernetes Parce que, des fois, dans la vraie vie... Conteneurs Statefull Migration & Protection des données Reprise après sinistre Ressources en prod pas "exactement" les mêmes L'erreur est humaine $ kubectl delete namespace la-prod
  • 10. Velero - Généralités Un peu d'histoire Heptio Ark, "open-sourcé" mi 2017 Société rachetée par VMware fin 2018 Intégré à l'offre Tanzu (TMC) Actuellement en version 1.10.1 (2023-02-06) $ git log --reverse commit 2fe501f527a88ea292ca3dde80992ec60b388dda Author: Andy Goldstein <andy.goldstein@gmail.com> Date: Wed Aug 2 13:27:17 2017 -0400
  • 11. Velero - Généralités Fonctionnalités principales Sauvegarde des ressources d'un cluster et les restaure en cas de perte. Migration, Réplication des ressources d'un cluster à un autre. Custom Ressources qui définissent quoi sauvegarder, comment et quand (selector, schedule) Composants Serveur (Controller) qui tourne sur votre cluster Client en ligne de commande qui s'exécute localement https://velero.io/docs/main/index.html
  • 13. Velero - Installation Cluster: Chart Helm $ helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts && helm repo update $ helm install velero vmware-tanzu/velero --create-namespace -n velero Release "velero" has been installed. Happy Helming! Poste client: CLI $ asdf plugin add velero && asdf install velero 1.10.1 && asdf global velero 1.10.1 $ velero version Client: Version: v1.10.1 Git commit: 948b3790d5577dc7e77410a8b80ef7d8a6b00303 Server: Version: v1.10.1
  • 14. Aurélie Vache - Understanding Kubernetes in a visual way
  • 15. Aurélie Vache - Understanding Kubernetes in a visual way
  • 16. Mise en situation : la prod
  • 17. Il était une fois la prod "de confiance" Contexte Plusieurs clusters Kubernetes managés OVHcloud Storage object Openstack Swift & block Cinder Applications hétérogènes Outils de gestion d'infra majoritairement Open Source Besoin de Backup : Sur stockage S3, loin Réplication des applications sur cluster de test Possibilité de PRA sur un autre cloud provider
  • 18. Exemple d'application Nextcloud Chart Helm 1 déploiement de l'application 1 base Mariadb 1 cache Redis (master / replicas) Ingress, Cronjobs, etc. https://github.com/nextcloud/helm
  • 19. Exemple d'application Nextcloud $ kubectl get deployment,statefulset,cronjob,service,ingress NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nextcloud 1/1 1 1 28d NAME READY AGE statefulset.apps/nextcloud-mariadb 1/1 28d statefulset.apps/nextcloud-redis-master 1/1 28d statefulset.apps/nextcloud-redis-replicas 1/1 28d NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE cronjob.batch/nextcloud-cron */15 * * * * F alse 0 62s 28d NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/nextcloud ClusterIP 10.3.124.75 <none> 8080/TCP 28d service/nextcloud-mariadb ClusterIP 10.3.145.33 <none> 3306/TCP 28d service/nextcloud-redis-headless ClusterIP None <none> 6379/TCP 28d service/nextcloud-redis-master ClusterIP 10.3.207.110 <none> 6379/TCP 28d service/nextcloud-redis-replicas ClusterIP 10.3.249.214 <none> 6379/TCP 28d NAME CLASS HOSTS ADDRESS PORTS AGE ingress.networking.k8s.io/nextcloud <none> nextcloud.demo.vrchr.fr ip-135-125-84-204.gra.lb.ovh.net 80, 443 28d
  • 20. Backup & Restore, l'aventure...
  • 21. Velero - Première fois 1er backup $ velero backup create nextcloud-backup-1 --include-namespaces nextcloud $ velero backup describe nextcloud-backup-1 nextcloud-backup-1 velero Name: Namespace: [...] Phase: Comple ted Errors: 0 Warnings: [...] 0 Total items to be backed up: 200 Items backed up: [...] 200
  • 22. Velero - Première fois 1er restore $ velero restore create nextcloud-restore-1 --from-backup nextcloud-backup-1 $ velero restore nextcloud-restore-1 Name: nextcloud-restore-1 Namespace:velero Labels: <none> Annotations: <none> Phase: Completed Total items to be restored: 200 Items restored: 200
  • 23. Velero - Première fois 1er fail “ Objets kubernetes sauvés, données sacrifiées ! “
  • 24. Velero Snapshots, Backups, Restore Volumes Persistants
  • 25. Velero - Sauvegarde des données Objects Kubernetes Les objets kubernetes sont exportés sur bucket S3 Données persistantes : 2x2 possibilités 1. Snapshots des Persistent Volumes (PV) via API du Cloud Provider via CSI (>= version 1.4). Compatibilité Cloud Provider (Cinder: ) 3. Export des volumes montés par les pods : File System Backup FSB (Swift: ) via Restic via Kopia (>= version 1.10)
  • 26. Velero - Snapshot PV via CSI
  • 27. Velero - Snapshot PV via CSI Activation avec chart Helm Sous réserve que votre CSI le supporte : --features=EnableCSI # $ helm get values velero snapshotsEnabled: true [...] configuration: [...] features: EnableCSI [...] initContainers: - name: velero-plugin-for-csi image: velero/velero-plugin-for- csi:v0.4.0 volumeMounts: - mountPath: /target name: plugins
  • 28. $ velero backup get NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR daily-s3-20220920000000 Failed 0 0 2022-09-20 02:00:00 +0200 CEST 1d velero-gra9 <none> daily-s3-20220916000004 Completed 0 0 2022-09-16 02:00:04 +0200 CEST 1d velero-gra9 <none> daily-s3-20220915000003 Completed 0 0 2022-09-15 02:00:03 +0200 CEST 5h velero-gra9 <none> daily-snapshot-20220920010027 Failed 0 0 2022-09-20 03:00:27 +0200 CEST 1d velero-gra9 <none> daily-snapshot-20220915010003 Completed 0 0 2022-09-15 03:00:03 +0200 CEST 6h velero-gra9 <none> Velero - Snapshot PV via CSI J'ai testé pour vous $ kubectl logs -f velero-5b86bc8db-5p8md time="2022-10-03T19:32:22Z" level=info msg="Waiting for volumesnapshotcontents snapcontent-bc5660db-b0a4-4cc5-98cb-a071d5473dcb to have snapshot handle. Retrying in 5s" [...] time="2022-10-03T19:32:27Z" level=info msg="Waiting for volumesnapshotcontents snapcontent-bc5660db-b0a4-4cc5-98cb-a071d5473dcb to have snapshot handle. Retrying in 5s" [...]
  • 29. $ velero backup get NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR daily-s3-20221004182135 Completed 0 0 2022-10-04 20:21:35 +0200 CEST 1d velero-gra9 <none> daily-s3-20221004181435 Completed 0 0 2022-10-04 20:14:35 +0200 CEST 1d velero-gra9 <none> [...] daily-snapshot-20221004190535 Completed 0 0 2022-10-04 21:05:35 +0200 CEST 1d velero-gra9 <none> daily-snapshot-20221004190035 Completed 0 0 2022-10-04 21:00:35 +0200 CEST 1d velero-gra9 <none> daily-snapshot-20221004185535 Completed 0 0 2022-10-04 20:55:35 +0200 CEST 1d velero-gra9 <none> daily-snapshot-20221004185035 Completed 0 0 2022-10-04 20:50:35 +0200 CEST 1d velero-gra9 <none> [...] Velero - Snapshot PV via CSI J'ai insisté, avec les équipes du CSP Aux limites configurées côté storage provider N'est pas considéré comme stockage pérenne
  • 30. Velero - Backup via File System Backup (FSB)
  • 31. Velero - Backup via FSB (Restic) Activation avec chart Helm # $ helm get values velero deployNodeAgent: true # Deploiement des Daemonsets sur les nodes [...] configuration: [...] uploaderType: restic # par défaut pour le moment defaultVolumesToFsBackup: true [...] initContainers: # Deja défini pour l'export des objets k8s - name: velero-plugin-for-aws image: velero/velero-plugin-for- aws:v1.6.0 volumeMounts: - mountPath: /target name: plugins
  • 32. Velero - Backup via FSB (Restic) 2 modes de backup 1. Opt-in: rien par défaut, on sélectionne ce qu'on veut sauvegarder podAnnotations: ## Velero annotations backup.velero.io/backup-volumes-includes: nextcloud-main 2. Opt-out: tout par défaut, on sélectionne ce qu'on veut exclure Par défaut depuis Velero 1.5 podAnnotations: ## Velero annotations backup.velero.io/backup-volumes-excludes: redis-data
  • 33. Velero - Restore Process de restore "presque" l'inverse du backup, mais en plus : Validation des ressources seront compatibles Ordre de restauration des ressources Possibilité de changer de namespace --namespace-mappings Possibilité de changer de storage class velero.io/change-storage-class Mode "incrémental" --existing-resource-policy Données (PV/PVC) Si Snapshot : Restore du volume, puis remapping / reference Si FSB: Création d'un nouveau volume, réhydratation des données
  • 34. Velero - Restore avec FSB (Restic)
  • 36. Velero - Snapshots ou FSB ? Snapshot FSB Non atomique Non atomique Même média Média différent Plus rapide Plus lent Proche Distant ( coût transferts) Non chiffré ( Storage Class) Chiffré Même Cloud Provider ( Zone) Cloud Provider Agnostic
  • 37. Velero - Snapshots ou FSB ? Rappels de bonnes pratiques voir même 3-2-1-1 https://www.msp360.com/resources/blog/following-3-2-1-backup-strategy/
  • 38. Velero - Snapshots ou FSB ? Les 2 ! Mais... Bien configurer l'opt-in / opt-out côté FSB (defaultVolumesToFsBackup) Bien configurer includes / excludes des volumes --snapshot-volumes Bien configurer l'utilisation de snapshots ( ) Certaines combinaisons ne fonctionnent pas ensemble Si opt-in && includes : pas de snapshots des volumes time="2022-10-02T00:01:04Z" level=info msg="Skipping snapshot of persistent volume because volume is being backed up with restic."
  • 39. Velero - Snapshots ou FSB ? Mes recommendations opt-out par défaut 1 schedule classique: backup S3, avec excludes pour certains volumes, sans snapshots (snapshotVolumes: false) 1 schedule snapshots: defaultVolumesToFsBackup: false (opt-in) Dans le doute : FSB Restic vs Kopia : https://velero.io/docs/v1.10/performance-guidance/
  • 40. 1 point sur les hooks...
  • 41. Velero - Hooks Pre & Post Hooks Pod Annotation ou Backup Spec pre.hook.backup.velero.io/container pre.hook.backup.velero.io/command pre.hook.backup.velero.io/on-error pre.hook.backup.velero.io/timeout commande doit être disponible, sinon utilisation de sidecar container
  • 42. Et 1 autre sur les Bases de Données !
  • 43. Velero - BDD & Atomicité fsfreeze 1. Utilisation des hooks avec , sqldump blocage de la BDD le temps du backup 2. Utilisation de BDD réplica en read-only Hook de backup sur le réplica, à l'ancienne 2. En dehors du cluster Kubernetes 3. Utilisation de BDD managée Blueprints de backups ? Voir Kanister
  • 45. Velero - Cas d'une migration cloud
  • 46. Velero - Cas d'une migration cloud Quelques points de vigilance Bascule DNS (CQFD) Version de Kubernetes & API différentes : "API Group Versions Feature" Certaines ressources non nécessaires : "--exclude-resources" $ velero restore --exclude-resources CustomResourceDefinition,CertificateRequest,Order Storage différent : "Changing PV/PVC Storage Class" kind: ConfigMap metadata: labels: velero.io/change-storage-class: RestoreItemAction data: <old-storage-class>: <new-storage-class>
  • 47. Velero - Cas d'une migration cloud Temps de restauration assez long (si plusieurs centaines de Go) Comment optimiser ce temps de "bascule" ? --existing-resource-policy Flag pour restore "incrémental" ?
  • 48. Velero - Cas d'une migration cloud Temps de restauration assez long (si plusieurs centaines de Go) Comment optimiser ce temps de "bascule" ? Réponse: rsync !
  • 50. OpenShift MTC “ The Migration Toolkit for Containers (MTC) enables you to migrate stateful application workloads between OpenShift Container Platform 4 clusters at the granularity of a namespace. “ The file system copy method uses Restic for indirect migration or Rsync for direct volume migration. https://docs.openshift.com/container- platform/4.11/migration_toolkit_for_containers/about-mtc.html “ “
  • 52. Velero - Backup qui s'est mal passé 1. Storage Location Oubli de préciser, Velero ne sait pas où sauvegarder spec: storageLocation: ovh-velero-storage-location $ kubectl logs -f velero-7dcfbb4b6b-k8fl9 time="2023-01-31T03:09:07Z" level=warning msg="There is no existing backup storage location set as default. Please see `velero backup-location-h` for options." controller=backup-storage-location logSource="pkg/controller/backup_storage_location_controller.go:173" 2. Timeout Sur gros volumes, Restic part en timeout configuration: resticTimeout: 2h
  • 53. Velero - Backup qui s'est mal passé 3. Objets S3 Backup trop gros (beaucoup de namespaces)
  • 54. Velero - Backup qui s'est mal passé 4. Restic OOMKilled ! Augmenter les requests & limits (grosse amélioration depuis Restic 0.14.0) GOGC ! (https://tip.golang.org/doc/gc-guide) Ressources Daemonset Restic Prune ! configuration: extraEnvVars: GOGC: 10 resources: # Velero limits: cpu: null memory: 2Gi # <--- restic: resources: limits: cpu: "2" memory: 4Gi
  • 55. Velero - Backup qui s'est mal passé 5. Restic Locked backend Gestion multi clusters : attention aux storage location RW stderr=unable to create lock in backend: repository is already locked exclusively by PID 11108 on velero-76cfbd7858-5fr8t by nonroot (UID 65532, GID 65532) lock was created at 2022-09-30 04:00:05 (1m5.593684965s ago) storage ID 44a72b6f the `unlock` command can be used to remove stale locks exit status 1" error.file="/go/src/github.com/vmware-tanzu/velero/pkg/restic/backupper.go:184" error.function="github.com/vmware-tanzu/velero/pkg/restic.(*backupper).BackupPodVolumes" logSource="pkg/backup/backup.go:417" name=nextcloud-mariadb-0 $ kubectl patch backupstoragelocation <STORAGE LOCATION NAME> --namespace velero --type merge --patch '{"spec":{"accessMode":"ReadOnly"}}'
  • 56. Velero - Backup qui s'est mal passé 5. Restic, NFS & ReadWriteMany 1. Backup Serveur NFS 1. Backup PV Pod 1 1. Backup PV Pod 2 1. Backup PV Pod N msg="Pod volume uses a persistent volume claim which has already been backed up with restic from another pod, skipping."
  • 57. Velero - Restore qui s'est mal passé 1. Restic Annotations Oubli d'annoter 1 volume lors du backup podAnnotations: backup.velero.io/backup-volumes-includes: 2. Selector Tout n'est pas pris en compte $ kubectl get all -l app=mariadb-database NAME READY STATUS RESTARTS AGE pod/mariadb-database-0 1/1 Running 0 93d
  • 58. Velero - Restore qui s'est mal passé 3. Base de données corrompue ! Pas d'atomicité : Utilisation des pre-hooks & post-hooks Sur Backup, mais aussi sur Restore metadata: annotations: backup.velero.io/backup-volumes: data pre.hook.backup.velero.io/command: '["/bin/bash", "- c", "mkdir -p /bitnami/mariadb/backups && mysqldump -u $MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE > /bitnami/mariadb/backups/nextcloud.dump"]' Faut-il aussi pouvoir récupérer les dumps (tar)... $ kubectl cp nextcloud-mariadb-0:~/nextcloud.dump ./nextcloud.dump command terminated with exit code 126
  • 59. Velero - Restore qui s'est mal passé 4. Statefulset disparu ?! Bug avec velero.io/change-storage-class $ velero restore create nextcloud-migration-22091501 --from-backup nextcloud-22091501 $ velero restore describe nextcloud-migration- 22091501 [...] Phase: PartiallyFailed (run 'velero restore logs nextcloud-migration-22091501' for more information) Total items to be restored: 105 Items restored: 105 Started: 2022-09-15 21:02:46 +0200 CEST Completed: 2022-09-15 22:13:04 +0200 CEST [...] Errors: Namespaces: nextcloud: error preparing statefulsets.apps/nextcloud/nextcloud-mariadb: rpc error: code = Aborted desc = plugin panicked: runtime error: invalid memory address or nil pointer dereference error preparing statefulsets.apps/nextcloud/nextcloud-redis-master: rpc error: code = Aborted desc = plugin panicked: runtime error: invalid memory address or nil pointer dereference
  • 61. Monitoring metrics: serviceMonitor: enabled: true # HELP velero_backup_attempt_total Total number of attempted backups # HELP velero_backup_deletion_success_total Total number of successful backup deletions # HELP velero_backup_duration_seconds Time taken to complete backup, in seconds # HELP velero_backup_failure_total Total number of failed backups # HELP velero_backup_items_errors Total number of errors encountered during backup # HELP velero_backup_validation_failure_total Total number of validation failed backups # HELP velero_csi_snapshot_attempt_total Total number of CSI attempted volume snapshots successful volume snapshots # HELP velero_restore_attempt_total Total number of attempted restores # HELP velero_restore_total Current number of existent restores # HELP velero_restore_validation_failed_total Total number of failed restores failing
  • 65. Derniers conseils Lisez la doc Velero ! Vérifiez l'état de vos backups Validez vos restaurations régulièrement On n'est pas obligé de tout mettre dans Kubernetes, cf services managés En vrai, ça marche plutôt pas mal, faut-il bien configurer l'outil. Ils utilisent Velero Openshift "OADP" & "MTC" VMware "TMC" Accenture Vous ? Parlons-en !
  • 66. Merci ! Rémi Verchère @ Accenture
  • 67. Gestion de votre infrastructure depuis K8s avec Crossplane. Sérieusement décontracté.e.s
  • 71. LA PROMESSE DE CROSSPLANE 71 Kubernetes API Crossplane Operator CLUSTER CENTRALISATION DES RESSOURCES
  • 72. LE PRINCIPE DE CROSSPLANE 72 YAML RESOURCE CONTROLLER EXTERNAL RESOURCE CRD RESOURCE CLAIMS READS PROVISIONS Provider RECONCILES
  • 76. TERRAJET/UPJET 76 Terraform Provider Crossplane Provider Upbound/Upjet framework Ressources déployable via Terraform Ressources manageables par Crossplane
  • 77. DÉMO
  • 78. AU MENU ● EXPLICATION INSTALLATION ET PRÉREQUIS ● PRÉSENTATION RAPIDE DES FICHIERS DE CONFIG ET DE RESSOURCES ● DÉPLOIEMENT MULTI CLOUD ● MISE EN ÉVIDENCE DE LA RÉCONCILIATION 78
  • 79. 79
  • 81. UN OUTIL À HAUT POTENTIEL ! ● CLOUD NATIVE ● ENVIRONNEMENT KUBERNETES ● PAS DE LANGAGE PROPRE (MANIFEST YAML UNIQUEMENT) ● COMPATIBLE AVEC TOUT OUTIL CAPABLE D’UTILISER L’API K8S (ex: Grafana) ● AMÉLIORATION DE LA DISPONIBILITÉ DES RESSOURCES (réconciliation) ● DÉSORMAIS CAPABLE DE GÉRER UNE MYRIADE DE RESSOURCES 81