KubeCon 2019: De historie en toekomst van Kubernetes

Janet Kuo, Google (software engineer, project maintainer K8s) blikt terug op Kubernetes, vanaf het allereerste begin in 2003 met Google Borg. In 2006 wordt in de Linux kernel het concept van cgroups ingevoerd, een eerste stap in de richting van de isolatie die containers mogelijk maken (dat doorsnee Unix dat stadium al ver ontgroeid is, laat Google verder maar achterwege). In 2008 zien we de introductie van Linux containers, de basis voor Docker. Borg van Google ontwikkelt ondertussen door en ziet in 2009 met Omega een nieuwe versie, gevolgd door Project 7 in 2013. Over die naam is nog wel iets interessants te zeggen: de 7 is afgeleid van 7 of 9, de vriendelijke Borg uit Star Trek. Project 7 is een clustermanager voor Borg, maar meteen ook een meer vriendelijke Borg. En 7 is ook de reden dat het Kubernetes logo 7 kanten heeft.

In 2013 wordt ook Docker geïntroduceerd, gevolgd door Kubernetes in 2014. In 2015 ontstaat de Cloud Native Computing Foundation, waarmee de ecosfeer rondom containers een serieuze impuls krijgt. De eerste KubeCon wordt in Amerika georganiseerd. Vanaf dat moment raken de ontwikkelingen in een stroomversnelling. In 2015 is Kubernetes 1.0, in 2016 draait het in productie en at scale, terwijl in Europa de eerste KubeCon wordt georganiseerd. In 2017 wordt CRD geïntroduceerd waarmee extensies op Kubernetes door derden mogelijk wordt, een markt die meteen explosief groeit. In 2018 wordt Kubernetes het eerste volwassen project binnen CNCF en is de eerste KubeCon in Azië.

In 2019 zijn er 100 miljoen github projecten die met Kubernetes te maken hebben en is het project qua omvang de tweede (na de Linux kernel) en vierde voor wat betreft aantal issues en ontwikkelaars. Die ontwikkelaars, dat zijn er al 31.000 inmiddels, een verviervoudiging sinds 2015. Opvallend daarbij is dat Kuo vervolgens vraagt of de echte Kubernetes ontwikkelaars in de zaal willen opstaan, maar dat zijn er maar een handvol. Misschien durven ze niet, zijn het voornamelijk Amerikanen, of komen ze niet op KubeCon (of de keynote?) af? Het is niet helemaal duidelijk. Kuo sluit het historische relaas af met de melding dat Windows Kubernetes nodes nu GA zijn, net als PV (de oplossing voor storage onder Kubernetes).

Hoe ziet de toekomst van Kubernetes er uit? Kuo verwacht een drietal belangrijke thema’s de komende jaren. Allereerst wordt extensibility steeds belangrijker, voor zowel het platform als de gelieerde frameworks. Ook CRD is nog steeds in beta. Ten tweede wordt scalability van het platform steeds belangrijker. Dit is een moeilijk probleem om aan te pakken, het is multidimensionaal met onderlinge afhankelijkheden tussen de dimensies. Als er ergens een bottleneck wordt gevonden en de achterliggende problemen opgelost, verschijnt er ergens anders een nieuwe uitdaging. Kuo geeft als voorbeeld dat node status updates, een belangrijk mechanisme om de status van een cluster te bepalen, zeer kostbaar zijn als het gaat om impact op de performance van het cluster zelf. Voor een cluster van 5.000 nodes gaat het al snel om 300-500mb aan updates per minuut, wat voor Etcd te veel is om te verwerken. Er is een oplossing voor in de vorm van node lease, maar dat betekent veel wijzigingen in de onderliggende codebase. Ik vraag me bij dit punt af hoe Google hier echt in zit. Als Google zelf orkestratie van containers al met project 7 in 2013 stabiel in productie heeft, hoe hebben zij het dan opgelost? Is dit een kwestie van “hier is een duwtje in de goede richting maar de community moet het zelf oplossen”?

Als derde en laatste ontwikkeling ziet Kuo reliability, betrouwbaarheid van het platform. Een voorbeeld van de huidige problematiek is cascading failure, een kleine fout ergens in het systeem die het hele cluster kan laten crashen. Of, zoals ze het zelf zegt, “Bad pods kill nodes. Nodes kill clusters”. Dit kan omdat een bad pod in een crash loop komt en de bijbehorende logging zo sterk toeneemt, dat disks vollopen, enzovoorts (vandaar de term cascading). Er is een workaround waarbij een bad pod in waiting state wordt gezet en niet opnieuw wordt aangemaakt, maar de implementatie daarvan vereist een holistische aanpak over diverse special interest groups (de vakinhoudelijke projecten waarbinnen die de doorontwikkeling van Kubernetes plaatsvindt) heen.

Kuo schetst het stormachtige verloop van een project dat met groeipijnen, maar met een enorme toewijding van een even enorm aantal ontwikkelaars blijft groeien naar een allesomvattend systeem waarvan we de reikwijdte – dat is althans mijn bescheiden mening – nog steeds niet helemaal kunnen overzien.