Blog overzicht

Kubernetes of Docker nodig? Wij helpen je kiezen!

Zowel Kubernetes als Docker zijn handige technologieën om met de cloud te werken. Met Docker kun je applicaties verpakken in een lichtgewicht container die je vervolgens vrij kunt gebruiken in verschillende omgevingen. Kubernetes helpt je applicatiecontainers deployen, beheren en orkestreren. Maar welke technologie heb jij nodig voor je project? 

Laten we met het kortst mogelijke antwoord beginnen: misschien wel allebei. Kubernetes (ook wel bekend als K8s of ‘Kube’) heeft containers nodig om zijn ding te doen. Docker gebruik je om containers te maken. Door Kubernetes en Docker te combineren kun jij je focussen op echte uitdagingen (de code in de containers ontwikkelen, een architectuur plannen, en ga zo maar door). 

Wat zijn containers?

Een langere versie van het antwoord is iets complexer. Wat een container voor applicaties doet, is te vergelijken met wat een Virtual Machine (VM) voor omgevingen betekent. Met een hypervisor kan een VM softwarematig communiceren met fysieke hardware. Dat maakt het mogelijk om verschillende besturingssystemen te installeren op één machine en zo omgevingen mee te nemen van machine naar machine zonder direct hardware te voorzien. 

Het nadeel aan een VM is dat het een volledig OS met alle benodigde toeters en bellen bevat. VMs zijn grote bestanden die je niet ‘even snel’ van a naar b verplaatst. Een container bevat geen OS, maar alleen de instructies die nodig zijn om één applicatie uit te voeren. Containerbestanden zijn klein genoeg om snel te verplaatsen van de ene omgeving naar de andere. Mits de omgeving met de applicatie om kan gaan, kun je ze snel deployen zonder je zorgen over libraries, dependencies en dat soort moeilijkheden te maken; dat wordt door de container afgedekt. 

Docker 

Docker is één van de meest populaire platforms om applicatiecontainers te maken. Iedere container begint als een eenvoudig tekstbestand, ook wel bekend als een Dockerfile. Hierin definieer je welke instructies uitgevoerd moeten worden en welke middelen nodig zijn om dat te doen (denk aan werkmappen, netwerktoegang, andere Docker images, etc.). Docker maakt met het ‘docker build’ commando van dit tekstbestand een Docker image. Deze image is de container die vervolgens via de Docker runtime start en instructies uitvoert. 

Omdat Docker images (en containers in het algemeen) klein zijn, kun je ze snel deployen in de cloud. Stel bijvoorbeeld dat je de omgeving van een verzekeraar opzet met Docker. Binnen die omgeving kun je een Docker image bouwen met daarin een applicatie die het kredietrisico van klanten checkt. Hiermee zorg je dat alle medewerkers dezelfde tool hebben om deze check uit te voeren. Neemt de vraag naar controles toe, dan is het eenvoudig om binnen de cloudomgeving meerdere instances van de check te draaien. Is er een update nodig, dan herwerk je de Dockerfile en zet je een geüpdatete Docker image in.

Kubernetes 

Als het op het updaten en beheren van containers aankomt, kun je Kubernetes goed gebruiken. Dit is een containerorkestratieplatform. Kubernetes zet containers klaar voor gebruik in pods. Het kan zelfs verschillende containers samenvoegen in één pod om zo een complexe dienst klaar te zetten voor gebruik, maar dat terzijde. Pods plaatst Kubernetes in een node, dat is een fysieke of virtuele machine die onderdeel is van de cloudomgeving waar Kubernetes in draait. Nodes worden samengebracht in clusters zodat Kubernetes op een slimme manier met de resources om kan gaan. 

Binnen het voorbeeld van de financiële dienstverlener met een risicoanalyse app in een container, kan Kubernetes de Docker image klaarzetten in een pod. Als iemand de risicocheck draait, activeert de pod die daarvoor klaar staat. Gaan meerdere medewerkers gelijktijdig deze check uitvoeren, dan activeert Kubernetes (al dan niet met menselijke inbreng) meerdere pods. Zo schaalt de cloud mee met de vraag. 

Valt een node uit, dan maakt Kubernetes verse pods aan in een andere node. Zo is onder meer downtime te ondervangen als een systeem in de omgeving uitvalt. Voert een developer updates uit op de inhoud van de container, dan kan zorgt Kubernetes dat iedere nieuwe pod die wordt aangemaakt de vernieuwde container gebruikt. Zo is het mogelijk om rolling updates op een live omgeving uit te voeren. 

Kubernetes en Docker 

Er zit in dit verhaal één addertje onder het gras. Op het moment dat Kubernetes containers in pods plaatst, is het zelf niet verantwoordelijk voor het starten van de code. Daar gebruikt het platform de Container Runtime Interface (CRI) voor. Dit is een door Kubernetes ontwikkelde standaard runtime voor containers. 

Helaas ondersteunt Docker de CRI niet direct. Zij gebruiken een eigen runtime. Docker was heel lang zo’n beetje het enige goede platform on containers mee te ontwikkelen. Daarom was Kubernetes uitgerust met Docker Shim. Dit was een extra laag voor de CRI die Docker images van een eigen runtime voorzag. Tegenwoordig zijn er verschillende omgevingen om containers te ontwikkelen die direct door CRI zijn aan te zwengelen. Daarom bevat Kubernetes niet langer de Docker runtime. 

Desondanks is het nog steeds mogelijk om Kubernetes en Docker te combineren. Dockerfiles gebruiken de (door Docker ontwikkelde) OCI standaard (Open Container Initiative). Met wat aanpassingen kan Kubernetes images op basis van Dockerfiles alsnog met CRI van een runtime voorzien.

Heb ik Docker of Kubernetes nodig voor mijn project?

Of je Docker, Kubernetes of beide platforms nodig hebt voor jouw project, hangt van je doelstellingen af. Waar je ook op uitkomt, bij ons kun je terecht om met deze technologie te werken. Heb je ondersteuning of advies nodig? Wij staan voor je klaar. 


Beoordeel dit artikel

Deel dit artikel

Gerelateerde artikelen

Blog overzicht

Auteur: TIP-redactie

Is de auteursnaam die we gebruiken wanneer een blogpost in teamverband door meerdere TransIP’ers is samengesteld. Denk bijvoorbeeld aan een eventverslag of onze Recommends.