Kubernetes Persistent Volumes lossen een belangrijk probleem op bij het opslaan van persistente gegevens als databases en logbestanden in Kubernetes. De volumes koppelen de opslag van data los van de containers waarin je je applicatie hebt ondergebracht. Dit betekent dat de gegevens altijd bewaard blijven, ook als je een container verhuist, herstart of zelfs verwijdert. Onder meer bij stateful applicaties is dit van cruciaal belang.
Gegevens veiligstellen
Een belangrijke uitdaging bij het werken met Kubernetes is dat de containers en pods waarin je deze onderbrengt, een beperkte levensduur kennen. Dit betekent dat zij na verloop van tijd verdwijnen, herstarten of op een andere plek worden uitgerold. De data die je met behulp van een gecontaineriseerde applicatie verzamelt, wil je in veel gevallen echter langer bewaren. Bijvoorbeeld bewaren van historische gegevens, met het oog op compliance of om te voorkomen dat gebruikers na een herstart van een container gegevens opnieuw hoeven in te voeren.
Kubernetes Persistent Volumes maken dit mogelijk. Een Kubernetes Persistent Volume kan gegevens lokaal of op een netwerkshare opslaan, maar ook in een block storage volume bij een cloud provider. Een belangrijk voordeel is dat als je een container herstart of deze crasht, de data bewaard blijven.
Relevant voor diverse toepassingen
🔐 Belangrijke gegevens beschermen
Kenmerkend voor Kubernetes is dat je een container met één druk op de knop kunt verwijderen of opnieuw uitrollen. Dit is uiteraard erg handig, maar brengt ook risico’s met zich mee. Staan er in een container data opgeslagen en heb je dit te laat in de gaten? Dan kun je bij het verwijderen van een container ook onbedoeld data vernietigen. Door het wegschrijven van gegevens in een Kubernetes Persistent Volume voorkom je dit. Niet alleen koppel je dataopslag hiermee los van de container, ook zijn er waarborgen ingebouwd die voorkomen dat je een volume dat actief in gebruik is door pods kunt verwijderen.
📦 Data loskoppelen van containers
Zijn de gegevens waarmee je werkt voor je business of applicatie van cruciaal belang? Dan kan het werken met Kubernetes Persistent Volumes een aantrekkelijke optie zijn. Zo kun je gegevens hierdoor onafhankelijk van containers beheren, dat het backuppen van de data vereenvoudigd. Ook kun je eenvoudiger extra opslagruimte toewijzen en de prestaties van de dataopslag monitoren.
🛟 Voortbestaan van databases zekerstellen
Als een applicatie met een database werkt, wil je zekerstellen dat deze database te allen tijde bewaard blijft, ook indien een container crasht of herstart. Zo voorkom je dataverlies, zorg je voor extra gebruikersgemak doordat gebruikers gegevens niet opnieuw hoeven invoeren en zorg je dat je aan wet- en regelgeving voldoet.
📑 Logbestanden altijd behouden
Van iedere container kun je logbestanden bijhouden. Schrijf je deze weg naar de container zelf? Dan gaan de logbestanden verloren zodra de container crasht. Een gemiste kans, want de informatie uit logbestanden kan helpen bij het analyseren van een crash en oplossen van het onderliggende probleem. Door het opslaan van logbestanden in een Kubernetes Persistent Volume zorg je dat zij altijd behouden blijven. Net als bij databases kan dit met het oog op compliance zeer relevant zijn.
Opslagruimte reserveren met een Persistent Volume Claim
Met behulp van een Kubernetes Persistent Volume Claim reserveer je een Kubernetes Persistent Volume voor een container. Je kunt een Persistent Volume Claim dan ook zien als een verzoek voor het mounten van een Kubernetes Persistent Volume.
Bij het indienen van een dergelijk verzoek kun je aangeven aan welke specificaties een Kubernetes Persistent Volume moet voldoen. Deze specificaties definieer je niet in een Persistent Volume Claim, maar geef je aan met behulp van een StorageClass. Beheerders kunnen in StorageClasses de vereiste specificaties definiëren, zoals de back-end policies en prestaties.
De lifecycle van een Kubernetes Persistent Volume
Zoals gezegd is een Persistent Volume Claim een verzoek voor het mounten van een Kubernetes Persistent Volume. Tussen de twee vindt dan ook allerlei interactie plaats, wat we ook wel de lifecycle van een Kubernetes Persistent Volume noemen. Deze lifecycle bestaat uit verschillende fasen:
Provisioneren
In deze fase creëer je een Kubernetes Persistent Volume aan de hand van een Persistent Volume Claim.
Verbinden
De volgende fase bestaat uit het koppelen van een specifieke Kubernetes Persistent Volume aan een Persistent Volume Claim. Zodra deze koppeling is gerealiseerd, zijn ze exclusief aan elkaar verbonden.
Gebruiken
In deze fase maakt een pod gebruik van een Persistent Volume Claim, en daarmee van de hieraan gekoppelde Kubernetes Persistent Volume.
Herclaimen
Je kunt de koppeling tussen een Kubernetes Persistent Volume en Persistent Volume Claim verbreken. Zodra je een Persistent Volume Claim weer vrijgeeft, bepaalt het Kubernetes cluster aan de hand van je ‘herclaimbeleid’ wat er met een Kubernetes Persistent Volume moet gebeuren. Het cluster kan het volume behouden, recyclen of verwijderen.
Kubernetes Persistent Volume vs Docker volume
In Docker sla je gegevens op in een Docker volume, die je als een regulier bestand of directory opslaat op de host. Zo kunnen Docker containers onder meer data buiten de eigen container gebruiken, of een Docker volume met meerdere containers delen. Zodra je een Docker container start, mount Docker volumes op het bestandssysteem van de container.
Deze werkwijze is een belangrijk verschil met Kubernetes Persistent Volumes. Waar Docker een Docker Volume in de container opslaat, bewaart Kubernetes een Kubernetes Persistent Volume volledig los van de container. De levensduur van een Kubernetes Persistent Volume is dan ook niet afhankelijk van de levensduur van een container, iets dat bij Docker wel het geval is.
🙋 Wil je aan de slag met Kubernetes Persistent Volumes? Onze Kubernauts ondersteunen je graag! Lees hier meer over onze ondersteuning voor je applicaties op Kubernetes.