Kuber-wattes? Alles over Kubernetes, containers en orchestration

Pim van der Linden

29 september 2021

Software development heeft maar één doel: features realiseren die waarde toevoegen aan het werk of leven van je gebruikers. Maar tussen het bouwen van die features en het gebruiken ervan zit (vrijwel) altijd een deploymentproces. En juist daar zien we de laatste jaren veel innovatie. Eén van de belangrijkste: het werken met containers en Kubernetes. In deze longread leg ik je uit wat dat inhoudt.

In het deploymentproces spelen ‘containers’ steeds vaker een belangrijke rol. Bedrijven als  Docker maken het ‘containerizen’ van apps beschikbaar voor iedere developer, maar wat is een container nou eigenlijk? En wat kan ik ermee? En wat heeft dat product met die onuitspreekbare naam Kubernetes ermee te maken?

Inpakken en verschepen

Softwarecontainers hebben veel overeenkomsten met de containers die je op containerschepen vindt. Je kunt van alles in een container stoppen: bananen, auto-onderdelen of teddyberen. Maar wat er in de container zit blijft in de container en is volledig afgeschermd van de inhoud van alle andere containers. Een containerschip zorgt ervoor dat de container veilig in de volgende haven komt, zonodig van stroom voorzien wordt en niet overboord slaat.

Apps worden door developers ‘ingepakt’ in containers, die alles bevatten wat de app nodig heeft om te draaien. Alles is meeverpakt, dus de server hoeft alleen het besturingssysteem en de basis-infrastructuur te leveren. Containers zijn ontworpen om lichtgewicht te zijn. Dat betekent dat ze alleen noodzakelijke dingen bevatten voor het functioneren van de container en geen overbodige ballast (zoals een volledig besturingssysteem).

Flexibel schalen

Wat op een ‘echt’ containerschip niet kan, maar op een server wel, is kopieën maken van een container. Omdat containers zo lichtgewicht zijn, kunnen ze snel worden gedupliceerd. Door on demand extra instanties van een container te lanceren kunnen pieken in belasting makkelijk worden opgevangen, zonder iets te hoeven veranderen aan de software in de container zelf. Dit betekent tegelijkertijd dat je ook kosten kan besparen. Er wordt namelijk afgeschaald als er minder capaciteit nodig is. 

Als je het nog verder wilt optimaliseren, kun je apps ook in verschillende containers opdelen, die met elkaar communiceren. Misschien ben je de term microservices al eens tegen gekomen. Containers maken het mogelijk een applicatie in microservices op te splitsen en die vervolgens met elkaar te laten communiceren.

Betrouwbaar en repliceerbaar

Containers worden automatisch opgebouwd vanuit een tekstbestand, het template. Zo wordt een container altijd ingericht zoals jij het vooraf bedacht hebt, zonder handmatige configuratie op de server zelf. Dat maakt containers betrouwbaarder dan een grote server waar iedereen tegelijkertijd op aan het werk is en waarop veel handmatige en slecht te herleiden aanpassingen worden gedaan. Containers zijn hierdoor snel reproduceerbaar. 

Terugschakelen naar een vorige versie, als een nieuwe versie bijvoorbeeld voor problemen zorgt, is stukken makkelijker. Ook kun je er als ontwikkelaar op vertrouwen dat een container die lokaal goed werkt, op een productie-omgeving net zo goed werkt. Het werken met containers zorgt dus dat veel zorgen uit je deploymentproces verdwijnen.

Kubernetes: dirigent van het orkest

Kubernetes: dirigent van het orkest

Maar je wilt meer dan makkelijk deployen. Je wilt ook dat containers met elkaar en de buitenwereld kunnen communiceren. Daarnaast wil je dat je app altijd blijft werken, ook als een server faalt. Containers met elkaar laten communiceren, slim uitrollen en goed verdelen over meerdere ‘schepen’, dat is wat Kubernetes voor je kan doen. Deze slimme software zorgt ervoor dat jouw applicatie kan schalen, dat je snel nieuwe containers toe kan voegen of weg kan halen en dat containers die vastlopen of fouten vertonen worden vervangen. 

