Kubernetes vs Docker

Kubernetes vs Docker

13 July 2020 door in DevOps Kubernetes

Docker vs Kubernetes is als appels met peren vergelijken. Het zijn geen alternatieven van elkaar. Ze vullen elkaar eigenlijk aan. Alleen al het opschalen met Docker brengt veel uitdagingen met zich mee die Kubernetes kan oplossen.

Wat is Docker?

Docker is een tool voor het creëren, deployen en uitvoeren van applicaties door het gebruik van containers. De applicatie denkt hiermee dat het zijn eigen OS heeft, terwijl er ook nog andere containers uitgevoerd kunnen worden op hetzelfde systeem. In andere woorden: Docker stelt je in staat om op een OS meerdere containers te maken, te beheren en uit te voeren.

Wat is Kubernetes (k8s)?

Kubernetes is de overtreffende trap. Als je Docker op meerdere hosts (verschillende OS) hebt geïnstalleerd, kan je de kracht van Kubernetes inzetten. Kubernetes stelt je in staat om processen te automatiseren: het start de containers op, zorgt voor onder andere load-balancing, routing van netwerkverkeer bij drukte, (automatische) opschaling of downscaling. Loopt een container vast, dan zorgt Kubernetes voor een nieuwe. De Docker hosts (ook wel nodes) zijn bijvoorbeeld bare metal servers of virtual machines (VM’s). Een verzameling van nodes die beheerd wordt door een enkele Kubernetes instance wordt een Kubernetes cluster genoemd.

Onbekend met Kubernetes? Lees ook: Kubernetes eenvoudig uitgelegd

Waarom dan meer nodes?

Je zou dan kunnen zeggen als je maar een paar nodes hebt dat het makkelijker is om alleen Docker te gebruiken. Er zijn echter redenen waarom er gekozen wordt voor meerdere nodes. Vaak zijn het deze twee:

    1. Redundantie: je applicatie is online, zelfs als er enkele nodes offline gaan. (High availability) 2. Schaalbaarheid: een hogere workload? Maak nog een paar extra containers en/of voeg meer nodes toe aan je k8s cluster.

Een praktijkvoorbeeld met Docker

Om de verschillen beter te begrijpen nemen we je mee in een praktijkvoorbeeld. We hebben een containerized applicatie geschreven (bijv. in React in combinatie met Node.js) die praat met de database via Java en Python voor externe API’s.

Een engineer die bekend is met Docker om applicaties te deployen zou de volgende structuur kunnen gebruiken:

De onderliggende structuur stelt de engineer in staat om de containers te deployen met Docker Build, in dit geval de app, de database en API’s.

Misschien zijn er nog wel resources over, en wordt de bovenste laag opgeschaald naar het volgende:

So far, so good. Dit is een relatief eenvoudige opzet en heeft nog weinig containers.

Maar wat als de applicatie, laten we een webwinkel als voorbeeld nemen, opeens heel veel meer verkeer ontvangt door bijvoorbeeld de uitverkoop? De benodigde resources nemen dan snel toe en je moet opschalen om de webwinkel in de lucht te houden.

Doordat je in het voorbeeld al een script hebt geschreven voor het deployen van de containers kun je er voor kiezen om meer hardware toe te voegen en de deployment meerdere keren te doen.

Knelpunten

Het is precies bij deze schaalbaarheid waar het kan gaan knellen. Stel dat de webshop een nieuwe feature krijgt en de engineer hiervoor een microservice moet toevoegen. Bijvoorbeeld de functie van “klanten die dit artikel kochten, kochten ook artikelen a, b en c.”. Waar in deze stack komt die nieuwe feature, als de hardware al volledig gebruikt wordt? Dat is een nieuw puzzelstuk voor de engineer die elke keer zal terugkomen.

Daarnaast is het grote voordeel van microservices dat het mogelijk is om individuele componenten te schalen. Ook hier moeten scripts voor geschreven worden en bekeken worden wat de meest effectieve manier is om op of af te schalen afhankelijk van de load.

Kubernetes to the rescue

Precies hier komt Kubernetes zijn meerwaarde laten zien. Kubernetes, ookwel bekend als k8s, is een open source container orchestration platform die veel van de handmatige taken automatiseert: deployment, beheer en het schalen van containerized applicaties.

Een praktijkvoorbeeld met Kubernetes

Laten we een voorbeeld geven van Kubernetes. Onderstaande afbeelding geeft een server stack weer, waarbij iedere server in de stack ook wel een worker node wordt genoemd. We installeren Kubernetes op elke worker node (workers), en maken er een hiervan de Kubernetes master. De master staat in verbinding met alle workers en bepaalt waar onze applicaties (onze Docker containers) gehost zijn, hoe ze in elkaar steken.

3 dingen die Kubernetes makkelijker maken

1. Deployment

Terugkomend op ons voorbeeld, laten we zeggen dat we onze React applicatie zes keer willen deployen. Elke versie van de applicatie heeft ongeveer 128MB RAM nodig en we willen regels vastleggen wanneer een herstart van de applicatie of container gedaan moet worden. Deze regels kan je instellen in Kubernetes. Als onze applicatie crasht, dan zal Kubernetes het automatisch opnieuw starten in de staat die we hiervoor hebben aangegeven.

2. Load balancing

Bij het uitrollen van meer containers kan een goed ingestelde configuratie ervoor zorgen dat de routering van request geregeld wordt (load balancing). Automatisch bijschalen kan ook als reactie op de load als deze omhoog gaat. Bijvoorbeeld bij meer bezoekers = meer containers.

3. Monitoring

Kubernetes beschikt over een grote hoeveelheid opties om logs te kunnen inzien. Deze applicatie en system logs helpen je te begrijpen wat er gebeurt binnen jouw cluster. Wil je nog meer informatie hebben? Doordat Kubernetes open source is heeft de community erachter diverse tools ontwikkeld. Je kan bijvoorbeeld Prometheus gebruiken voor het exporteren van statistieken over je applicaties en verzoeken.

Conclusie

Het is geen verhaal van Kubernetes versus Docker. Door ze beide te gebruiken profiteer je van de voordelen die ze bieden. Met Kubernetes kan je je bestaande Docker workloads gemakkelijker schalen zonder de complexiteit die het schalen in Docker met zich meebrengt. Je kan ook direct met Kubernetes beginnen als je verwacht in de toekomst snel op te moeten schalen.

Gebruik je nu al Docker en containers voor je applicaties? Door Kubernetes te gebruiken verminder je de operationele overhead waar bijna elke applicatie tegenaan loopt als het opgeschaald wordt. Kubernetes heeft wel een initiële tijdsinvestering voordat je aan de slag kan, maar diensten zoals Managed Kubernetes kunnen deze tijdsinvestering aanzienlijk verminderen.

Ook samenwerken met Cyso?

Heb jij vragen over Kubernetes vraagstuk en wil je ook met ons samenwerken? Cyso kan je als Managed Service Provider helpen. Laten we een virtueel kopje koffie pakken. Neem contact met ons op!


Kwaliteit. Betrouwbaar. Betrokken.
  • 24/7 service support
  • Nederlandse datacenters
  • ISO 27001 gecertificeerd
Bel me terug