kubernetes,containers,schaalbaarheid,efficientie,app

Containers bieden veel ruimte in de scheepvaart

Geplaatst door

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.

Containers vs virtuele machines

Volgens een studie van 451 Research zal de acceptatie van applicatiecontainers jaarlijks met 40% toenemen tot 2020. Dankzij containers kan je als nooit tevoren een snelle en flexibele ontwikkeling en opleveren van je app. Alleen wat is het nou?

  • Hoe verschillen containers van virtuele machines (VM)?
  • Als containers van nature tijdelijk en makkelijk verwijderd worden hoe zit dat dan met opslag?
  • Hoe vullen containers bestaande virtualisatie- en orkestratieoplossingen aan?

De hedendaagse fysieke servers heeft zoveel capaciteit en rekenkracht beschikbaar dat een applicatie die overvloed aan bronnen niet optimaal kan benutten. Feitelijk zijn toen de VMs geboren.

Ik vergelijk virtualisatie altijd graag met een glas water. De inhoud van dat glas is de maximum. Meer kan er niet in, doe je dat toch overstroomt die. De kracht van virtualisatie is dat er dan automatisch meer glazen worden bijgeplaatst of minder naar mate je die ruimte niet meer nodig hebt. Je kan op een enkele fysieke server dus meerdere virtuele servers installeren. Lees meer over virtualisatie ».

Dat virtualisatie een hoop voordelen heeft gebracht hebben we de afgelopen jaren mogen mee maken. Zeker de applicatieontwikkeling heeft dit enorm versneld en geïnnoveerd. Er kon steeds meer. Inmiddels zijn we het punt bereikt dat ook deze benadering een keerzijde heeft. Namelijk elke VM heeft afzonderlijk een besturingssysteem draaien. Daarbovenop draait de applicatie. Je hebt dus een stukje overhead wat geheugen, rekenkracht en opslagruimte kost. Bovendien kost dit ook een licentie en onderhoud. Met name in de levenscyclus van softwareontwikkeling is dit lastig. Je doorloopt een ontwikkelfase, test en productie. Wat ook te denken aan het herstel na een calamiteit. Ook de portabiliteit van apps tussen publieke, private en traditionele datacenters is lastig.

Wat zijn dan die containers

Bovenstaande animatie geeft eenvoudig weer wat Kubernetes zijn en kunnen. De container orkestratie is ontstaan uit de populariteit van besturingssysteem-virtualisatie. Deze technologie heeft het afgelopen decennium software in staat gesteld voorspelbaar en betrouwbaar te blijven werken bij het verplaatsen tussen de verschillende virtuele servers. Waarbij containers een manier bieden om deze geïsoleerde systemen op één server of host-besturingssysteem uit te voeren.

Containers staan boven op een fysieke server en het bijbehorende host-besturingssysteem, bijvoorbeeld Linux of Windows. Elke container deelt de kern van ieder besturingssysteem host en meestal ook de zogenaamde binaire bestanden en bibliotheken. Deze gedeelde componenten zijn alleen-lezen. Containers zijn dus uitzonderlijk “licht”: ze zijn slechts megabytes groot en hebben slechts enkele seconden nodig om te starten, tegenover gigabytes en minuten voor een VM.

Bovendien vermindert het beheer bij containers aanzienlijk. Alleen al omdat ze een gemeenschappelijk besturingssysteem delen. Je hoeft dus nog maar slechts één besturingssysteem te verzorgen, voeden en patchen. Dit concept is vergelijkbaar met wat we ervaren met hypervisor-hosts: minder beheerpunten maar een iets hoger foutdomein. Kort gezegd, containers zijn lichter en draagbaarder dan VMs.

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 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, container
Bron afbeelding: Lynda.com

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.

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.

Virtuele machines vs Containers vs Serverloos

virtuele machines, vms, containers, serverloos, infrastructure as code
Bron diagram: Microsoft Learn

Bovenstaand diagram laat de verschillen tussen de drie smaken zien. In alle gevallen is de onderliggende laag fysieke hardware in een of meerdere datacenters. Daarbovenop ligt in alle gevallen het “basis” besturingssysteem. Daarna worden de verschillen zichtbaar. Bij virtuele machines (zoals eerder in deze blog beschreven) worden voor iedere VM die nodig is als het ware een volledig nieuwe machine geïnstalleerd. Inclusief de virtuele hardware. Hierdoor kan je wel meerdere servers op dezelfde hardware draaien, het is alleen niet erg efficiënt.

Bij containers zie je dat er per app een container wordt ingericht en opgestart en dat er winst behaald kan worden. Bij serverloos gaat deze efficiëntie alleen maar verder en ga je elke functie apart verpakken als het ware. Dit noemen we ook wel Infrastructuur als Code. De code kan je dan direct uitvoeren zonder dat besturingssystemen nodig zijn.

Het verschil tussen serverloze modellen en VM’s en containers is dat je alleen betaalt voor de verwerkingstijd die elke functie bij uitvoering gebruikt. Voor virtuele machines en containers worden altijd kosten in rekening gebracht wanneer deze worden uitgevoerd, ook als er geen toepassingen actief zijn.

Slimmer omgaan met systeembronnen

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. In mijn vervolg blog over dit onderwerp meer over de voordelen voor applicaties.

Referenties

[1] Microsoft (2015). Docker Swarm Clusters on Azure
[2] Wikipedia (2014). Kubernetes
[3] YouTube (2018). What is Kubernetes
[4] 451 Research (2017). Application containers will be a $2.7bn market by 2020 (PDF)