Een GitHub-cluster achterin het lokaal

Gepost door Wouter van den Brink op 7 juni 2023

Op de inspiratiedag van 2023 spreek ik (Wouter v/d Brink, red.) kort met Job Burema. Job is stamgast bij de inspiratiedagen, maar voor mij ook om een andere reden bijzonder. Hij was namelijk mijn docent wiskunde en mentor in de brugklas!

Hij vertelt enthousiast over een van zijn leerlingen, die oude computers van school heeft gebruikt om een soort cluster voor GitHub te maken. Zowel hij als ik begrijpen het niet heel goed, dus we spreken samen met leerling Lucas af op Het Streek Lyceum in Ede voor een demo en uitleg.

Op een regenachtig schoolplein word ik welkom geheten door mijn docent van vroeger, die me via de koffieautomaat begeleidt naar zijn informaticalokaal. Lucas, een 4 havo-leerling, klapt zijn laptop open en legt uit dat hij zijn laptop moet herstarten. Op het scherm zien we een Fedora-installatie en een aantal terminal-vensters. Er is iets aan de hand met zijn VPN, waardoor de verbinding wegvalt als de laptop is dichtgeklapt. Bij een demo moet er immers altijd iets fout gaan.

De echte demo begint. Lucas laat het dashboard van OpenLens zien, een IDE voor Kubernetes. Voor informatica heeft hij namelijk 12 oude computers van school in een Kubernetes CI-cluster veranderd, dat automatisch code uitvoert en test van alle leerlingen.

 

Alles in GitHub

De configuratie van het Kubernetes-cluster staat volledig op GitHub, in de vorm van YAML-bestanden. Elke keer dat Lucas een wijziging maakt aan een van deze bestanden, wordt de wijziging doorgevoerd in het cluster. Bovendien zorgt deze aanpak ervoor dat het cluster in korte tijd (opnieuw) is op te zetten: installeer een besturingssysteem, installeer K3s, en clone de configuratie.


Het cluster, en de software die erop is geïnstalleerd, staat allemaal op GitHub.

De GitHub-integratie stopt hier niet. Er is namelijk ook een Classroom opgezet voor de informaticaleerlingen op Het Streek. Een repository met opdrachten wordt automatisch geforkt voor iedere leerling. Elke keer dat de leerling nieuwe code uploadt naar GitHub, wordt de code geheel automatisch op het cluster uitgevoerd en getest. De resultaten worden op toegankelijke wijze teruggekoppeld naar de leerling, die snel kan zien welke opdrachten nu wel of niet af zijn.

Als dat nog niet genoeg was, zijn er in de online omgeving ook editors beschikbaar voor alle leerlingen. Ze draaien op de GitHub-cloud en zorgen ervoor dat iedereen direct online aan de slag kan, zonder iets te hoeven installeren. En dat is maar goed ook, geeft Job aan, want een volwassen IDE als PyCharm is natuurlijk iets te zwaar voor de gemiddelde schoolcomputer.

 

Monitoring en beschikbaarheid

Leerlingen die onbeperkt en geautomatiseerd code kunnen uitvoeren op computers van school, dat kan natuurlijk verkeerd gaan. Gelukkig is daar iets op bedacht. Lucas heeft een gedetailleerd Grafana-dashboard gemaakt waarop precies te zien is wat alle computers in het cluster aan het doen zijn, en welke gebruikers en processen daarvoor hebben gezorgd. Laat een leerling dus code uitvoeren die de computers op hol doet slaan, dan is achteraf precies aan te wijzen wie dat wanneer heeft gedaan.


In het Grafana-dashboard is precies te zien hoe het met het cluster gaat.

Gaat er een keer een deel van het cluster offline, dan is dat nog geen ramp. De opslag van het systeem draait op Longhorn, een gedistribueerd systeem speciaal voor Kubernetes. Alle bestanden worden redundant opgeslagen over meerdere computers, en het systeem zorgt er zelf voor dat er altijd meerdere kopieën online zijn.

Kuberwattes? CI-cluster?

Kubernetes is een vorm van orkestratie. Een Kubernetes-cluster is een verzameling servers. Als systeembeheerder kun je applicaties op het cluster installeren. Deze programma's worden dan verdeeld over de verschillende servers. Kubernetes zorgt ervoor dat alles blijft draaien, en dat er sprake is van repressie en correctie bij uitval.

Lucas maakt gebruik van K3s. Dit is een Kubernetes-systeem speciaal voor automatisering, waar veel applicaties al in zitten. Deze ingebouwde applicaties zorgen bijvoorbeeld voor HTTP- en DNS-servers waarmee je gebruik kunt maken van de applicaties in het cluster.

CI staat voor Continuous Integration. Het is een methode voor softwareontwikkeling waarbij de software zo vaak mogelijk wordt gecompileerd en getest. Ontwikkelaars kunnen direct zien of hun code werkt, en managers kunnen snel zien of nieuwe code kan worden opgenomen in het echte product. Bovendien kent CI toepassingen in het onderwijs, omdat je met de geautomatiseerde tests snel kunt zien of ingeleverde code werkt.

 

Niet alles ging helemaal perfect bij het maken van het cluster. Zo maakten Job en Lucas een denkfout bij het bestellen van switches. Er waren genoeg switchpoorten voor alle computers, maar niet voor de onderlinge en externe verbindingen.

Ook stopte de DNS-server er halverwege de demo mee. De verschillende domeinen van het cluster bestaan niet echt, maar worden geregeld door een eigen DNS-server. En daar was de limiet van bereikt. Geen probleem: open snel een terminal, wijzig het hosts-bestand, en door!

 

Toekomst

Hoewel dit artikel tot nu toe misschien doet overkomen dat het project klaar is, is dat nog niet het geval. "Ik hoop nog steeds op documentatie" zegt Job met een knipoog. Dat was namelijk een belangrijke voorwaarde voor het kunnen uitvoeren van dit project. We beginnen allebei een beetje te lachen en zien een overeenkomst: ik, vroeger, toen ik op de middelbare zat, en Lucas nu.

Samen zien we ook ruimte voor nieuwe toevoegingen aan het project. De domeinnamen voor alle services in het systeem bestaan niet echt, maar worden gesimuleerd door een DNS-server. Voor een relatief laag bedrag kun je een domeinnaam kopen. Dan kun je automatisch SSL-certificaten installeren.

We worden allebei enorm enthousiast en praten nog lang over allerlei informatica-onderwerpen, zoals security (waarbij Instruct een gratis security test ondergaat van expert Lucas :-)), Arduino's en IT-afdelingen op scholen. Uiteindelijk is de tijd helaas toch echt voorbij en keer ik terug naar Enschede. Gelukkig is de regenbui nu al lang voorbij.

 

-- Share It --