Kubernetes en gameontwikkeling: een sterke combinatie

Containers zijn niet meer weg te denken uit het moderne IT-landschap. Deze digitale tools bieden flexibiliteit en schaalbaarheid, waardoor de ontwikkelsnelheid een flinke boost krijgt. Die eigenschappen maken containers niet alleen interessant voor het bouwen van applicaties, maar ook voor het ontwikkelen van complexe toepassingen zoals games.

Vooral Kubernetes is de afgelopen jaren uitgegroeid tot een razend populair platform voor containerorkestratie. Zo populair zelfs dat het inmiddels een begrip in IT-land is. Maar wat is Kubernetes precies? Hoe werkt het platform in de praktijk? En wat zijn de voordelen van het gebruiken van Kubernetes bij het ontwikkelen van een game? In deze blog leggen we het haarfijn uit.

Wat is Kubernetes?

Kubernetes (Grieks voor stuurman of piloot) begon als een opensourceproject in de hallen van internet- en techgigant Google. Kubernetes droeg oorspronkelijk de naam ‘Project Seven of Nine’ en begon als een externe versie van Borg, een intern systeem dat door Google werd gebruikt om de eigen containerstructuur te beheren. Google ging namelijk al vroeg over tot het onderbrengen van interne workloads in containers, vooral om zo de destijds nog beperkte serverruimte zo optimaal mogelijk te benutten.

De eerste versie van Kubernetes werd uitgebracht in 2015. De Google-engineers die het platform ontwikkelden kozen ervoor om de software te open-sourcen. De reden: andere ontwikkelaars kunnen zo profiteren van de voordelen van Kubernetes, maar ook bijdragen aan de verdere ontwikkeling en optimalisatie van het platform. Inmiddels heeft Kubernetes een groot marktaandeel verworven: ruim 50 procent van de Fortune 500-bedrijven gebruikt de tool al sinds 2019.

Containers en virtuele machines

Om duidelijk te maken hoe Kubernetes precies werkt, is het allereerst belangrijk om het verschil uit te leggen tussen containers en zogenoemde virtuele machines (VM’s). Een virtuele machine doet zich voor als een echte computer door zowel de hardware, middleware (binaries en libraries) als het besturingssysteem (bijvoorbeeld Windows of Linux) te virtualiseren.

Groeit de vraag naar een applicatie die in een VM is ondergebracht? Dan zul je elke nieuwe (versie van een) app weer onder moeten brengen in een nieuwe VM (inclusief besturingssysteem en hardware). Het resultaat laat zich raden: de applicaties en bijbehorende virtuele machines vragen veel resources van de onderliggende server, met name op het vlak van rekenkracht. Door de minimumvereisten van de VM verbruikt zelfs een lichte app die is ondergebracht in een virtuele machine veel geheugen en rekenkracht. VM’s herbergen vaak vele gigabytes aan capaciteit die je wel moet installeren, maar in de praktijk eigenlijk niet gebruikt. Door dit gegeven kunnen er een beperkt aantal apps op één server worden ondergebracht. Logisch gevolg is dat daardoor de racks snel gevuld worden met severs, de racks het datacenter snel vullen en er al met al veel buitensporig veel ruimte, energie en kosten gemoeid zijn met het ontwikkelen van een game.

Met containers omzeil je dit probleem, vooral omdat deze virtuele hulpmiddelen in staat zijn om slechts één of enkele processen te draaien. Met containers is het dus mogelijk om delen van applicaties op compacte wijze te isoleren. Zo gebruik je alleen de resources die nodig zijn voor een specifieke functionaliteit of een bepaald (deel)proces. Een container bevat alleen de broodnodige onderdelen (dependencies) die nodig zijn om een applicatie goed en vlot te laten functioneren. Daarnaast kun je per proces schalen, hetgeen natuurlijk veel efficiënter is dan per VM. Containers zijn dus eigenlijk light-versies van virtuele machines. Het voordeel: meer efficiëntie, flexibiliteit en schaalbaarheid, omdat er minder servers en serverkracht nodig zijn voor het bereiken van hetzelfde resultaat. Bovendien zijn containers in diverse IT-omgevingen te gebruiken.

