Kubernetes, Docker en de veranderingen die ze met zich meebrengen
Bij MaxServ zijn we een tijdje bezig met het automatiseren van taken die voorheen handmatig werden uitgevoerd door de afdeling Operations. Denk daarbij aan taken als het klaarzetten van servers en het begeleiden bij live zetten van code. Met behulp van Kubernetes en containerization is verdere automatisering van deze taken mogelijk, maar brengt veel verandering met zich mee voor alle collega’s. Hierover zijn we in gesprek gegaan met Arno en Rick. In dit blog lees je wat containerization inhoudt, wat Kubernetes doet en hoe Arno en Rick het voortouw nemen in het trainen van onze collega’s.
Wat is Kubernetes?
Kubernetes, ook wel bekend als K8s, is een open-source systeem voor de automatisering van de deployment, het schalen en het managen van gecontaineriseerde applicaties. Concreet betekent dit dat Kubernetes veel handmatige taken van de afdeling operations vergemakkelijkt of zelfs volledig overneemt.
Om uit te leggen wat Kubernetes nu echt doet, moeten we eerst uitleggen wat containers zijn. Vervolgens gaan we in op de OTAP-methode en wat de rol van Kubernetes hierin is.
Containers en containerization
Één functie of proces
Met de komst van containers heeft er een verandering plaatsgevonden in de wereld van applicatie- en softwareontwikkeling.
Het idee is dat applicaties worden opgedeeld in componenten met slechts één functie of proces. Dit wordt ook wel containerization genoemd. Denk bijvoorbeeld aan een website. Deze zou kunnen worden opgedeeld in de volgende onderdelen:
Een webserver die communicatie met het internet via het HTTP-protocol mogelijk maakt.
De code in een programmeertaal zoals bijvoorbeeld PHP.
Een database server die de database verzoeken kan afhandelen.
Elk van deze onderdelen krijgt een eigen container waarin alles beschikbaar is om de functie uit te voeren. Daarnaast stellen containers geen eisen aan het onderliggende systeem. Er hoeft daarom niets specifieks geïnstalleerd te worden voor de functionaliteit van de container. Door deze aanpak is elke functie volledig geïsoleerd van de andere en kunnen er meerdere containers naast elkaar werken op dezelfde server. Ondanks de isolatie kunnen de verschillende containers wel met elkaar communiceren wanneer dit zo is ingesteld.Docker
Bij MaxServ werken we met de populaire tool Docker voor het werken met containers. De Docker suite bevat verschillende hulpmiddelen voor developers om gecontaineriseerde apps te bouwen, delen, organiseren en uitvoeren.
Virtuele Machines (VM’s)
Naast containers maken we bij MaxServ ook gebruik van Virtuele Machines (VM’s). VM’s lijken op virtuele computers met een eigen Operating System (OS) die draaien op een server. Containers maken je applicatie draagbaar. Door daarnaast ook virtuele machines te gebruiken is er niets afhankelijk van specifieke machines/servers. Hierdoor is het relatief eenvoudig om de applicaties te verplaatsen naar een datacentrum met meer capaciteit en snelheid om bijvoorbeeld vooraf bekende pieken in bezoekersaantallen aan te kunnen. Waar mogelijk maken we echter zoveel mogelijk gebruik van containers. Dit omdat VM’s meer ruimte innemen, vaak meerdere processen tegelijk draaien en complexer zijn.
Containerization en de OTAP methode
Ontwikkel, Test, Acceptatie en Productie
In de webdevelopment wereld wordt er vaak gebruikgemaakt van de OTAP-methode. OTAP is een afkorting die staat voor de fasen die software doorloopt wanneer het wordt gemaakt, namelijk: Ontwikkel, Test, Acceptatie en Productie. De namen van de fases spreken eigenlijk voor zich. Wanneer de applicatie in productie is, wordt het daadwerkelijk gebruikt door de beoogde gebruikers.
De voordelen van containerization binnen dit proces zijn:
Containers zijn in elke fase van de OTAP-methode gelijk. Hierdoor zijn de Ontwikkel-, Test- en Acceptatiefases meer representatief voor Productie. Daardoor komen fouten eerder en makkelijker aan het licht.
Doordat containers geen tot weinig, onderliggende, afhankelijkheden hebben, kunnen er makkelijker onderdelen van een applicatie vervangen worden. Bijvoorbeeld in het geval van een upgrade.
Dit samen opent de deuren voor CI/CD. CI/CD staat voor Continuous Integration and Continuous Delivery en is het stukje tussen de OTAP-fases in je project. De transitie naar elke OTAP-stap is geautomatiseerd en wordt ondersteund door CI/CD servers die iedere regel code valideren. De containers die gelijk zijn aan wat er uiteindelijk op de productieomgeving moet komen, worden automatisch gecontroleerd en uitgerold naar omgevingen waar developers en onze klanten al dan niet geautomatiseerd kunnen testen. Na het testen kan de code worden geaccepteerd waarna het live kan.Wat doet Kubernetes?
Hoe zetten we K8s in?
Bij MaxServ zetten we Kubernetes in om developers te faciliteren bij het ontwikkelen van applicaties. Alle randzaken die nodig zijn om dit goed te doen zitten in Kubernetes zelf, dus daar kan niks misgaan. Als developer kun je tegen Kubernetes zeggen: “Ik wil mijn applicatie draaien en dat moet op deze manier.” Alles wordt dan netjes opgezet en gekoppeld op de manier die voldoet aan de eisen van de developer. Hier hoeft Operations geen handmatige acties meer voor te doen.
Kubernetes stuurt als het ware alle containers aan. Zo houdt het bijvoorbeeld continu in de gaten of je applicatie nog draait. Wanneer er om wat voor reden dan ook iets stopt, wordt het door Kubernetes zelf hersteld. Het kan bijvoorbeeld gebeuren dat een server uitvalt. Dan zal Kubernetes zelf een nieuwe server opstarten en hierop de geraakte containers herstellen.
ARNO SCHOON DEVELOPER
Kubernetes en containers, de voordelen voor MaxServ
Hoewel Kubernetes al bij veel grote (tech)bedrijven wordt ingezet, is het voor de traditionele internetbureau-markt vrij nieuw. Voor ons biedt de inzet van Kubernetes veel voordelen, zowel voor klanten als voor collega’s:
- 99,99% uptime is gemakkelijker mogelijk
- Developers krijgen meer controle bij het opzetten van servers e.d. en zijn niet meer afhankelijk van de afdeling Operations.
- De afdeling Operations krijgt meer ruimte voor doorontwikkeling/optimaliseren omdat ze zich niet hoeven bezighouden met het opzetten van servers voor developers.
- Issues als de vulnerability in Log4j zijn gemakkelijker op te lossen. Dit omdat containers afzonderlijk kunnen worden geüpdatet of gepatcht doordat er geen overlap in afhankelijkheden is.
- Wanneer een server kuren vertoont kunnen we hem simpelweg uit de roulatie halen en door Kubernetes opnieuw laten neerzetten. Onderzoek naar de oorzaak kunnen we (vaak) doen nadat de dienstverlening weer is hersteld.
Trainingen voor en door onze developers
Nu klinkt het allemaal wel erg simpel om een server klaar te zetten met behulp van K8s. Het is echter belangrijk dat developers weten wat ze doen om de server de juiste instelling mee te geven. Daarom trainen we alle developers bij MaxServ. Er zijn genoeg trainingen beschikbaar over deze onderwerpen, maar die sluiten in veel gevallen nét niet aan op hoe wij het hebben ingericht. Daarom zijn collega’s Rick en Arno aan de slag gegaan met het maken van onze eigen trainingen voor developers. Tot nu toe zijn er twee trainingen beschikbaar; een Docker training en een Kubernetes training.
Uitgangspunt
Om de training vorm te geven heeft Rick voornamelijk gekeken naar hoe hij het zichzelf eigen heeft gemaakt en welke kennis hij daarvoor nodig had. Het begon allemaal bij de keuze voor Docker. De Docker training is dan ook opgezet vanuit het oogpunt van de gebruiker: wat moeten developers weten om de applicatie hier neer te zetten en ermee te werken. De volgende stap was leren debuggen. Een logisch vervolg was dus de Kubernetes training.
Het is niet perse een Kubernetes training, maar meer een training voor het gebruiken van de tools. Je leert in essentie niet hoe Kubernetes werkt. Je leert gebruik te maken van de tools om te communiceren met je applicatie om dingen te vinden die fout gaan in je applicatie en al dat soort acties. Het leren hoe Kubernetes in elkaar zit, moet daar los van staan.
RICK VAN RIEL DEVELOPER
Ontwikkeling is één van de kernwaarden van MaxServ. We vinden het belangrijk dat onze developers voldoende niveau hebben om de kwaliteit van onze platformen te garanderen. Daarom moeten dergelijke trainingen voor alle developers toegankelijk zijn. Wil je je aansluitend verdiepen in hoe Kubernetes echt in elkaar zit? Dan moedigen we dat zeker aan!
Waar willen we naartoe?
Uniforme werkwijze. Maar vooral met de kracht en flexibiliteit die containers en Kubernetes bieden. Een aantal basiszaken is of kan geautomatiseerd worden met Kubernetes. De focus van de developer kan daardoor meer liggen op het ontwikkelen van een applicatie, zonder alle zaken daaromheen. Door een aantal relatief eenvoudige basisonderdelen te automatiseren verdwijnt het ‘tedious’ werk en kan er door de flexibiliteit die containers met zich meebrengt iets heel vets gemaakt worden.
Hoe gaan we dit bereiken?
Sommige platformen zijn nog niet helemaal overgezet naar de nieuwe werkwijze waardoor nog niet alle collega’s er al dagelijks mee werken. Bij de collega’s die er wel mee werken, gaat er af en toe wat fout, maar dat hoort erbij. Wat we zien is dat collega’s beter weten aan te geven wat er dan fout gaat. Dit betekent ook dat ze beter begrijpen wat er gebeurt.
Vanuit daar is het een combinatie van interesse van de collega’s zelf, de noodzaak ervan benadrukken of uiteindelijk mensen aanwijzen die het verder mogen gaan oppakken. We helpen collega’s en moedigen ze aan om gewoon eens te gaan experimenteren en het te gaan ontdekken binnen hun eigen Namespace. De Namespace is een soort speeltuin waar collega’s hun eigen gang kunnen gaan zonder dat het platformen van klanten raakt.
Uiteindelijk zullen er ook meer diepgaande trainingen moeten komen.
We kunnen niet van collega’s vragen om zelf maar naar kubernetes.io te gaan en het uit te zoeken, want dan rennen er veel gillend weg.
ARNO SCHOON DEVELOPER
Met de huidige trainingen hebben ze de basis onder de knie en dat is een mooi vertrekpunt om op verder te borduren voor zowel bestaande als nieuwe collega’s.
Kom jij ook bij ons werken?
Denk je dat MaxServ ook bij jou past? Solliciteer dan op één van onze openstaande vacatures!