In een wereld waar er op technisch gebied steeds meer mogelijk is, is het soms best een uitdaging om een stevige basis te bouwen zodat je software toekomstbestendig is. Met een stevige basis ben je verzekerd van software die eenvoudig uit te bereiden is met extra features en heb je geen probleem op het gebied van capaciteit als het een veel groter succes blijkt te zijn dan je ooit had durven dromen. Een van de laatste trends op het gebied van softwareontwikkeling is het containeriseren van softwarecode.
Containerorchestratie door Kubernetes
Door op een slimme manier te kijken naar de opbouw van software maken we applicaties die altijd en op elke infrastructuur presteren.
Beginnen bij de basis
Wat is containerisatie?
Als je software op een server installeert, moet je met veel zaken rekening houden. Draait het juiste besturingssysteem op de server? Moet er met meerdere servers gecommuniceerd gaan worden? Zijn alle configuratiebestanden aanwezig? En dan hebben we het nog niet eens gehad over de gevolgen als je zou wisselen van cloud provider. Een van de oplossingen voor deze vraagstukken is containerisatie: het inpakken van softwarecode (en alle bibliotheken, besturingssystemen en configuraties die nodig zijn om de code uit te voeren) in een enkel bestand genaamd een ‘container’. Door dit inpakken kan de software uniform en consistent op elke infrastructuur draaien.
Duidelijkheid over development
Dat het plaatsen van software in containers zo populair is, is al te verklaren nog voordat er een regel code op het scherm staat. Doordat je duidelijke afspraken kan maken met het developmentteam over hoe een container eruit moet zien, kunnen ze snel en ongeremd applicaties ontwikkelen en implementeren. Wil je als developer een nieuwe tool gebruiken? Geen probleem! Je hoeft echt niet eerst de systeembeheerder te bellen die vervolgens iets op de server moet installeren. We installeren de nieuwe tool in de container waar we mee bezig zijn, zodat we verzekerd zijn dat de software overal werkt. Is de code geschreven op een desktopcomputer en moet het nu verplaatst worden naar een virtuele machine? Niets aan de hand, de container staat op zichzelf en is daardoor draagbaar; de software zal probleemloos op elk platform en elke cloud draaien.
De rol van Kubernetes
‘Kubernetes’ (klinkt als ‘koe-ber-neet-ies’) is containerorchestratiesoftware. Op het moment dat jij een grote applicatie hebt, dan zal deze bestaan uit verschillende functionaliteiten. Al deze onderdelen zitten in een eigen container. Kubernetes is het ecosysteem waarmee je al je verschillende containers en hun mogelijkheden automatiseert. Het helpt je communiceren met je verschillende containers en automatiseert enorm veel. Er zijn meer tools die ongeveer hetzelfde doen (zoals ECS en Docker Swarm), maar Kubernetes is al jaren de marktleider.
Efficiënt automatiseren
Dat software ontwikkelen in een container veel voordelen biedt is nu wel duidelijk, maar ook op het gebied van performance en beheer biedt containerisatie veel voordelen. Stel je hebt ineens heel veel bezoekers op je website, dan zorgt Kubernetes er (volledig automatisch) voor dat er een extra container wordt opgestart en de aanvragen van de website worden verdeeld over beide containers (ook wel ‘load balancing’ genoemd). De gebruiker merkt daar helemaal niets van, behalve misschien dat je website zo soepel draait.
Groeien zonder grenzen
De echte kracht van Kubernetes zit hem in de eindeloze mogelijkheden voor groei. Doordat je volledige applicatie in containers draait, is het eenvoudig om losse containers te upgraden of updaten (zelfs terwijl ze in gebruik zijn). Zo kan je precies toevoegingen of aanpassingen doen op die plekken waar het meeste winst te behalen valt. Ook horizontaal schalen (het gebruik van meerdere servers) is geen enkel probleem. De containerstructuur maakt verschillende software onderdelen eenvoudig verplaatsbaar, zonder dat je alles opnieuw moet configureren.
Powercombo samen met Knative
Maar het kan nóg efficiënter! Op het moment dat (delen van) applicaties niet worden gebruikt, hebben ze ook geen servercapaciteit nodig. Daarom maken we ook nog gebruik van ‘Knative’. Knative helpt ons om serverruimte beschikbaar te stellen, maar alleen als daar om wordt gevraagd. Applicaties draaien dus niet meer standaard in de achtergrond, maar worden opgestart op het moment dat iemand er om vraagt. Door deze combinatie van Kubernetes en Knative maken we optimaal gebruik van serverruimte én tijd.
Voordelen
- Verplaatsbare software die op elke infrastructuur dezelfde performance laat zien.
- Serverruimte wordt optimaal benut en serverbelasting wordt automatisch opgevangen.
- Als (een deel van) je software crasht, start Kubernetes automatisch een nieuwe container op zodat de eindgebruiker daar geen hinder aan ondervindt.
Nadelen
- Een applicatie moet cloud native zijn, wil het werken met deze software (maar daar kunnen we je wel mee helpen!).