Handleiding Velero
Het kan soms voorkomen dat je een foutje maakt in je productie kubernetescluster en je dit dan het liefst eigenlijk zo snel mogelijk wilt terugdraaien. Sneller nog dan het redeployen van je hele cluster. Met velero (https://velero.io/) is dat mogelijk.
Velero is een opensource tool gesponsord door VMware om veilig kubernetesclusters te backuppen, migreren en te restoren. De tool draait als een server proces (deployment) in je cluster. Daarnaast heb je op je desktop een cli client waarmee je de service kan aansturen. Met deze cli client kun je backups maken, restoren, plannen en verwijderen.
In deze handleiding nemen we de stappen door hoe je dit kunt inrichten in combinatie met S3 object storage. In deze handleiding gebruiken we een Linux werkstation. Voor Windows of MacOS zul je sommige stappen moeten aanpassen.
Voorwaarden:
- Een werkend kubernetescluster in Previder PaaS+
- kubectl cli tool geconfigureerd voor je cluster (https://docs.jelastic.com/kube...)
- Een S3 bucket met credentials (Previder Object Storage of andere S3 compatible storage)
Stap 1, de velero client installeren.
Vind de juiste versie voor je OS op deze githubpagina: https://github.com/vmware-tanz...
download de veleroclient naar je /tmp folder
❯ cd /tmp
❯ wget https://link_van_git
Pak de tarball uit
❯ tar -xvzf velero-v1.5.3-linux-amd64.tar.gz
In je /tmp dir heb je nu de velero binary staan. Je kan evt. al testen of deze werkt
❯ ./velero-v1.5.3-linux-amd64/velero help
Als alles goed werkt verplaats je de binary naar je PATH. Onder (Ubuntu) Linux doe je dat door deze te verplaatsen naar /usr/local/bin
❯ sudo mv velero-v1.5.3-linux-amd64/velero /usr/local/bin/velero
Stap 2 Configureren S3 storage
Maak een configuratiebestand (credentials-velero) aan voor de S3 bucket in je homefolder met de credentials van je bucket
[default]
aws_access_key_id =
aws_secret_access_key =
Stap 3 Installeren Velero in Kubernetes Cluster
Nu kun je velero installeren middels het volgende commando, let er op dat je bij de bucket parameter de juiste bucket opgeeft en bij de s3 url de url van je objectstore, in dit geval die van Previder.
❯ velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws \
--bucket mijnvelerobucket \
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--wait \
--backup-location-config region=NL,s3ForcePathStyle="true",s3Url=https://object.previder.nl
Als de installatie klaar is kun je deze controleren via
❯ kubectl get deployments -l component=velero –namespace=velero
Je krijgt dan de volgende output
Stap 4 Testen
Voor deze test kun je gebruik maken van de example application die meegeleverd wordt in de tarball uit stap 1. Je kunt hier natuurlijk ook een een willekeurige andere applicatie gebruiken.
❯ kubectl apply -f examples/nginx-app/base.yaml
namespace/nginx-example created
deployment.apps/nginx-deployment created
Maak nu een backup van deze nginx app, dit kan met het volgende commando
❯ velero backup create nginx-backup --selector app=nginx
We kunnen kijken of alles goed is gegaan middels:
❯ velero backup describe nginx-backup
Vervolgens gooien we de gehele namespace waar de nginx testapplicatie in draait weg.
❯ kubectl delete namespace nginx-example
En controleer dat alles weg is
❯ kubectl get deployments --namespace=nginx-example
❯ kubectl get services --namespace=nginx-example
❯ kubectl get namespace/nginx-example
Restore de nginx applicatie
❯ velero restore create --from-backup nginx-backup
En controleer of de namespace en de services weer terug zijn:
❯ kubectl get namespace/nginx-example
❯ kubectl get services --namespace=nginx-example
Overige tips
In plaats van met de hand te backuppen kan je het ook inplannen met cron. Als voorbeeld om onze nginx demo applicatie elke nacht om 1 uur te backuppen:
❯ velero schedule create nginx-daily --schedule="0 1 * * *" --selector app=nginx
Je kunt de backup opruimen met
❯ velero backup delete nginx-backup
Om alles uit deze test te verwijderen uit het cluster
❯ kubectl delete namespace/velero clusterrolebinding/velero
❯ kubectl delete crds -l component=velero
❯ kubectl delete -f examples/nginx-app/base.yaml