De afgelopen jaren wordt er steeds meer ontwikkeld met containers. Containertechnologie hebben veranderd hoe we software leveren en hoe we microservices inzetten om applicaties te bouwen. Doordat alles compacter wordt gebouwd en verpakt, is ook de noodzaak voor management groter geworden. Kubernetes vs Docker (Swarm) zijn twee van de grote softwareoplossingen als het gaat om de orkestratie van containers. Allebei deze tools maken het mogelijk om een cluster van servers te beheren waar één of meerder containers op staan.
Voordat we de twee tools vergelijken is het eerst handig om de tools te introduceren.
Kubernetes
Kubernetes is een open-source orkerstratieplatform dat aanvankelijk door Google is ontwikkeld. Met Kubernetes is het mogelijk om grote hoeveelheden containerized applicaties te beheren. Deze containers zijn automatisch binnen een cluster van diverse services en systemen. Doordat Kubernetes helpt met de clustering ontstaat er redundantie en kan er gericht gestuurd worden naar het bereiken van High Availability (HA).
Kubernetes wordt ingezet voor complexe systemen waarbij de werkbelasting vaak verdeeld is over verschillende omgevingen (public clouds, private clouds). Veel grote internetbedrijven gebruiken Kubernetes om grote hoeveelheden containers te clusteren en te beheren. De software is onder andere ingericht op het snel kunnen opschalen van resources.
Lees ook: Wat is Kubernetes en waarom is het bijzonder?
Docker en Docker Swarm
Docker is de bekendste manier om open-source containers te gebruiken. Docker Swarm is het platform van hetzelfde bedrijf om deze containers mee te beheren.
Met Docker Swarm kunnen ontwikkelaars en systeemspecialisten een cluster van Docker-containers en nodes beheren in een enkel, virtueel platform. Door deze onderdelen te clusteren ontstaat een groep van meerdere containers die de kans op uitval minimaliseren, omdat er altijd een andere container is om op terug te vallen.
Elke software of services die met Docker werken, integreren vaak ook goed in Docker Swarm.
Docker Swarm is onder andere te beheren via Swarm Manager, maar ook via API’s zijn de containers en services te koppelen met andere services. Daarnaast is er een sterke mate van automatisering mogelijk: containers kunnen automatisch worden toegewezen aan het cluster, waarbij rekening gehouden wordt met de werkbelasting van het gehele cluster.
De Docker Swarm modus is geïntegreerd binnen de Docker Engine. Als je dus als Docker containers gebruikt, is het vrij eenvoudig om via de Docker Engine CLI gebruik te maken van de Swarm modus.
Kubernetes vs. Docker
Allebei de tools zijn open-source orkestratieplatforms. In de kern bieden ze vrijwel dezelfde functionaliteit, maar er zijn wel wat fundamentele verschillen in hoe de twee tools opereren. Hieronder een aantal punten voor Kubernetes vs. Docker.
De applicatiedefinities verschillen
Binnen allebei de tools is het mogelijk om microservices te verpakken en beheren in een containerformat. De manier waarop verschilt alleen.
Binnen Kubernetes is een applicatie te deployen met behulp van een combinatie aan (micro)services en pods.
Binnen Docker Swarm is het mogelijk om applicaties direct te deployen in een Docker Swarm cluster. Een YAML-bestand kan gebruikt worden om een multi-container te identificeren. Daarnaast kunnen ontwikkelaars Docker compose gebruiken om de applicatie te installeren.
Swarm inbegrepen bij Docker Engine
Het ‘Swarm’-gedeelte van Docker is standaard inbegrepen in de Docker Engine – dezelfde engine die je gebruikt voor het bouwen, distribueren en gebruiken van containers. Voor sommige ontwikkelaars is dit een voordeel, omdat ze niet een aparte tool hoeven te gebruiken. Dit levert snelheid op omdat je geen aanvullende tools hoeft te installeren.
Aan de andere kant is het niet lastig om Kubernetes te koppelen aan Docker containers. De twee integreren naadloos met elkaar. Het is functioneel gezien net zo goed mogelijk om een cluster in Kubernetes te bouwen als in Docker Swarm. Wel moet Kubernetes handmatig worden geïnstalleerd. Dit proces kan door sommigen gezien worden als complex.
Steile leercurve voor Kubernetes
Over het algemeen is Kubernetes een uitgebreider systeem dan Docker Swarm. Daardoor is de leercurve om het te leren vrij steil. Je moet bijvoorbeeld weten hoe de CLI van Kubernetes werkt (kubectl CLI) omdat je hier vrijwel al het beheer mee doet. Door de leercurve is Kubernetes niet voor iedereen weggelegd (al kun je het natuurlijk ook uitbesteden. Pssst. Managed Kubernetes.)
Schaalbaarheid
Allebei de systemen gaan op een iets andere manier om met het opschalen van werkbelasting. Kubernetes schaal over het algemeen iets minder snel dan Docker Swarm.
Dat komt omdat Kubernetes een alles-in-een framework is waar sterke garanties owrden vastgelegd over de ‘cluster state’ en de API’s die worden gebruikt.
Docker Swarm kan over het algemeen ‘on-demand’ opschalen, omdat het systeem wat minder complex is.
High Availability
Een belangrijk onderdeel van een containerized applicatie is dat deze vaak hoog beschikbaar moeten zijn. Als een van de (micro)services onbeschikbaar is of als daar problemen voordoen, kan het hele cluster daar last van krijgen.
Binnen Kubernetes worden alle ‘pods’ gedistribueerd naast nodes. Dit zorgt voor high availability omdat ook zijn services binnen Kubernetes te load balancen. Hierdoor kun je binnen Kubernetes de zogenoemde ‘unhealthy pods’ signaleren en ze verwijderen. Door dit vroegtijdig (of het liefst zelfs automatisch) te detecteren, kun je de pijlen richten op HA.
Binnen Docker Swarm kunnen de services repliceert worden in Swarm nodes. De Swarm manager nodes in Docker Swarm zijn verantwoordelijk voor het hele cluster en kunnen de worker nodes’ resources gebruiken.
Lees ook: Wat is High Availability (HA) en hoe werkt het?
Load balancing
Pods binnen Kubernetes kunnen via een service worden toegevoegd. Per services is vervolgens een load balancer toe te voegen aan het cluster. Een ingress controller wordt gebruikt voor load balancing.
Docker Swarm bestaat uit DNS elementen die gebruikt kunnen worden bij inkomende verzoeken aan de service. Die services kunnen dan automatisch schalen.
Kubernetes vs. Docker: de conclusie
Hoewel beide open-source platforms in de basisbeginselen op elkaar lijken, zijn er ook een aantal fundamentale verschillen.
Over het algemeen kan Kubernetes een loads aan die wat complexer zijn, terwijl Docker Swarm vooral simpel is om mee te starten. Voor ontwikkelaars die snel willen leveren en die van eenvoud houden, is Docker Swarm misschien een juiste optie.
Wordt de containerized applicatie een stuk complexer, dan biedt Kubernetes misschien meer een uitkomst. Deze tool wordt niet voor niets gebruikt door grote internetbedrijven die met complexe infrastructuren te maken hebben.
Heb je vragen over Docker & Kubernetes?