“It turns out that scaling a video game isn’t that different than scaling any other successful product. Moving to Kubernetes was a natural evolution of our workloads. It basically comes down to trying to improve our developer’s lives,”  says Paul Sharpe, principal cloud engineering developer at Epic Games, maker of Fortnite.

Hoe werkt Kubernetes?

Kubernetes is geoptimaliseerd voor het beheren van grote groepen containers en de in die containers ondergebrachte applicaties. Het platform kan containers geautomatiseerd uitrollen en verdelen over een cluster van computersystemen. De software maakt het mogelijk om containers te groeperen, bijvoorbeeld op basis van afzonderlijke componenten

van een applicatie zoals computing, netwerk, opslag en diverse soorten workloads. Kubernetes bestaat uit diverse onderdelen, die binnen het platform worden omschreven als objecten. Tijd om hier eens een blik op te werpen.

Kubernetes-master en -nodes

De Kubernetes-master is het meesterbrein van het platform, de virtuele regelaar die achter de knoppen zit en de machinekamer bedient. De master draait in een eigen container en stuurt het hele containersysteem aan. De nodes zijn de uitvoerders. Het

zijn de virtuele arbeidskrachten die de orders van de master opvolgen en ervoor zorgen dat het platform soepel draait. De nodes kunnen op zowel dezelfde server als de host of op de andere virtuele of fysieke servers draaien. We hebben hier dan te maken met een multi-mastercluster dat high available (hoog beschikbaar) is.

Pods

De belangrijkste ordeningseenheden binnen Kubernetes zijn de zogenoemde pods. Een pod is feitelijk een omhulsel dat onderdak biedt aan een of meerdere containers. Containers die nauw met elkaar samenwerken, deel uitmaken van dezelfde workload en dezelfde systeembronnen gebruiken, breng je onder in dezelfde pod. Door het gebruik van labels is het een koud kunstje om de functie van elke pod te omschrijven. Handig, want zo hoef je nooit lang te zoeken naar bepaalde containers of workloads.

Services

De services staan een niveautje hoger in de Kubernetes-hiërarchie dan de pods. Een service is namelijk een groep onderling samenwerkende pods, een structuur die je bijvoorbeeld aantreft bij meerlagige applicaties. Services zijn gekoppeld aan een IP-adres en poortconfiguratie.

Volumes

In de standaardmodus worden bestandssystemen in een container slechts vluchtig opgeslagen. Dit betekent dat dergelijke informatie verdwijnt uit een container als je een pod opnieuw opstart. Een Kubernetes-volume biedt daarentegen opslag gedurende de hele levensduur van een pod. Bovendien kan deze opslagfunctionaliteit ook worden gebruikt als een gedeelde schijfruimte voor containers binnen de pod.

Replication controller

De replication controller stelt gebruikers in staat om pods te klonen. Dit onderdeel maakt workloads gemakkelijk schaalbaar.

Load balancer

De load balancer zorgt ervoor dat de verschillende nodes op de efficiëntst mogelijke manier worden verdeeld over de server die de applicatie ter beschikking staan. Is er ruimte genoeg om alle actuele workloads te laten draaien? Dan laat de load balancer de nodes netjes serverkracht delen. Is er sprake van piekbelasting, waardoor je meer prestatiekracht nodig hebt? Dan verspreidt de load balancer workloads over meerdere servers, waardoor de kans op downtime of overbelasting van de servers wordt voorkomen.

Kubernetes en gameontwikkeling

Een van de uitdagendste deelterreinen binnen het veelzijdige IT-landschap is het ontwikkelen van computerspellen. Voor het maken van kwalitatief hoogwaardige games zijn namelijk veel computing resources nodig. Niet zo’n probleem als je een vrijwel ongelimiteerd budget tot je beschikking hebt, maar een stuk lastiger als er sprake is van financiële en/of operationele beperkingen.

