De fascinerende wereld van Kubernetes

De tweede week van mijn stage begon en ik was klaar om de uitdaging met DevOps aan te gaan. Ik kreeg enkele handige tips en richtlijnen van Bjorn voor het begin van deze week. Eén daarvan was het gebruik van een Ingress op de Kubernetes-cluster voor een betere toegang tot mijn applicaties. Een Ingress zal al het binnenkomende verkeer ontvangen en de requests doorsturen naar de juiste applicatie. Met het gebruik van de Kubernetes-wiki, die gedurende dit hele project mijn levensredder zal zijn, was het vrij eenvoudig om de Ingress op de cluster te implementeren. Bij de volgende stap ga ik de Readiness en Liveness probes toevoegen aan de backend van de applicatie.

Deze probes zullen elke 2 seconden controleren of de applicatie in werking is en of deze klaar is voor gebruik. Dit wordt echt handig wanneer ongeduldige gebruikers de applicatie proberen te benaderen wanneer deze nog steeds aan het opstarten is. Tot nu toe heb ik de veranderingen die werden geadviseerd binnen een uurtje geïmplementeerd. Als het in dit tempo verder gaat ga ik klaar zijn met dit project in een mum van tijd, toch?

Jammer genoeg was dit niet zo. Mijn volgende uitdaging was om de logs van de Kubernetes-pods te kunnen verzamelen. Uren van onderzoek zijn voorbij gegaan en uiteindelijk is het me gelukt om een Elasticsearch-applicatie in te zetten. Dit in combinatie met Fluentd agents die de logs van de Kubernetes pods verzamelt en terugstuurt naar Elasticsearch. Dit klinkt vrij eenvoudig en duidelijk als je enige kennis hebt van dit onderwerp. Ik, aan de andere kant, had Google als vriend. Na het verkennen van de diepten van het internet, daarmee bedoel ik de derde resultatenpagina op Google, vond ik genoeg informatie om dit ding in elkaar te puzzelen. Voorlopig worden alleen de podlogs verzameld. In de toekomst zal ik een oplossing moeten vinden om ook  de logs van de applicatie zelf te verzamelen, maar dat zijn kopzorgen voor later.

De Mot

Ik werd gevraagd om een paar dagen per week in het kantoor van Mechelen te werken, omdat mijn stagebegeleider Jan op vakantie gaat. Ondertussen zal Bjorn me helpen met mijn project in Mechelen. Aangekomen in Mechelen stond me een prachtig kantoorgebouw te wachten. Vreemd genoeg leek het helemaal niet op de moerassen van Dagobah. De eerste uitdaging die me te wachten stond, was het betreden van het JIDOKA-kantoor. Bewaakt door twee deuren die een badge vereisen, waren mijn kansen klein. Gelukkig zag ik nog 2 andere JIDOKANS naar het kantoor lopen, dus ik slaagde erin om mee naar binnen te glippen.

De kantoorruimte in Mechelen ziet er echt cool uit. Er is zelfs een dartboard om persoonlijke meningsverschillen tussen de collega’s op te lossen. Na het claimen van een plek ben ik aan de slag gegaan met het uitrollen van de frontend van de applicatie. Langzaam maar zeker begint deze applicatie vorm te krijgen. De frontend is gebaseerd op een Angular-applicatie dit was vrij eenvoudig te implementeren. Omdat het, afgezien van de verschillende Docker images en connectie poorten, vooral lijkt op de Spring boot deployment.

Recruitment tool

Nu de look en werking van de applicatie in leven waren gebracht, kon ik beginnen met de bedrading. Mijn eerste probleem was dat de frontend een JSON-bestand kreeg met een ontbrekende omgevingsvariabele. In principe had de frontend de omgevingsvariabele met het pad van de backend niet ontvangen, hierdoor kon deze geen connectie maken met de backend. Ik heb meerdere manieren geprobeerd om dit stukje data door te geven aan de frontend, maar het probleem was dat de pod het bleef overschrijven met het standaard JSON-bestand.

Na enig overleg met Bjorn besloten we een kopie te maken van een afgewerkt JSON-bestand met alle benodigde omgevingsvariabelen. En dat bestand met een ConfigMap door te geven aan de pod. Om het probleem met het overschrijven van het standaardbestand te omzeilen, hebben we de code veranderd om geen standaardbestand te implementeren, omdat we zelf het juiste bestand zullen injecteren. Hoe klein het probleem ook leek, het duurde bijna een hele dag om het op te lossen. Ik besefte dat er dagen zullen zijn waarop we minder vooruitgang boeken, maar zolang er vooruitgang is, is er hoop.

Voordat Jan op vakantie ging, liet hij een klein cadeautje achter. Het cadeautje was in de vorm van een werkende Kubernetes-cluster op AWS. Nu kon ik al mijn Kubernetes-deployments naar de cloud migreren en kan mijn kleine laptop eindelijk wat rusten.

Terugkijkend op deze week kan ik met een gerust hart zeggen dat er goede vooruitgang is geboekt. Als deze trend zich volgende week voortzet, heb ik misschien een volledig werkende applicatie op Kubernetes. Of alles gaat crashen en moet ik opnieuw beginnen. Wie wil weten wat er gaat gebeuren, volg best deze blog om erachter te komen.