Wat is Kubernetes?
Kubernetes (spreek uit: “Koebernetties”, door kenners afgekort tot “K8s”) is een oorspronkelijke door Google gelanceerde softwarebeheertechniek voor het management en de orkestratie van containers. Met de overdracht van de technologie aan de Cloud Native Computing Foundation (CNCF) werd Kubernetes open source en gekoppeld aan Docker, de populairste software voor containerisatie.
Met Kubernetes kun je containers geheel automatisch groeperen (‘clusteren’) en aansturen (‘orkestreren’). In de containers bevinden zich zogeheten “microservices”: functionaliteiten van applicatiesoftware (websites, webshops, storage, bedrijfs- en procesapplicaties). De applicatiesoftware wordt opgeknipt in vele kleine serviceblokken en in containers geplaatst. Dit noemt men ‘container-virtualisatie’.
Traditioneel vs. gecontaineriseerd
Aanvankelijk draaiden applicaties op fysieke servers. Resources konden niet geschaald of verdeeld worden. Verbruikte één applicatie op de server veel capaciteit, presteerden de overige applicaties slechter. Daarom is men overgestapt op Virtual Machines.
Virtualisatie betekent dat één fysieke server meerdere VMs kan bevatten. Dat vereenvoudigt app-migratie en maakt resources beter schaalbaar. Resultaat: meer veiligheid en minder hardware-kosten. Maar: bij opschalen, bijvoorbeeld omdat de applicatie populairder wordt, moet steeds een nieuwe VM inclusief volledig OS gecreëerd worden. En iedere nieuwe applicatieversie (‘instantie’) vergt meer RAM en rekenkracht.
Door applicaties en functionaliteiten in containers te plaatsen, worden deze veel efficiënter over de resources verdeeld. De app wordt als het ware verpakt in een box met daarin alleen het hoogstnodige om goed te kunnen functioneren. In een containersysteem worden alle capaciteiten verdeeld via een host-systeem, ook wel Container Routing System (CRS) of Kubernetes Master genoemd. Eén OS wordt daarbij gedeeld door meerdere applicaties.
Van een traditioneel systeem naar een containersysteem:
En wat is Kubernetes juist níét?
Kubernetes wordt vaak verward met traditionele PaaS-systemen. Dat is het niet. Kubernetes is geen compleet serviceplatform; het is ‘slechts’ een extra beheerslaag, een zogeheten , bovenop het OS, die middels orkestratie ervoor zorgt dat de apps en functies in de diverse containers continu draaien en geschaald worden. Kubernetes bevat géén uitgebreide configuratie- of onderhoudssystemen en kan deze ook niet vervangen.
Met Kubernetes bouw je ook geen applicaties en compileer je geen broncode. Het biedt geen services op applicatieniveau, geen frameworks, caches, databases of andere opslagsystemen. Het enige wat Kubernetes doet, is de containers beheren, om de diverse applicatiediensten te orkestreren en continu draaiende te houden.
Maar: Kubernetes is ook weer niet “slechts” een orkestratiesysteem. De technische definitie van orkestratie is: het uitvoeren van een vast omschreven workflow, altijd via hetzelfde pad. Kubernetes bestaat echter uit een set van onafhankelijke, samenstelbare besturingsprocessen die de huidige toestand (current state) naar de gewenste toestand (desired state) sturen, waarbij het pad naar die desired state niet langer relevant is; een centrale aansturing is niet meer nodig. Dat levert een robuust en flexibel uit te breiden systeem op.
Hoe werkt Kubernetes?
Kubernetes werkt met containers waarin zich de functionaliteiten (microservices) van een applicatie bevinden. Containers zijn niet meer dan afgebakende delen van een host machine (server, VM), ontkoppeld van de onderliggende infrastructuur. Lichtgewicht, makkelijk verplaats- en reproduceerbaar, stabiel én goed te isoleren. Zo wordt gecontaineriseerde software “portable” en kan deze moeiteloos in een willekeurig ander deel van het host-systeem of de cloud geplaatst worden.
Door containerisatie kan de uitvoering van applicaties en workloads flexibel gepland, geïmplementeerd, gecompileerd én geschaald worden. Zo kun je container-apps ook overhevelen van lokale computers naar on-premises productie of verschuiven tussen hybride en meervoudige cloud-omgevingen, terwijl de consistentie tussen de omgevingen onaangetast blijft.
Een video over de meest gebruikelijke Kubernetes scenario’s:
Dat klinkt meteen weer ietwat gecompliceerd, maar hét kritieke punt in al deze scenario’s is de Container Routering. Oftewel, het management van al die containers. Gerelateerde containers die samen een functie/applicatie uitvoeren, moeten immers voortdurend met elkaar communiceren. Een tiental communicerende containers manueel beheren is nog geen probleem. Maar zodra een applicatie groeit en je honderden of zelfs duizenden containers op servers in je datacenter moet beheren, verlies je het overzicht en wordt het een extreem arbeidsintensieve aangelegenheid. Het beheer moet dan geautomatiseerd worden. Dat wordt “orkestratie” genoemd. En dát is dus wat Kubernetes doet: Container Orchestration.
Kubernetes zorgt ervoor dat containers geheel automatisch en volgens vooraf vastgelegde criteria gestart en gestopt kunnen worden. Op deze wijze regelt Kubernetes taken als routeren, configureren, op- en neerschalen, load balancing, replicatie, maar ook bijvoorbeeld failover (het bij uitval overschakelen naar een redundant(e) of stand-by server, systeem, hardware component of netwerk). Loopt een container vast, dan zorgt Kubernetes voor een nieuwe. Complexe toepassingen worden in containers geplaatst en geschaald geïmplementeerd in een (of meerdere) cluster(s), zonder dat de containerstatus aangetast wordt. Zo kunnen ontwikkelaars sneller nieuwe features en applicaties schaalbaar ontwikkelen, testen en uitrollen.
De werking van Kubernetes samengevat:
- Geautomatiseerde planning (vele geavanceerde mogelijkheden om de lancering van containers op cluster nodes te plannen en te managen)
- Zelfhelend vermogen (automatisch her(in)plannen, vervangen en herstarten van defecte containers)
- Geautomatiseerde rollout en rollback (om de gewenste status (desired state) van een gecontaineriseerde applicatie te bereiken)
- Horizontaal schalen en Load balancing: (automatisch op- en neerschalen van applicaties afhankelijk van de vereiste en beschikbare resources)