Terug naar overzicht

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/blog 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/kubernetes-cluster-access/)

· 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