Innovatiedag: Docker & Kubernetes

Op vrijdagmiddag 22 februari 2019 waren ruim 90 IT-specialisten aanwezig tijdens de door AT Computing georganiseerde Innovatiedag in het NBC te Nieuwegein. Het programma stond volledig in het teken van applicatiecontainers. Na een kort welkomstwoord trapte Gerlof Langeveld (AT Computing) om 13:00 de middag af en begon bij de basis: wat zijn applicatiecontainers nu precies?

Containers

De meeste IT-omgevingen maken volop gebruik van virtualisatie. Virtualisatie van computerhardware maakt het mogelijk om op één fysieke server (de host) meerdere virtuele servers te draaien. Dit worden meestal Virtuele Machines (VM’s) genoemd. Door deze virtualisatie kan meer rendement uit de beschikbare hardware worden gehaald omdat rekenkracht en werkgeheugen beter worden benut. Het nadeel van virtuele machines is echter dat ze niet erg efficiënt zijn. Iedere machine draait een eigen besturingssysteem (inclusief kernel), waardoor er CPU-cycles, opslagruimte en RAM verloren gaan.

Docker versus VM

Met containertechnologie wordt dit efficiëntieprobleem grotendeels opgelost. Een applicatiecontainer bevat geen eigen kernel, maar alleen hetgeen nodig is om een container te laten draaien. Praktisch betekent dit dat de kernel van de host wordt “hergebruikt” en elk proces in de container als lokaal proces op de host draait. Door gebruik van zogeheten namespaces binnen Linux wordt ervoor gezorgd dat het doen en laten van de ene container gescheiden is van een andere container. Door deze slimmere wijze van virtualisatie kan voor containers een sterk uitgekleed besturingssysteem worden gebruikt. Voorbeeld? De speciaal voor gebruik in containers geprepareerde distributie van Alpine Linux is uitgepakt ong. 6MB groot.

Een bijkomend voordeel is dat containers extreem snel opstarten. Binnen een paar seconden draaien ze. Dit vergroot de flexibiliteit en kan bij aanpassingen (het installeren van een nieuwe container) de downtime tot een minimum beperken. Daar komt nog bij dat een container niet afhankelijk is van OS of hardware: als de container op een laptop draait, draait diezelfde container ook op de productieserver in het datacenter. Dit maakt het uitrollen van een applicatie in een productie-omgeving voorspelbaar en daardoor veel minder risicovol.

Netwerk & opslag

Wanneer je met containers aan de slag gaat zijn er uiteraard diverse aandachtspunten. Zo zul je moeten nadenken over zaken als netwerken en opslag. Hoe ga je er immers voor zorgen dat je containers vanaf het internet bereikbaar zijn als ze een Apache of Nginx webserver draaien? Om dit te realiseren zijn er verschillende opties. De meest basale manier is om de container rechtstreeks toegang te verlenen tot de netwerk stack van de host, zodat het proces in de container bijvoorbeeld poort 80 kan openen. Hoewel dit de performance ten goede komt is deze situatie vanuit flexibiliteit en beveiliging bezien niet zaligmakend.

Poort 80 maakt gebruik van de netwerk stack van de host.
Poort 80 maakt gebruik van de netwerk stack van de host.

 

In plaats daarvan kan voor de container(s) een virtueel netwerk worden gemaakt waarbij door middel van NAT en port mapping wordt gezorgd dat verkeer voor container A op de juiste plek komt en niet wordt bezorgd bij container B.

 

Door toepassing van NAT wordt het werken met containers veiliger en flexibeler.
Door toepassing van NAT wordt het werken met containers veiliger en flexibeler.

 

Op gebied van opslag is het belangrijk om te zorgen dat data die behouden dient worden niet wordt opgeslagen binnen een container. Het beste is dan ook om er vanuit te gaan dat een container op ieder willekeurig moment gestopt en gestart moet kunnen worden zonder dat dat gevolgen heeft voor data. Praktisch betekent dit dus dat je bij het bouwen van je containers moet nadenken over waar en hoe je data gaat opslaan. Je kunt hiervoor bijvoorbeeld een directory uit het host filesystem delen met de container.

 

Een directory van de host wordt gedeeld met de container.
Een directory van de host wordt gedeeld met de container.

 

De meest handige oplossing is echter om opslagruimte als volume in de container te mounten dit kan door het commando docker run -v. Op die manier wordt een lokale directory of NFS-pad als volume gemount binnen de container na het starten. Door gebruik van NFS kunnen tevens meerdere containers gebruik maken van dezelfde opslag vanaf verschillende hosts.

 

