Containers

10-apr-2020

Sleutelen aan containers in quarantaine

game openshift stack containers hcs company

Ken jij al onze HCS container game? Een klein juweeltje, ookal zeggen we het zelf 🙂, dat we hebben afgestoft speciaal voor deze quarantaine tijd. Lees over dit mooie OpenShift project, hoe het is ontstaan en de reis daarnaartoe.

Het zijn rare tijden nu het coronavirus om zich heen grijpt. Juist nu, in april, zouden we het 5-jaar bestaan van HCS samen vieren. Helaas is het feest, om begrijpelijke redenen natuurlijk, nog even uitgesteld. Toch nodigt zo’n jubileum uit om even terug te kijken. Tijdens deze terugblik kwamen we in ieder geval al één super leuk en leerzaam OpenShift projectje tegen: de HCS Game.

game-stack-the-containers

Bij HCS Company stimuleren we altijd de Fun-factor. En, omdat collega’s en mede-IT-ers momenteel thuiswerken, is het een mooi moment om dit project eens uit de oude doos te halen. Hierdoor kun je er zelf mee aan de slag! Mocht je geen zin hebben om de game zelf te bouwen (ff geen DIY)- dan kun jij of je gezinsleden het natuurlijk ook gewoon spelen of… als je kunt…de highscores hacken.

Graag nemen wij, Vincent van Dam en Klaas-Pieter Majoor, jullie mee in de flashback van onze HCS game. We werken voor nu de game iets bij met iconen van #superhelden omdat dat het thema is van 5 jaar HCS! Samen gamen, hacken én daarmee de technologie van OpenShift uitproberen, hoe cool is dat?!

Flashback the containers

Hoog tijd om eens terug te blikken en dit mooie OpenShift project af te stoffen. DIY Disclaimer, voor je verder leest: dit project kun je zelf uitvoeren. Alles wat je nodig hebt is toegang tot een OpenShift cluster en toegang tot Gitlab. Je kunt zelf op je laptop een cluster installeren via Red Hat CodeReady Containers of je kiest voor de cloud met een Red Hat Playground of de IBM Open Trial Labs. Keuze genoeg.

De originele code voor deze versie van de game kun je downloaden vanuit onze Gitlab repository. Last but not least: We zouden het leuk vinden als je een update van je high-score met ons deelt (mail naar marketing@hcs-company.com)! Wie weet win je wel een mooie prijs 😉

Ronde 1: de brainstorm

Het begint op een vrijdagmiddag in 2018, samen op kantoor, een beetje brainstormen wat we nou zouden kunnen gaan doen voor het Red Hat Forum dat jaar. Alles kwam voorbij, klantencases, verhalen over transformaties, Deep Dives over OpenShift, CI/CD optimalisatie, demonstreren van OpenShift op Raspberry PI, self-healing capaciteiten of scalability aantonen door middel van drones. Er was genoeg stof, maar was het ook “fun”? Waarom gewoon niet een game?

Met een paar biertjes op kwamen er natuurlijk al snel wilde ideeën: Duck-hunt op container pods, live-size-voice-controlled pong. Leuk en lachen! Precies wat we zoeken 😃.

brainstormen hcs game

Ronde 2: De game en het platform

Het idee van een game blijft in Vincent’s hoofd rondspoken en diezelfde avond begint hij te zoeken naar een realistisch spelletje. Al snel komt hij op het blog van Emanuele Feronato waar een spelletje ‘Stack the Crates’ staat. Een perfecte basis voor een container thema. Het spel is gekozen!

Daarnaast hebben we een platform nodig waarop we dit voor elkaar konden krijgen. Uiteraard kiezen we voor het OpenShift Container platform, gewoon omdat het kan. In 2018 kiezen we voor OpenShift versie 3.11; tegenwoordig kiezen we voor versie 4.3.5. In dit geval op de IBM Cloud, een nieuw experiment waar we razend nieuwsgierig naar zijn! Wil je meer weten van de techniek? Die info vind je hier

Ronde 3: Pipelines inrichten … en go!

Nu we het platform hebben, snel aan de slag! Het rebranden naar HCS en het spelletje in een nginx container stoppen is niet veel werk. Met OpenShift is het makkelijk een pipeline in te richten waardoor we makkelijk en snel deployen. We kiezen in eerste instantie voor Jenkins en plaatsen Tekton op de wishlist. Beiden worden ondersteund in OpenShift en onze ervaring bij de meeste OpenShift projecten is dat Jenkins nog het meest gebruikt wordt. Dat zal in de toekomst vast veranderen, vandaar dat we Tekton wel op de wensenlijst voor uitbreiding hebben staan (mooi onderwerp voor een vervolg op deze blog).

Er draait al snel “iets”, en langzaam laten we het zien aan wat mensen. Op deze pagina staat hoe je de game deployt op OpenShift door gebruik ter maken van pipelines. 

Ronde 4: We zijn live!

