Back-ups in de wereld van Kubernetes

Door: Sven Kooiman, DevOps Engineer bij Conclusion Xforce

Wat is het belang van back-ups binnen Kubernetes? Recentelijk verdiepte Sven Kooiman, DevOps Engineer bij Conclusion Xforce zich voor een opdrachtgever in Velero. Dat dwong hem om na te denken over deze vraag. Hij bracht in kaart welke open source back-upoplossingen voor Kubernetes er op dit moment zijn en welke problemen je daarmee aanpakt. Deze blog is het resultaat van zijn onderzoek.

14 juni 2021   |   Blog   |   Door: Conclusion Xforce

Deel

Sfeerfoto bij blog Kubernetes

Back-up in Kubernetes vaak onderbelicht

Binnen het veelzijdige cloud native ecosysteem van Kubernetes zijn back-ups vaak een onderbelicht onderwerp. Soms zijn back-ups nodig om een update terug te rollen. In andere gevallen biedt het maken van een back-up een oplossing om resources die je niet via een pipeline hebt gedeployed toch te kunnen herproduceren. Ook zijn back-ups belangrijk voor het beschermen van je stateful applicaties. Deze blog neemt je mee door verschillende open source-producten die een oplossing bieden voor de verschillende back-upbehoeften binnen organisaties.

Kubernetes back-ups: relevante concepten

  • CSI driver

De Container Storage Interface (CSI) driver dient als een abstractielaag tussen het containerplatform en de storage provider. Storage vendors kunnen plugins schrijven voor de CSI driver zonder afhankelijk te zijn van de lifecycle van Kubernetes.

  • Snapshot API

De snapshot API is een uitbreiding op de CSI driver. Gebruikers kunnen hiermee snapshots maken van persistent volumes. De CSI driver voor de storage back-end moet dit uiteraard wel ondersteunen. De Snapshot API is sinds 1.20 Generally Available (GA).

  • Restic

Restic is een open source file-level back-upoplossing. Restic ondersteunt veel storage back-ends en wordt daarom door verschillende tools gebruikt om back-ups te maken van storage die (nog) geen CSI driver heeft zoals NFS. 

1. Etdc back-up

De basis van Kubernetes is de etcd key value store. Het back-uppen van de etcd database is een belangrijk onderdeel van elke Kubernetes-upgrade en veel Kubernetes-engineers zullen het etcdctl-commando nog in de vingers hebben van het CKA-examen. 

Rancher onderschrijft het belang van de etcd back-ups en heeft een scheduler en restore ingebouwd in zijn UI. Je kunt de back-ups zowel lokaal als in S3 opslaan. Ook kubeadm maakt automatisch een etcd back-up bij het upgraden. Het team van catalogicSoftware heeft het tooltje KubeDR opgezet om etcd back-ups voor verschillende Kubernetes-platformen te automatiseren en op te slaan in S3. Het GitHub-project heeft sinds 2020 geen updates gehad en wordt ondersteund tot aan versie 1.17. Wellicht kan het ter inspiratie dienen voor je eigen etcd back-upoplossing.

Het team van CatalogicSoftware heeft inmiddels een (gratis) bètaversie gelanceerd van hun SAAS back-up offering CloudCasa. Zeker de moeite waard om eens te bekijken en wellicht te gebruiken voor je homelab of testomgeving.

2. Back-up resources en volumes

Het eerste principe in Google’s cloud native architectuur is design for automation. In lijn hiermee en met andere principes omtrent GitOps en Infrastructure as Code (IaC) is het een best practice om Kubernetes-resources te deployen met behulp van pipelines of GitOps-tools. Toch weten we dat er vaak resources zijn die in het verleden ‘even snel’ met de hand zijn aangemaakt of waarvoor een structurele oplossing zoals ConfigMaps of Secrets te complex is. Dit vraagt om een oplossing waarbij je resources kunt restoren in het geval van verkeerde wijzigingen of verwijderen. Daarnaast is het voor resources zoals persistent volumes niet alleen belangrijk om de resources te back-uppen, maar ook de data zelf. Een oplossing die deze resources back-upt maakt het mogelijk om volledige namespaces inclusief de data snel terug te zetten. Een andere use case is het snel repliceren van omgevingen om problemen te herproduceren of tests uit te voeren.

Velero

Velero is een bekende back-upoplossing binnen het Kubernetes-ecosysteem. Velero, begonnen als Heptio’s Ark voor de overname door VMware in 2018, is een in-cluster back-upoplossing voor zowel Kubernetes-resources als de inhoud van persistent volumes. Je kunt Velero installeren met een helm chart, de Velero CLI of losse yaml files. De installatie deployet een controller en verschillende CRD’s waarmee je back-up schedules, targets en restores maakt.

De Velero resource back-ups bestaan uit een tarball die naar de storage provider wordt gestuurd. Dit kan een  S3 compatible object store, Azure Blob storage of vSphere volume zijn. Naast de functionaliteit om resources te back-uppen, maakt Velero ook snapshots van persistent volumes. Het voordeel van Velero hierbij is dat het naast de CSI driver ook nog gebruikmaakt van de plugins die speciaal voor Velero zijn geschreven voordat het de CSI driver ondersteunde. Mocht jouw vendor nog geen Velero plugin of CSI driver hebben, dan ondersteunt Velero ook nog Restic.

