In 2015 hebben wij de keuze gemaakt om met DevOps te starten. Onze systeembeheerders waren al langer bezig met kantoorautomatisering en technisch applicatiebeheer bij enkele klanten, maar dat stond redelijk los van onze applicatie, Scienta. Toch klonk de wens om deze twee werelden, development en operations, met elkaar te verbinden, met als gemeenschappelijk doel een beter beheersbaar platform te creëren voor Scienta.
We groeien en dat betekent dat de infrastructuur onder onze applicatie betrouwbaarder, sneller en schaalbaarder moet zijn. Zo begonnen wij met DevOps. Lees hier wat DevOps is.
Er waren goede redenen om met DevOps te starten. Releases waren bij ons helaas als een groot stuwmeer: we verzamelden zo veel mogelijk nieuwe code en stortten dat binnen één avond uit tijdens een major-release. Dat ging ten koste van de snelheid en flexibiliteit, en daarmee ten koste van onze klanten.
We wilden daarom van dat stuwmeer een stromend beekje maken: via Continious Integration naar Continuous Delivery als developmentfilosofie. Een spelfout in de applicatie veranderen of de allergrootste functionaliteit bouwen: voor ons DevOps-team is het dezelfde releaseprocedure.
Hoe we dat doen?
Door middel van het volautomatisch en meervoudig uitrollen van containers in clusters met Docker, Kubernetes en Rancher, met behulp van Helm en Drone.
Het begin: wat zijn eigenlijk containers?
Scienta is één groot enterprise-softwarepakket. En dat pakket doet allerlei verschillende dingen, zoals documenten exporteren of doorzoeken. Hiervoor gebruiken we Nginx, php-fpm of elasticsearch.
Al deze verschillende services werken prima op één groot schip (ons Scienta-ecosysteem), maar zodra we bepaalde dingen willen aanpassen of willen vervoeren naar andere plekken, werd het al snel heel lastig voor ons. Een nieuwe developer was al gauw een week (!) bezig met het klaarzetten van het Scienta-ecosysteem op zijn computer.
Daarom hebben we gekozen voor containerization: in plaats dat al deze services als losse onderdelen worden vervoerd op een schip, plaatsen we ze in containers. En doordat Scienta nu is opgedeeld in containers, kunnen we services veel makkelijker laten draaien op verschillende machines. Of dit nu de laptop is van een developer of onze gehele livepark: het maakt dankzij containers niets meer uit wie wanneer de applicatie nodig heeft. Veel voordeel dus voor portabiliteit en efficiëntere werkprocessen.
Docker, Kubernetes en Rancher
Deze containers draaien we natuurlijk op Docker. Maar we gaan nog een paar stappen verder.
We kunnen deze containers volautomatisch en meervoudig uitrollen en verdelen over clusters. Zo kunnen we de belasting eerlijk verdelen en kunnen we redundantie waarborgen. Dit doen we door middel van Kubernetes.
Kubernetes, het Griekse woord voor stuurman of piloot, is een open-source project vanuit Google. Waar Docker zorgt voor het opdelen van de applicatie in lichtgewicht containers, zorgt Kubernetes ervoor dat we al die containers automatisch, gecontroleerd en betrouwbaar kunnen ‘orkestreren’. Zo kunnen we containers dubbel uitvoeren en kunnen containers makkelijker met elkaar communiceren. Zo blijft Scienta, ook als we hard aan het groeien zijn, veilig en stabiel draaien.
Achter Kubernetes gebruikt ons DevOps-team de tool Rancher in combinatie met Helm. Met Rancher kunnen we verschillende Kubernetes Clusters aansturen en met Helm kunnen we flexibeler en sneller Kubernetes-bestanden aanleveren.
Een volautomatische OTAP-straat
Perfectionistisch als we zijn, vonden we dat het nóg beter kon.
Daarom creëerden we, dankzij een tool genaamd Drone, een automatische build-pipeline. We werken met een OTAP-straat (ontwikkelen, testen, acceptatie en productie), en dat kunnen we nu heel flexibel inzetten. Bij iedere Pull Request in onze centrale git-repository op Github worden er volautomatisch nieuwe Docker-containers gebouwd, worden Helm-bestanden klaargezet, die worden opgepikt door Rancher. Iedere wijziging die gedaan wordt is dus binnen momenten ook te releasen.
Toekomst
Deze eerste serieuze DevOps stap houdt in dat we voor de toekomst sneller en flexibeler kunnen opereren en releasen. Zaken zoals alfa- of bèta-releases of het A/B-testen van Scienta worden veel makkelijker. Ook het ontwikkelen van nieuwe functionaliteiten, zoals een Single Page Application in Angular, REST/GraphQL API’s of securityzaken, kunnen we dankzij onze DevOps inspanningen veel sneller, makkelijker en beter ondernemen.
En wat betekent dit voor klanten? Ontzettend veel.
Als we aan de slag gaan met nieuwe functionaliteiten, zoals het verder verbeteren van formulieren in Scienta of de workflow, kan dit veel sneller getest worden en sneller in productie worden genomen. En het Scienta-platform wordt veel schaalbaarder, zonder grip en controle te verliezen.