Mensen gaan spelen, en het spel slaat aan! In de HCS-app groep delen onze collega’s de scores. Wat we niet verwachten maar wel gebeurd: er ontstaat een onderlinge competitie. “Wie haalt de hoogste score?”. Leuk, maar is het niet veel leuker als er een topscore-lijst te zien is in het spel?

Snel duiken we weer achter het toetsenbord en we vervangen nginx met een backend die de scores bijhoudt. Door middel van web-sockets zorgen we dat alle clients real-time op de hoogte blijven van de hoogste scores op dat moment. Deze aanpak mist wel één belangrijke feature… De high-scores worden niet opgeslagen. Collega’s met de hoogste scores veranderen na het verlies van hun high-scores in collega’s met de hoogste bloeddruk… We besluiten om een nieuwe service te introduceren die verantwoordelijk wordt om de high-score op te slaan.

highscore-hcs-gameDe backend van het spel passen we ook aan. Bij elke nieuwe score wordt de REST interface van de service aangeroepen om de score te registreren en de highscores op te halen. Ook besluiten we voor de Postgress database een aparte pipeline te maken en zo hebben we inmiddels twee pipelines. Eén voor de infrastructurele componenten (postgres in dit geval) en één voor de twee services (het spel en de highscore service).

We realiseren natuurlijk al snel dat dit zo gaaf is, dat dit spel groter gaat worden dan langnek uit de Efteling. We zien de miljoenen bezoekers al op ons afkomen. Te gek!

Ronde 5: Je doet niet mee als je geen Kafka gebruikt

Wijs als we zijn, besluiten we om ons goed voor te bereiden. De REST-full (pull) interface vervangen we door een event bus. Het idee is simpel, de game backend stuurt een event op een topic met de behaalde score. De highscore service publiceert vervolgens de nieuwe highscore-lijst op een ander topic. Strikt genomen heb je hier niet een eventlog voor nodig. Een traditionele message bus voldoet prima, misschien zelfs beter.

Enfin, toch besluiten we Kafka te gebruiken om meer ervaring op te doen met Kafka op OpenShift. We breiden de infrastructuur pipeline uit met een Kafka deployment (wat tegenwoordig trouwens een stuk makkelijker is geworden met AMQ Streams) en de REST interface tussen de twee services vervangen we door een event bus implementatie.

Ronde 6: “what the F…”

Iedereen speelt er lustig op los. High-scores worden opgeslagen en zowel vriend als vijand doet z’n best om hoog te eindigen. Maar nu wordt akelig duidelijk wie er goed is in het spel en wie niet.

game-conversaties-hcsNu voor sommigen de high scores niet meer “gewoon” te realiseren zijn, gaan mensen op zoek naar andere manieren om bovenaan te eindigen. Het duurt niet lang of we worden door onze eigen collega’s gehackt!

hcs game

Wat zijn we naïef! Het kat en muis spel is gestart. Scores injecteren in onze backend? We voegen extra checks aan de code toe om dit misbruik te voorkomen. Omdat er meerdere backend services kunnen draaien, en theoretisch de speler van de ene backend naar de andere backend zou kunnen switchen, is er een behoefte om informatie te delen tussen de services. We gebruiken redis om deze informatie op te slaan en weer op te halen. Tsja, als we dan toch bezig zijn, voegen we ook metrics toe.

En voor de presentatie tijdens het Red Hat Forum en voor op de stand maken we een dashboard waar de highscores ook te zien zijn. Ook is daar live te volgen wanneer een spelletje door iemand gestart wordt, en beëindigd is. We hebben per slot van rekening een aantal Kafka topics waar deze events op gepubliceerd worden. Dus het is een kleine moeite om andere services daar ook gebruik van te laten maken.

highscores hcs game

Conclusie

Als we terugkijken naar de afgelopen 5 jaar HCS Company dan hebben we een traditie in het leven geroepen om “Fun” en “Kwaliteit” te combineren in projecten. De HCS game is ontstaan als geintje maar wordt inmiddels gebruikt als leeromgeving voor collega’s. Het OpenShift platform stelt ons in staat om klein beginnen en heel “agile” te reageren op het onvoorspelbare gedrag van spelers. Nieuwe functionaliteit is in no-time bijgebouwd en te deployen. Op- en afschalen is goed te doen, al moeten we nog aardig wat wachten voor miljoenen bezoekers…

Voorlopig blijven we ons richten op het snel bieden van nieuwe functionaliteit. Daarnaast gaan we deployen op de IBM Cloud en Tekton in de mix. Zin om mee te doen? Meld je bij een van ons! Wil je alles nog eens nakijken? Ook de demonstratie is leuk om te bekijken!

We dagen je uit om de game ook eens te spelen! En haal je een mooie score? Mail ons vóór 1 mei (met een screenshot) en wie weet win je een leuke prijs om de quarantaine tijd binnen iets leuker te maken!

Vincent van Dam & Klaas-Pieter Majoor

Grafana toont het real-time gebruik van de game. Tijdens het Red Hat Forum zijn dat er 3.036, is de hoogste score 141 en zijn er 6 hack-pogingen onderschept.

grafana board


 
Laat een reactie achter