Kubernetes: het besturingssysteem van de cloud

'Head in de cloud, feet on the ground!'

een scheepsroer, het logo van kubernetes

De term ‘Kubernetes’ valt steeds vaker als het om cloudcomputing gaat en wordt zelfs ‘het besturingssysteem van de cloud’ genoemd. Vandaar dat het logo van Kubernetes een scheepsroer is. Het is moeilijk om in jip-en-janneketaal uitleg aan deze term te geven. Een ‘eenvoudige’ definitie van Kubernetes is: “een systeem voor het orkestreren van gecontaineriseerde applicaties binnen een cluster van nodes”. Dat is niet wat je noemt klare taal. Daarom hierbij een uitleg van het principe van Kubernetes in een notendop.

Orkestreren
Als het over Kubernetes gaat, vallen altijd de termen ‘orchestrate’, ‘containers’ en ‘nodes’. Gelukkig is ‘orkestreren’ een normaal Nederlands woord, dat ‘het bewerken van een muziekstuk voor een concert’ betekent. Een componist of een arrangeur beschrijft hoe instrumenten in een orkest samenwerken, welke partijen zij krijgen toegewezen en hoe zij die samen inzetten om een harmonieus muziekstuk te vormen. Kubernetes doet dat niet met muziekinstrumenten, maar met zogenoemde containers. Het ‘orkest’ is een cluster van fysieke of virtuele machines, ‘nodes’ genaamd, waarop deze containers hun taak uitvoeren. De dirigent is degene die dit allemaal regelt in het datacenter (de cloud provider).

Container
Containers zijn deelapplicaties die slechts één taak of proces uitvoeren van een grotere applicatie. Denk bijvoorbeeld aan een klein proces zoals het inloggen binnen een applicatie. Applicaties worden opgebouwd door het ‘stapelen’ van meerdere containers die specifieke taken of processen uitvoeren. Deze containers zijn bovendien inzetbaar op verschillende frameworks (een geheel van softwarecomponenten) voor het programmeren van applicaties. Ontwikkelaars zitten vaak vast aan een bepaald framework, zoals .NET, Laravel, Sympony, etc., omdat deze frameworks ook bepalen hoe componenten worden gebruikt. Bovendien kent elk framework zijn eigen codestandaarden en bibliotheken. Zo bepaalt de keuze van het framework ook de keuze van de software die een organisatie gebruikt. De containers staan daar los van en zijn in elk framework toepasbaar. Daarmee biedt Kubernetes enorme flexibiliteit voor ontwikkelaars en keuzevrijheid voor bedrijven.

Een van de andere voordelen van containers is hun ‘portability’, oftewel het feit dat ze ‘overdraagbaar’ zijn. Containers werken namelijk probleemloos op een server, on-premise, op een desktop of op een laptop. Het is daardoor mogelijk om de container lokaal te installeren en configureren en deze later over te zetten naar het datacenter of de cloud.

Kubernetes
Kubernetes is Grieks voor ‘stuurman’ (van een schip), en staat ook bekend als K8s (K + 8 letters + s) of kube. Het systeem werd oorspronkelijk door Google ontwikkeld en later als een open sourcetoepassing gedoneerd aan the Cloud Native Computing Foundation (CNCF). Kubernetes is een toepassing voor het bouwen van een fouttolerant, schaalbaar platform voor het automatiseren en centraal beheren van containers. Het platform werkt binnen nagenoeg elke infrastructuur: in het lokale netwerk, op een servercluster, in een datacenter en in elk type cloud (privé, openbaar, hybride).

Kubernetes is niet het enige systeem voor containerbeheer, maar wel het meest populaire. Het is het product van een echte open source-gemeenschap waaraan technici van SAP, Concur Technologies, IBM, Red Hat, Rackspace, en andere bedrijven samenwerken. Bovendien hebben de drie giganten van cloud computing, Google, Microsoft en Amazon, Kubernetes geïntegreerd in hun platformen.

Kubernetes orkestreert de containers. Gebruikers bepalen zelf hoe ze containers inzetten om applicaties te ontwikkelen en hoe deze moeten communiceren met andere applicaties of met de buitenwereld. Dankzij de flexibiliteit van containers kan men services omhoog of omlaag schalen en  doorlopende updates uitvoeren. Het is ook mogelijk om het verkeer te wisselen tussen verschillende versies van een applicatie om functies te testen of mislukte implementaties terug te draaien. Kubernetes beheert de volledige levenscyclus van gecontaineriseerde applicaties en services en voorziet in voorspelbaarheid, schaalbaarheid en hoge beschikbaarheid.

Nodes
Aan de basis brengt Kubernetes individuele fysieke of virtuele machines samen in een cluster. Een gedeeld netwerk zorgt ervoor dat deze servers onderling kunnen communiceren. Alle componenten, mogelijkheden en taken van Kubernetes worden geconfigureerd op dit cluster.

De machines in het cluster krijgen elk een rol binnen het Kubernetes-ecosysteem. Eén server (of een kleine groep servers) functioneert als de masterserver. Deze server is de toegangspoort en het brein voor het cluster. De andere machines in het cluster zijn aangewezen als ‘nodes’, of knooppunten: servers die de containers (met taken of processen) van de masterserver aannemen en uitvoeren. Hiervoor moet elk knooppunt voorzien zijn van een programma dat de containers uitvoert (zoals Docker of rkt). De masterserver beheert de andere servers en beslist hoe de taken het beste kunnen worden opgesplitst en uitgevoerd. Vervolgens wijst de masterserver deze toe aan de nodes (ook wel ‘planning’ genoemd) en organiseert die de communicatie tussen andere componenten.

Conclusie
De techniek achter Kubernetes is te complex om in enkele eenvoudige termen te beschrijven. Maar in elk geval weet je nu, de volgende keer dat de term Kubernetes valt, dat het niet gaat over de stuurman van een containerschip, maar om het nieuwe besturingssysteem voor de cloud en dat het softwareontwikkeling en -toepassingen schaalbaar beheert binnen een cluster van fysieke of virtuele servers.