kubernetes,containers,schaalbaarheid,efficientie,app

Containers bieden veel ruimte in de scheepvaart

Kubernetes is hip. Alleen als je zelf geen ontwikkelaar bent, is je reactie kuberwat en reikt je kennis waarschijnlijk niet verder als ‘het heeft iets met containers te maken’. Wat zorgt er dan voor dat deze technologie plots zo populair is. En wat kan jij ermee? Misschien sta je aan het hoofd van een startup die de applicatie in kwestie als dienst aanbiedt. Of wil je graag weten wat die cloud je dan te bieden heeft? Wat de app ook is: jij bent briljant dus de vraag naar je app zal groeien :-).

Kubernetes (Grieks voor stuurman of piloot) is, heel ruw gesteld, een platform voor de uitrol en het management van containers op grote schaal. In de transportwereld worden de fysieke containers al jaren gebruikt vanwege de flexibiliteit en schaalbaarheid. Je kan ze stapelen en optimaal benutten. Dit precies wat je ook met de container in deze blog kan. Overigens zag Kubernetes onder de naam ‘Seven of Nine’ het levenslicht. Kubernetes is oorspronkelijk door Google ontwikkeld om aan de enorme vraag van haar zoekmachine te kunnen voldoen.

Virtuele machines: nu al verouderd

Stel je voor dat je een applicatie wil draaien op een server in de cloud. Hoogstwaarschijnlijk stop je de applicatie in een virtuele machine (VM). Die virtuele computer doet zich voor als een fysieke computer, zodat het voor de applicatie lijkt alsof ze op een echt systeem draait. De VM is als het ware je fysieke server en draait daarbovenop een besturingssysteem. Dat kan Windows of je favoriete Linuxdistributie zijn.

Om tegemoet te komen aan de vraag, dien je schaalbaarheid te realiseren. Dit doe je door meerdere installaties van je app te draaien. Dat zou je traditioneel doen door nieuwe VM’s te creëren. Die dienen telkens een hele pc na te bootsen, inclusief volledig besturingssysteem, met daarop uiteindelijk jouw app. Dat wil zeggen dat iedere installatie van de app best veel van de resources vraagt. Keerzijde dat je al snel betaalt voor heel wat rekenkracht. Dit omdat een VM-minimumvereisten heeft wat rekenkracht en geheugen betreft. Alleen het besturingssysteem heeft al een bepaald stuk van de beschikbare capaciteit nodig. De kans is groot dat je app best licht is, en op zich helemaal niet zoveel geheugen of rekenkracht nodig heeft.

Kubernetes containers zijn kleiner en efficiënter

kubernetes,containers,schaalbaarheid,efficientie,app
Simplistische weergave van werking van Azure Container Service

Dat betekent dat er heel wat rekenkracht wordt verspild. Dat is jammer, en vooral duur. De container biedt uitkomst. Containers kan je kort door de bocht zien als een soort lightversie van VM’s. Ze gaan echter veel slimmer te werk. In plaats van een hele pc na te bootsen, bevat een container alleen de bibliotheken die een functie of applicatie nodig heeft. De app wordt als het ware verpakt in een doosje met daarin alleen het hoogstnodige om optimaal de functioneren. Op deze zelfde manier wil jij jouw applicatie gaan aanbieden en dan met een strik erop, natuurlijk.

Een container is veel kleiner en lichter dan een virtuele machine. Dit is alleen al omdat er geen volledige versie van een besturingssysteem in draait. En omdat een container geen hele pc virtualiseert, kan hij bovendien veel flexibeler gebruik maken van de beschikbare hardware.

Containers zijn zo een heel efficiënte technologie om apps en workloads te draaien in een serveromgeving. Zit je app in een container en dien je meerdere installaties te creëren om aan de vraag van je gebruikers te voldoen, dan zal je veel minder servers en serverkracht moeten inzetten voor hetzelfde resultaat. Efficiëntie en schaalbaarheid zijn hier de kernwoorden.

Orde in de chaos met containers

Schaalbaarheid heeft zo z’n keerzijde. Tien of twintig containers beheren is geen probleem, daarvoor hoef je trouwens niet verder te kijken dan de Docker Swarm[1], maar wat als je honderden of zelfs duizenden instanties van een applicatie nodig hebt, die draaien in een datacenter met honderden servers? Om kostenefficiënt te blijven, moeten al die workloads zo efficiënt mogelijk verdeeld worden over de beschikbare capaciteit. Op grote schaal is er geen IT-beheerder die een dergelijke klus handmatig wil uitvoeren.