Gelukkig biedt Kubernetes een helpende hand bij het ontwikkelen van games. Een door Google en gamebedrijf Ubisoft geïnitieerd project als Agones maakt het bijvoorbeeld mogelijk om specialistische gameservers te hosten op Kubernetes. De constructie biedt een oplossing voor een belangrijk probleem waar veel gameontwikkelaars tegenaan lopen. De meeste hostingoplossingen voor specialistische gameservers zijn namelijk gepatenteerd.

 Zelf een groot en schaalbaar platform uit de grond stampen is zonder een immens budget een bijna ondoenlijke klus, zeker als je multiplayergames (veel lastiger dan het ontwikkelen van een game voor één speler) maakt die vanaf verschillende geografische locaties toegankelijk moeten zijn. Door gameservers via Kubernetes te laten draaien in containers, wordt het gemakkelijker om dergelijke grote en dynamische workloads fatsoenlijk te managen. De workloads en afzonderlijke spelcomponenten kunnen immers verdeeld worden over een flinke lading verschillende containers en specifieke pods. Hoewel niet alle spellen beschikbaar zijn in een ‘containerized’ formaat, zijn er verrassend veel containers voor gameservers te downloaden via GitHub.  

Voordelen van gameontwikkeling met Kubernetes

Het gebruiken van Kubernetes bij het ontwikkelen van een computerspel heeft een aantal belangrijke voordelen. Tijd om de belangrijkste pluspunten eens op een rij te zetten.

Meer schaalbaarheid

Het schalen van gameservers is geen eenvoudige klus. De servers eisen niet alleen veel resources op, maar draaien vaak ook nog eens op gepatenteerde en dure software. Met containers wordt op- en afschalen een stuk gemakkelijker omdat je alleen de resources gebruikt die nodig zijn voor een bepaalde functionaliteit of een specifiek (deel)proces. Bovendien kun je volstaan met een stuk minder codeerwerk, waardoor het ontwikkelen van games ook eenvoudiger en toegankelijker wordt.

Minder dependencies

Containers geven de gebruiker een inzetbaar artefact dat gebruikt kan worden voor het draaien van gameservers. Hierdoor is het niet langer noodzakelijk om dependencies en virtuele machines te installeren. Het resultaat? Meer efficiëntie, flexibiliteit en schaalbaarheid, omdat er minder serverkracht nodig is voor het bereiken van hetzelfde resultaat.

Een solide basis

De combinatie van softwarecontainers en Kubernetes stelt ontwikkelaars in staat om voort te bouwen op een solide basis die eigenlijk geschikt is voor elk type schaalbare software. Zaken als inzetbaarheid, veiligheid, functionaliteit, schaalbaarheid en logging zijn middels API’s op vrijwel alle niveaus te controleren en managen. In de kern is Kubernetes bovendien een clusteroplossing die werkt voor bijna alle softwaretypen. Gameontwikkelaars kunnen dus profiteren van het werk dat al gedaan is en die kennis vertalen naar hun eigen specifieke behoeftes.

Voortdurende optimalisatie

Zowel Docker-containers als Kubernetes zijn open source. Dit betekent dat de technologie voortdurend en actief wordt doorontwikkeld. Ontwikkelaars kunnen dus blijvend profiteren van nieuwe functionaliteiten en updates. Die continue optimalisatie van platform en techniek maakt gameontwikkeling via Kubernetes tevens toekomstbestendig.

Bereikbaarheid

Een gestandaardiseerd platform als Kubernetes maakt het mogelijk om complete stacks precies naar de plek te brengen waar gamers zitten, ongeacht het type cloud dat wordt gebruikt. Dit is vooral belangrijk in het geval van multiplayergames die wereldwijd en via het internet worden gespeeld. Spelers moeten erop kunnen vertrouwen dat het spel goed werkt en dat ze op elk gewenst moment de virtuele degens kunnen kruisen met collega-spelers uit heel de wereld.

Beloftevolle toekomst

Hoewel het ontwikkelen van games via containerplatforms als Kubernetes nog redelijk in de kinderschoenen staat, is het wel een veelzijdige optie met momentum en toekomstperspectief. Kubernetes levert namelijk de flexibiliteit, schaalbaarheid en digitale infrastructuur die nodig is om veeleisende gameservers en de bijbehorende workloads te managen.


Ronald Kers
Ronald is een échte ACC'er en behoort tot de harde kern die meer dan 10 jaar in dienst is bij ACC ICT. Als contentmarketeer schrijft Ronald graag over technologische ontwikkelingen binnen de IT-branche. Met een achtergrond als system administrator weet hij als geen ander complexe materie in begrijpelijke taal uit te leggen.

Meer kennis opdoen?

Bekijk onze whitepapers
Ga naar whitepapers

Search