Kubernetes in het kort

Allereerst: wat is Kubernetes? Volgens de ontwikkelaars zelf is het “an open-source system for automating deployment, scaling, and management of containerized applications”. Oorspronkelijk is het ontwikkeld door Google en daar wordt het nog steeds actief gebruikt. In deze beschrijving betekent “containerized applications” kort gezegd dat applicaties gevirtualiseerd draaien, maar dan zonder een heel apart besturingssysteem. Doorgaans wordt voor het draaien van zulke containers Docker gebruikt. Wanneer je applicatie binnen een Docker container draait, kun je hem ook op elke computer of server draaien die Docker ondersteunt. Dit maakt het draaien van applicaties in de cloud simpeler. Kubernetes helpt hierbij door het draaien, schalen en beheren van zulke containers te vereenvoudigen. Eigenlijk hoef je Kubernetes alleen maar te vertellen welke applicatie je wilt draaien, hoeveel capaciteit die nodig heeft en of je nog andere specifieke wensen hebt. Vervolgens zorgt Kubernetes ervoor dat je applicatie in no time beschikbaar is. Mede hierdoor is Kubernetes een belangrijke tool voor de ontwikkeling van cloud-native software.

De voordelen

Wat heb je daar nou aan? Best veel, zo blijkt. Een systeem wordt vooral een stuk robuuster bij het gebruik van containerized applicaties via Kubernetes. Doordat je de capaciteit die applicaties nodig hebben dynamisch kan schalen, kun je zorgen dat je systeem blijft draaien wanneer ineens je bezoekers- of gebruikersaantallen omhoogschieten. Is het daarna weer rustig? Dan schaalt Kubernetes terug, wat weer helpt kosten te besparen. Daarnaast is het mogelijk om nieuwe versies van een applicatie in gebruik te nemen zonder downtime; je systeem gaat niet offline en je merkt dus niets van de overgang. Dit alles helpt enorm bij het bouwen een systeem dat production-ready is op grote schaal.

Het opzetten van een Kubernetes cluster kost aan het begin relatief veel tijd. Daardoor wordt het probleem van schaalbaarheid in de beginfases van het bouwen van een proof-of-concept systeem soms vooruitgeschoven. In het geval van het UGI-platform voor Shell is die schaal in de toekomst wellicht wereldwijd gebruik. De eerste versie van UGI was ook ingestoken als proof-of-concept, maar wij vonden het om deze reden belangrijk om al wel vanaf het begin bewust rekening met schaalbaarheid te houden. Zo zijn we zeker dat we niet voor verrassingen komen te staan wanneer de schaal van het systeem relevant wordt.

Onze aanpak

Voor de implementatie van de Kubernetes cluster hadden we keuze uit verschillende managed Kubernetes oplossingen van onder andere Amazon Web Services (AWS), Digital Ocean, Google Cloud en Microsoft Azure. Uiteindelijk hebben we voor de managed oplossing van AWS gekozen: Elastic Kubernetes Service (EKS). Hiermee is het opzetten van de Kubernetes cluster eenvoudig, en draagt Amazon zorg voor de beste beschikbaarheid en automatische beveiligingsupdates. Voor UGI worden ook andere AWS diensten zoals Amazon RDS databases en S3 opslag gebruikt. Vanuit de cluster kan er bijvoorbeeld via het interne netwerk met de databases verbonden worden door middel van VPC peering. Hierdoor hoeft het verkeer niet over het internet, wat de prestaties ten goede komt.

Daarnaast biedt Amazon veel Kubernetes integraties aan voor andere diensten. Er is bijvoorbeeld de ALB Ingress Controller die automatisch load balancers aan kan maken voor internettoegang tot applicaties in de cluster. Dit internetverkeer kan dan ook met weinig extra configuratie beveiligd worden (door middel van TLS termination) met een certificaat uit AWS Certificate Manager. Ook heeft Amazon een handige cluster autoscaler, waarmee automatisch meer of minder virtuele servers kunnen worden ingezet wanneer de cluster dit nodig heeft om aan de vraag te voldoen. Al met al is dit dus een erg handige set tools om de cluster helemaal in te richten op de behoeften van het UGI-platform.

Daar bovenop is het belangrijk dat nieuw ontwikkelde functionaliteit gestroomlijnd en snel in gebruik kan worden genomen. Om die reden hebben we ook veel aandacht besteed aan het mogelijk maken van continuous deployment. Hiermee zorgen we dat wanneer applicaties worden bijgewerkt, deze nieuwe versie automatisch op de Kubernetes cluster komt te draaien – dat alles zonder dat het systeem offline gaat. Voor het draaien van de nieuwe versie bouwen we eerst een nieuwe Docker image. Voor het opslaan van deze images maken we gebruik van Amazon ECR. Vervolgens instrueren we Kubernetes om deze nieuwe image op te pakken. Doordat de cluster ook binnen Amazon draait, kunnen deze images zonder extra configuratiestappen worden ingeladen.

Rekenkracht on-demand

Tenslotte is er een laatste gebruiksscenario waar Kubernetes perfect aansluit bij de eisen voor UGI: het draaien van AI-modellen. Hiervoor is vaak erg veel rekenkracht nodig, maar deze draaien niet continu. Daarom wil je extra capaciteit tot je beschikking hebben wanneer nodig, maar liever niet betalen voor de momenten dat je die niet nodig hebt. Een uitkomst hiervoor zijn Kubernetes Jobs. Hiermee is het mogelijk om UGI’s AI-modellen op aanvraag te draaien. Bij het specificeren van een Job is het mogelijk om aan te geven hoeveel capaciteit ervoor nodig is. Wanneer deze wordt gestart, zorgt Kubernetes er in combinatie met de cluster autoscaler voor dat er extra servercapaciteit beschikbaar komt. Vervolgens wordt de uitvoer ervan opgeslagen (in het geval van UGI in S3 opslag) en stopt het programma. De extra capaciteit is nu niet meer nodig, en de cluster schaalt automatisch terug. Zo hebben we toegang tot erg veel rekenkracht, zonder te betalen wanneer deze niet nodig is.

Takeaways

Eigenlijk kan ik deze blogpost nog heel een stuk langer maken, maar dan zou het wel heel technisch worden. Er zijn zoveel ins and outs van het hele systeem die stuk voor stuk interessant zijn. De belangrijkste takeaways zijn echter dat Kubernetes een erg mooie oplossing is die veel obstakels bij het draaien van production-ready applicaties in de cloud wegneemt. Het kost wat meer werk om in te richten aan het begin van een project, maar uiteindelijk betaalt dat zich weer terug. Je hoeft ook zeker niet de schaal van Google te hebben om er al van te profiteren. Met Kubernetes is het mogelijk om op een kosteneffectieve manier een schaalbare cluster voor het draaien van bedrijfsapplicaties op te zetten. Zo is je systeem klaar om mee te groeien met what’s next voor je bedrijf.

Zin om aan de slag te gaan? Wij ook!

GET IN TOUCH

For what's next

Find us

Barkenkamp 5
7141 EL Groenlo
Nederland

Let's meet

info@bullit.digital

© Bullit Digital 2020