Google ontwikkelde destijds Borg als een tool om grip te krijgen op het veelvoud aan gecontaineriseerde workloads. Seven of Nine en later Kubernetes zijn spin-offs van die technologie. Het laat een beheerder toe om heel eenvoudig containers uit te rollen, en neemt het management van de uitgerolde containers in het datacenter op zich. Sinds vorig jaar heeft Microsoft deze technologie omarmt onder de noemer Azure Kubernetes Service (AKS).

Hoge beschikbaarheid en schaalbaarheid

Kubernetes werkt met ‘pods’. Een pod is een omhulsel voor een of meerdere containers. In een pod plaats je enkel containers die nauw met elkaar samenwerken en dezelfde systeembronnen zullen gebruiken. Denk hierbij niet aan meerdere installaties van dezelfde applicatie, maar eerder een bundeling van verschillende gecontaineriseerde applicaties, die samen deel uitmaken van een workload. Alles wat in een pod zit, draait steeds op hetzelfde systeem.

Verder kan Kubernetes labels toewijzen aan bijvoorbeeld pods. Daarin kan je de functie van een pod omschrijven, of de stabiliteit ervan aangeven. Dat maakt het eenvoudig om pods met bepaalde containers of workloads terug te vinden. Zoiets klinkt misschien triviaal, maar als je Kubernetes in een grote omgeving met heel veel apps en app-installaties gebruikt, is het een must.

De replication controller maakt het dan weer eenvoudig om pods te klonen en nieuwe installaties aan te maken. De controller staat zo in voor het schalen van de workloads. Services zijn dan weer van belang omdat ze, in tegenstelling tot pods, nooit verdwijnen. Terwijl de replication controller extra pods kan aanmaken of verwijderen al naargelang de nood, blijft de service met bijhorende poortconfiguratie en IP-adres bestaan. Dat maakt het mogelijk voor andere applicaties om de service te vinden en ermee te verbinden, of er nu pods actief zijn of niet.

Volg je het nog? Platgeslagen zorgen containers voor extreem schaalbare omgevingen met een zeer hoge beschikbaarheid. Iedereen kan doen waar hij of zij goed in is. De ontwikkelaar kan blijven ontwikkelen aan gave functionaliteit binnen je app. Jij kan je startup of app naar het volgende niveau brengen waarbij gebruikersadoptie centraal staat.

Slimmer omgaan met systeembronnen

kubernetes,containers,schaalbaarheid,efficientie,app

Vanuit een financieel plaatje is de ingebouwde load balancer misschien wel het belangrijkst. Dat is de Kubernetes-functie die ervoor zorgt dat nodes zo efficiënt mogelijk verdeeld worden over de beschikbare server hardware. Moest je één node per server draaien, dan zouden containers niet zoveel efficiënter zijn dan traditionele VM’s. De load balancer zorgt ervoor dat nodes netjes serverkracht delen wanneer dat wenselijk is, of alsnog verspreid worden over meerdere servers wanneer er meer pk’s nodig zijn.

Een laatste trucje dat Kubernetes aan boord heeft, heeft te maken met high availability. Kubernetes houd je nodes immers permanent in het oog. Loopt er iets mis met de (virtuele) server waarop een node draait, dan zal Kubernetes zelf proberen om het probleem op te lossen. Lukt dat niet, dan zal het platform een nieuwe node activeren die de taak van de falende node kan overnemen, zonder dat daar menselijke tussenkomst voor vereist is.

Kortom Kubernetes containers is een erg technisch platform, waarvan het toch interessant is om in grote lijnen te weten wat het doet. Een IT-infrastructuur gebouwd op containers met Kubernetes is extreem krachtig, schaalbaar, redundant en efficiënt. Het is niet voor niets dat de technologie na amper enkele jaren al zo populair is.

Eén ding is zeker: Kubernetes is hip, en zal dat nog lange tijd blijven.

Referenties

[1] Microsoft (2015). Docker Swarm Clusters on Azure
[2] Wikipedia (2014). Kubernetes
[3] YouTube (2018). What is Kubernetes

Delen mag 🙂

Lees ook