Voor de journey ben ik in gesprek gegaan met Dennis Koster, senior Backend Developer bij Endeavour en Cedric Law, DevOps Engineer bij Endeavour. Endeavour is een digital agency met meer dan 150 medewerkers, gericht op diverse gebieden, van marketing tot custom applicaties en IoT.
Begin van de journey: van web apps op “traditionele” hosting naar Laravel web apps in containers
“Bij Endeavour ontwikkelen we webapplicaties voornamelijk in PHP met gebruik van frameworks als Laravel en Symfony. Eerder hadden we al onze websites en platforms op twee dedicated servers staan, bij True. Daardoor draaide voor alle websites dezelfde PHP-versie”, zegt Cedric. “Het was daarmee zeer lastig om de PHP-versie voor een individuele website te upgraden. We zouden dan óf alle websites naar de nieuwe versie moeten upgraden, inclusief ervoor zorgen dat alle dependencies compatible zijn. Of we zouden een nieuwe dedicated server per PHP-versie moeten aanschaffen en de betreffende websites daarheen migreren. Dat maakte het voor websites niet erg flexibel.”
De eisen die opdrachtgevers en projecten tegenwoordig aan websites, web apps en platforms stellen, zorgt dat deze steeds zwaarder worden en meer schaalbaarheid nodig hebben. “Door ze in containers te deployen, met een container orkestratie tool, zijn web apps, websites en platformen niet meer afhankelijk van onderliggende configuraties van een server”, zegt Dennis. Containeriseren van applicaties bood uitkomst om aan nieuwe eisen en wensen te voldoen. Tegelijk zorgde het ook voor een nieuwe, technologische uitdaging voor de developers van Endeavour: de websites, apps en platformen in containers zetten en ze met een container orkestratie platform beheren.
De overweging van Kubernetes versus Docker Swarm en andere container orkestratie platforms
Eerder hebben de developers van Endeavour al gebruik gemaakt van Docker voor een development-project. Dat was de aanleiding om naar Kubernetes te kijken om containers in productie te kunnen gebruiken en om er uiteindelijk helemaal op over te gaan.
“Samen met een collega heb ik naar verschillende tools gekeken voor container orkestratie. Kubernetes en Docker Swarm zijn daarbij de bekendste. Uiteindelijk hebben we voor Kubernetes gekozen omdat het een sterk project is, gesteund door een grote open source community van developers en engineers”, zegt Cedric. “In vergelijking met Swarm heeft Kubernetes meer onderhoud nodig en is het in het begin lastiger om te leren. Uiteindelijk kun je met Kubernetes meer dan met Swarm, is het uitgebreider en zijn er meer configuraties mogelijk. Het is nu zo’n beetje de facto de standaard waar elk bedrijf mee werkt.”
Volgende stap in de journey: Laravel websites deployen in containers in Kubernetes
Cedric: “Vrijwel elke website staat nu gecontaineriseerd in een Docker image. Deze deployen we dan naar Kubernetes. Deze image hebben we kant en klaar gemaakt en gecustomised, zodat het aan onze eisen voldoet. Denk aan smoke tests, vulnerability scans en veel voorkomende libraries voor onze web applicaties.”
Dennis: “Vervolgens migreren we een website naar die container variant en hosten we ‘m op het cluster. Daarvoor is wel vooraf onderzoek naar de website nodig: hoe past dat in een container? Dat is meten, passen, itereren en het steeds beter en beter te maken. Wat heeft deze Laravel website nodig om in Kubernetes te draaien? We hebben daarvoor een standaard ontwikkeld die we nu voor al onze websites en platformen gebruiken.”
Voor de Kubernetes omgeving heeft Endeavour een managed Kubernetes cluster bij True. “True heeft ons bij de transitie vooral geholpen met het in productie zetten van onze containers. Daarnaast hebben een aantal van onze developers een onboardingstraining van True gehad voor het gebruik van Kubernetes”, zegt Dennis.
Een nieuwe omgeving in Kubernetes is binnen een paar klikken opgezet
“Naar mate we Kubernetes meer en meer gebruiken, merken we hoe prettig het is. Zeker in combinatie met deployment straten en tools die we gebruiken. Eerder kon een deployment met een PHP deployer op heel veel punten fout gaat. Er was echter geen monitoring of logging voor, waardoor debuggen een stuk lastiger is. Met behulp van Docker containers is het proces nu veel duidelijker”, zegt Cedric.
“Bijkomend voordeel: willen we nu voor een klant een nieuwe omgeving opspinnen, dan is dat een paar klikken werk. Het draait dan met alle containers, API’s, databases en scheduled jobs erop en eraan. Dat maakt development een stuk makkelijker!” zegt Dennis. “Met onze CI/CD infrastructuur hoeven we als developers ons alleen te focussen op het ontwikkelen van features. Compileren, testen, containeriseren en deployen naar Kubernetes wordt geheel automatisch gedaan.”
De journey van Laravel op Kubernetes: makkelijker door bestaande abstractie-mogelijkheden
Dennis: “Wat Laravel geschikt maakt voor containerisatie, zijn al bestaande abstractie-mogelijkheden, een laag tussen je applicatie en de programmeertaal. Dat geldt voor bijvoorbeeld storage en databases. Pas een databasenaam in een Kubernetes cluster aan in de hostnaam en het draait. Voor storage is al een losse driver, in de vorm van een S3 bucket. Je bent al niet meer van local storage afhankelijk.”
“Het cluster draait alleen nog maar een API. Alle externe services, zoals mailserver, local storage en database zijn daarvan losgekoppeld. Als een pod om wat voor reden dan ook stopt met werken, dan moet je nog steeds over alle data beschikken”, zegt Cedric.
Wat is het fijnste van Laravel op Kubernetes?
Zowel Dennis als Cedric hoeft daar niet lang over te denken.
Cedric: “Het fijne voordeel van je Laravel applicaties in containers op Kubernetes: je spint een container op je laptop op en gaat aan de slag. Ben je tevreden? Dan spin je je Docker container op een Kubernetes cluster. Daar werkt ‘ie meteen! Geen debuggen meer waarom code niet meer werkt op een andere omgeving. Dat zorgt dat je sneller features kunt ontwikkelen en je release cycle wordt korter.”
“Het fijne van onze Laravel apps en platformen op Kubernetes: het schaalt veel beter. Zeker bij platformen die in één keer veel traffic krijgen omdat ze bijvoorbeeld snel groeien, meer aanzien hebben gekregen of veel meer klanten hebben gekregen. Om die workload op te vangen in je Laravel applicatie, is Kubernetes fantastisch voor”, zegt Dennis. “Ook geeft het gebruik van containers en Kubernetes ons de ruimte om met andere innovatieve technologieën te werken, zoals microservices met GraphQL stitching.”