Kubernetes is dus in feite de dirigent van het orkest. In het jargon heet dat een container orchestrator. Er zijn meer producten die dit kunnen en het is een markt waarin heel veel gaande is, maar de laatste jaren is Kubernetes als de nieuwe standaard uit de strijd gekomen. Zoals je weet zitten wij bij Enrise niet vast aan één technologie. Wil je dus met een andere orchestrator aan de gang, zoals AWS Elastic Container Service, dan helpen we je daar ook graag mee. Tegelijkertijd zien wij dat Kubernetes voor veel toepassingen op dit moment de juiste keuze is.

Eenvoudig configureren

Kubernetes is een intelligent systeem. Je legt je gewenste configuratie vast in templates en de intelligentie van het systeem vogelt zelf uit hoe die configuratie het best gerealiseerd kan worden. Kubernetes regelt de health checks van je containers, schaalt binnen de grenzen die jij stelt af en bij, en rolt de versies van de containers uit die jij in je template hebt staan. Je kunt zo ook makkelijk een nieuwe versie van je applicatie testen bij een klein deel van je gebruikers.

Kubernetes, DevOps en wat het jou oplevert

Kubernetes is het perfecte platform om grote stappen te zetten met DevOps. Maar zelfs als je niet overgaat naar DevOps en Kubernetes alleen gebruikt om configuraties consistent te houden en apps automatisch te schalen, heeft het al erg veel voordelen.

Het belangrijkste is dat je af bent van de grote, big bang deployments die geregeld veel hoofdpijn opleveren. Door snel achter elkaar kleine deployments te doen en automatisch te testen krijg je  weer controle over je development- en deploymentproces. Werkt een nieuwe feature niet als verwacht? Dan kan je in zeer korte tijd een verbetering doorvoeren met dit process. Zo zijn er veel minder belemmeringen bij het bedenken, realiseren en testen van innovaties en kun je als bedrijf sneller inspelen op ontwikkelingen.

Een ander ontwikkelproces

Kubernetes is helaas nog niet plug-and-play. Om volledig gebruik te maken van de mogelijkheden van Kubernetes, moet je je apps zo opzetten dat ze verpakt kunnen worden in meerdere lichtgewicht containers. Ben je gewend om grote, monolithische apps te deployen of heb je veel legacy, dan kan een investering in Kubernetes snel veel voordelen opleveren. En omdat deployen zo makkelijk wordt, kun je veel parallelle acceptatie-omgevinkjes opzetten. Zo kun je allerlei nieuwe features apart testen en apart naar een productie-omgeving deployen als ze zijn goedgekeurd. Dat zorgt ervoor dat nieuwe functionaliteit snel naar een productie-omgeving kan en dat gebruikers nauwelijks last hebben van downtime tijdens updates.

Investeren in kennis

De investering die je moet doen om Kubernetes goed in te kunnen zetten zit hem vooral in het opdoen van kennis. Maar ook: Geef je ontwikkelaars het juiste gereedschap in handen om je applicatie optimaal te laten draaien in de cloud. Met Kubernetes haal je veel extra verantwoordelijkheid het ontwikkelteam binnen en daar moeten je mensen mee om kunnen gaan. De stap naar Kubernetes en, eventueel, DevOps vraagt dat je als ontwikkelteam zelf verantwoordelijkheid neemt voor deployments. Dat betekent ook dat de samenwerking met je hostingpartij kan veranderen. Wil die nog uptimegaranties geven als je ontwikkelteam een groot deel van de productieomgeving in handen krijgt? 

Bij Enrise bieden we daarom een DevOps SLA, die precies hiervoor is ingericht. Het biedt je de mogelijkheid ons als derde lijn te bellen, ook in het weekend. We helpen klanten daarnaast met het inrichten van Kubernetes en het volledig DevOps-proces eromheen. Onze ervaring met Kubernetes in productieomgevingen heeft inmiddels vele klanten geholpen de oversteek te maken en de voordelen van Kubernetes in te zetten.

Meer weten?

Enrise heeft jaren ervaring met het inrichten van Kubernetes op bijvoorbeeld Google Cloud(GCP), Microsoft Azure en Amazon Web Services(AWS). Check bijvoorbeeld deze Beslist.nl case. Ben je benieuwd wat deze open source technologie voor jou kan doen? Bel 088-5553300, chat of mail ons. We vertellen je er graag meer over!