Kubernetes en game-ontwikkeling: 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.

Game-Developers-Working

Wat is Kubernetes?

Kubernetes (Grieks voor stuurman of piloot) begon als een open-sourceproject 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 was er namelijk vroeg bij voor wat betreft 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 anno 2019 deze tool.

Bekijk ook onze whitepaper: Kubernetes voor game development »

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 zal 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 app’s op één server ondergebracht worden. Logisch gevolg is dat daardoor de racks snel gevuld worden met severs, de racks het datacenter snel vullen en er al met al veel meer ruimte, energie en kosten gemoeid zijn dan noodzakelijk.

Met containers omzeil je dit probleem 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 kan er per proces geschaald worden, 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.

Kubernetes

“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 bron

Hoe werkt Kubernetes?

Kubernetes is geoptimaliseerd voor het beheren van grote groepen containers en de in de
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 op 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-master cluster die high available, oftewel 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 loadbalancer 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 loadbalancer 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.

Game-DevOps-Planning

Kubernetes en game-ontwikkeling

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 game-ontwikkelaars 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 multiplayer games (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 game-ontwikkeling 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 proces van
game-ontwikkeling 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 game-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. Game-ontwikkelaars
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. Game-ontwikkelaars kunnen dus blijvend
profiteren van nieuwe functionaliteiten en updates. Die continue optimalisatie van platform
en techniek maakt game-ontwikkeling 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 multiplayer games 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.

Logo Managed Services

Beloftevolle toekomst

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

Nieuwsgierig naar de combinatie Kubernetes en game-ontwikkeling? Of wil je Kubernetes
gewoon beter leren kennen om optimaal te profiteren van de mogelijkheden die het platform
biedt? Schroom dan niet om contact met ons op te nemen. Bij ACC ICT beschikken we over
ruime ervaring met en diepgaande kennis van Kubernetes en de bijbehorende
containertechnologie.

Download onze whitepaper: Kubernetes voor game development »