Er wordt een volume gemount binnen de container.
Er wordt een volume gemount binnen de container.

Orkestratie

Met alleen het bouwen en starten van een container ben je al een eindje op weg, maar het wordt pas echt interessant wanneer je containers via een daarvoor geschikt platform gaat orkestreren. Twee van de bekendste oplossingen hiervoor zijn Swarm van Docker en Kubernetes. Laatstgenoemde is als Borg geboren binnen Google en later open source gemaakt voor gebruik door andere partijen. Inmiddels hebben vrijwel alle grote leveranciers een op Kubernetes gebaseerde orkestratie-oplossing in hun assortiment: AWS, Azure, OpenShift en natuurlijk Google zelf, om er een paar te noemen.

Met orkestratie kan van een aantal individuele servers, ongeacht merk/type, een cluster worden gebouwd dat containers kan laten draaien. Hierdoor kun je relatief eenvoudig een uitvalbestendige applicatie-omgeving in elkaar zetten. Via een dashboard kun je precies in de gaten houden hoe je cluster in elkaar steekt en waar je containers precies draaien. Voor onderhoud schakel je een van de nodes in het cluster uit, waarna de containers vanzelf worden herverdeeld over de overgebleven nodes. Het leven van een beheerder was zelden makkelijker.

Swarm of Kubernetes?

Na een korte koffiepauze ging de middag verder met de presentatie van Pieter de Bruin (Docker). Hij begon met het adresseren van een prangende vraag uit het publiek: wat is nu beter? Docker Swarm of Kubernetes? Het antwoord was tweeledig. Swarm is veel eenvoudiger om op te zetten, maar veel minder uitgebreid qua mogelijkheden. Swarm wordt standaard met Docker meegeleverd en de drempel om ermee aan de slag te gaan is dus erg laag. Kubernetes is daarentegen enorm uitgebreid, maar ook complex.

Kubernetes vanaf niets opbouwen is een flinke klus. Google evangelist Kelsey Hightower heeft op Github een stap-voor-stap beschrijving gemaakt met als titel “Kubernets, the hard way”. Hij adviseert iedereen om de stappen te doorlopen om ervan te leren. Voor productie-omgevingen raadt hij aan gebruik te maken van kant-en-klare Kubernetes-oplossing.  Een groeiende aantal (cloud) leveranciers biedt dit als dienst aan.

Hoewel de complexiteit dus een serieus aandachtspunt is, biedt Swarm geen mogelijkheid om het aantal containers automatisch op te schalen. Daarnaast is het aantal manieren om containers te organiseren, te groeperen of te labellen beperkt. Mocht je containers in productie gaan gebruiken dan is het dus absoluut de moeite waard om goed naar de (on)mogelijkheden van verschillende containerorkestratieoplossingen te kijken.

Docker Enterprise

Een ander onderwerp dat meermaals langskwam, was de toegevoegde waarde van Docker Enterprise ten opzichte van de gratis bruikbare community edition. Vooral voor (groot)zakelijk gebruik heeft de Enterprise variant een aantal interessante extra opties. Zo kunnen containers worden voorzien van een certificaat. Daarmee kan worden vastgesteld of de container niet is aangepast nadat deze is goedgekeurd voor gebruik. De security-afdeling zal hier blij mee zijn.

Daarnaast biedt Enterprise de mogelijkheid om container-images te scannen op kwetsbaarheden (vulnerabilities), waardoor je een goed zicht hebt op de risico’s die een container met zich meebrengt. De scanning geldt niet alleen voor het gebruikte basis-image (zoals bijvoorbeeld die van het eerder genoemde Alpine) maar ook voor diverse, veelgebruikte libraries en applicaties.

De interessante en inspirerende presentaties van Gerlof en Pieter zorgden ervoor dat er tijdens de afsluitende borrel druk werd nagepraat over het toepassen van containers binnen het huidige applicatielandschap. De enthousiaste reacties na afloop geven alle reden om later dit jaar een nieuwe Innovatiedag te organiseren. Over het onderwerp, de datum en locatie wordt momenteel nagedacht. Houd onze social media kanalen vooral in de gaten!

Wil je nog veel meer leren over containers en orkestratie? Schrijf je dan in voor onze driedaagse Docker Fundamentals training!

Onderwerpen
Actieve filters: Wis alle filters
Loading...