Om Restic te gebruiken deployet Velero een daemonset die via een hostpath volume toegang heeft tot de persistent volume claims van pods. Vervolgens wordt er een Restic back-up command uitgevoerd om de data te back-uppen naar een Restic back-end, bijvoorbeeld een S3 bucket. De data worden vervolgens geëncrypt. Helaas slaat Velero de private key op in dezelfde bucket, dus wie toegang heeft tot de bucket heeft toegang tot de data. Om te kunnen restoren, voegt Velero een init container toe aan de pod met de pvc die de data restoret in het volume. Als laatste ondersteunt Velero nog zogenaamde hooks. Hiermee kun je (beperkte) applicatie logic toevoegen.

Gemini

De back-upoplossing Gemini ondersteunt het maken van storage snapshots met gebruik van de CSI driver. De tool is gebouwd door Fairwinds, dat op dit moment aan de weg timmert met projecten zoals Polaris (check Kubernetes-resources voor best practices), Goldilocks (resource optimalisatie) en het recente Saffire (gebruik meerdere container registries voor je Kubernetes-cluster).

Je installeert Gemini net zoals Velero makkelijk met een Helm chart of losse yaml files. Hoewel Gemini momenteel geen unieke features heeft, zijn we benieuwd naar toekomstige ontwikkelingen. Zeker gezien het trackrecord van fairwinds.

3. File level back-ups

De CSI driver en snapshot API maken volume based snapshots. Hiermee kun je echter geen individuele files restoren of back-uppen. Ook bieden de back-up tools vaak weinig (Velero) of geen support (Gemini) voor applicatie logic. Door het restoren van selectieve files kun je gerichter bestanden herstellen. Daarnaast biedt het back-uppen van files op andere storage een extra beveiliging tegen storingen op storageniveau.

Stash

Stash is een back-upoplossing van AppsCode (o.a. Guard voor authenticatie, Voyager, een Envoy ingress controller en Searchlight voor Kubernetes alerting). Naast de enterprise editie inclusief support heeft Stash ook een community versie die het overgrote deel van de functionaliteiten biedt.

Stash ondersteunt net zoals Velero zowel snapshots via de CSI driver als via Restic. Ook kun je Stash met een Helm chart of losse yaml files installeren. Stash ondersteunt echter ook file level back-ups. De bestanden worden geëncrypt en opgeslagen in een storage target. Stash maakt het makkelijk om bij het restoren van resources (restore session) individuele files te restoren met behulp van een init container. Aan deze init container kun je pre restore hooks meegeven voor het uitvoeren van de restore.

In de enterprise variant van Stash zit ook nog functionaliteit om specifieke add-ons te gebruiken voor verschillende databases. 

4. Data Management

De verschillende open source-oplossingen hebben overlappende functionaliteiten. Vanuit de applicatie is het echter het belangrijkst dat de back-up op de juiste manier gebeurt en de juiste gegevens oplevert. Hiervoor is vaak specifieke operationele kennis nodig van het product en de datastructuren.

Kanister

Kanister is een back-up framework dat zich richt op het managen van back-up logic van specifieke (database) applicaties. Het is een open source framework gestart door Kasten (by Veam), dat onder andere bekend is door zijn VMware back-up tooling. Het framework maakt back-ups van de database met daarvoor speciaal geschreven logic, blueprints genaamd.

Zoals operators de operationele kennis van applicaties in code definiëren, zo definieert Kanister de operationele kennis van back-ups. Kanister biedt functionaliteit om kube exec commands uit te voeren. Dit zijn commando’s die net zoals kubectl exec op de container worden uitgevoerd of met behulp van een sidecar, denk hierbij bijvoorbeeld aan het maken van database dumps. Voor complexere back-upoperaties, zoals incremental back-ups of het bewerken van datasets, wordt een kube task gebruikt in een aparte pod. Dit geeft veel flexibiliteit. Je kunt de task makkelijk delen met behulp van Kanister-functies en -blueprints en die in modulevorm laten gebruiken door andere teams.

Van control plane tot databewerkingen

De verschillende tools binnen de Kubernetes-wereld laten zien welke soorten back-ups belangrijk zijn. De etcd back-up is van belang voor cluster administrators. De back-up van Kubernetes resources biedt je in ‘day 2 operations’ de optie om resources die niet zijn geborgd in IaC toch te borgen. Het maken van snapshots van je storage is belangrijk voor de inhoud van je persistent volumes, zodat je fouten of datacorruptie makkelijk kunt terugdraaien. Terwijl het back-uppen met Restic en file level back-ups ook voor een disastery recovery-optie zorgt met het opslaan op andere storage. Als laatste bieden verschillende gradaties van custom logic voor applicaties de mogelijkheid om data-operaties uit te voeren. 

Ben je ook op zoek naar back-upoplossingen binnen de Kubernetes-wereld? We helpen je graag bij het inventariseren van de back-upbehoeften in je organisatie en het bepalen van de juiste oplossingen.

Meer over ons weten?

ContainerisatieNieuws & blogsOnze casesOver ons

Wil je net als Sven aansluiten bij ons expert-team Containerisatie?

Mark Luursema

Mark Luursema

Directeur