Magento Kubernetes

Magento op Kubernetes, per component goed ingericht

Magento 2 draait prima op Kubernetes, mits je het platform behandelt als een verzameling losse processen en niet als één server in een container. Webverkeer, cron, queue-consumers, cache en zoekmachine krijgen elk hun eigen plek. Het vaste team bouwt de images, charts en deploy-flow, en draait het daarna mee. Is goede managed hosting voor jouw shop goedkoper en eenvoudiger, dan zeggen we dat ook.

  • Static content en DI-compilatie in het image, niet bij het opstarten
  • Cron, consumers en Varnish als losse workloads met eigen resources
  • Eerlijke vergelijking met managed hosting zoals Hypernode

Wat betekent Magento op Kubernetes in de praktijk?

Een klassieke Magento-server doet alles tegelijk. Nginx, PHP-FPM, cron, consumers, Redis of Valkey en soms zelfs MySQL draaien op dezelfde machine. Dat werkt tot het niet meer werkt: een zware import trekt de CPU leeg en de checkout wordt traag, of een cronjob blijft hangen en niemand ziet het.

Kubernetes dwingt je om die processen uit elkaar te halen. Elke rol wordt een eigen workload met eigen resources, health checks en schaalgedrag. Webpods schalen mee met bezoekers. Consumers schalen mee met de wachtrij. Cron draait precies één keer per minuut, niet twee keer omdat er twee servers zijn.

De winst zit niet in Kubernetes zelf. Die zit in de discipline die het afdwingt: een onveranderlijk image per release, configuratie buiten de code, en geen handmatige wijzigingen op een server. De keerzijde is complexiteit. Een cluster vraagt kennis van netwerken, storage, monitoring en upgrades. Daarom beginnen we elk traject met de vraag of het voor jouw shop loont.

Op deze pagina staat hoe wij Magento 2 op Kubernetes inrichten, component voor component. Van het bouwen van het image tot de deploy zonder downtime. En wanneer we je juist aanraden om bij managed hosting te blijven.

Magento Kubernetes-architectuur: welke component waar draait

Elke rol in Magento krijgt een eigen workload. Stateful onderdelen houden we bij voorkeur buiten het cluster of in een managed dienst.

ComponentKubernetes-vormSchalen opAandachtspunt
Nginx + PHP-FPM (web)Deployment, twee containers in één pod of losse podsCPU en aantal requests, via HPAStateless houden: geen sessies of uploads op lokale schijf
VarnishEigen Deployment met Service ervoorMeestal vast aantal replicasPurge-requests moeten alle Varnish-pods bereiken
CronCronJob of Deployment met één replicaNiet schalen: precies één runnerOverlap voorkomen met concurrencyPolicy Forbid
Queue-consumersDeployment per consumer of groep consumersLengte van de wachtrij, bijvoorbeeld met KEDAConsumers niet ook nog via cron laten starten
Valkey (cache en sessies)Managed dienst of StatefulSetGeheugen, niet replicasCache en sessies gescheiden houden
OpenSearchManaged dienst of operator-gestuurde StatefulSetHeap en schijfPersistente volumes en snapshots inrichten
MySQL of MariaDBManaged database buiten het clusterInstance-grootte en read replicasBackups en point-in-time recovery bij de provider
pub/mediaObject storage of een ReadWriteMany-volumeOpslagcapaciteitAlle webpods moeten dezelfde bestanden zien

Plan een vrijblijvend gesprek over je project

Een half uur via video met de mensen die het werk ook echt doen. Kies hieronder een moment dat jou past.

  • Direct met het vaste team, geen tussenlagen
  • Concrete feedback op je huidige situatie of plannen
  • Eerlijk advies, ook als het antwoord "niet doen" is
  • Indicatie van kosten en tijdlijn
Liever bellen? 0591-239 299
Beschikbaar deze week

Plan een gratis Tech Check

Vrijblijvend jouw uitdagingen bespreken

Of bel direct: 0591-239 299

Het image: static content en DI-compilatie tijdens de build

De meest gemaakte fout bij Magento op Kubernetes is een container die bij het opstarten nog setup:di:compile en setup:static-content:deploy draait. Dan duurt een nieuwe pod minuten in plaats van seconden. Autoscaling wordt daarmee waardeloos: tegen de tijd dat de extra pod klaar is, is de piek voorbij.

Wij bouwen alles in het image. De Dockerfile is een multi-stage build. In de eerste stage draait composer install met --no-dev en een geoptimaliseerde autoloader. Daarna volgen bin/magento setup:di:compile en setup:static-content:deploy voor de talen en thema's die je echt gebruikt. Met Hyvä bouwen we ook de Tailwind-CSS in die stage. De laatste stage kopieert alleen het resultaat naar een slank PHP-FPM-image.

Om static content zonder database te kunnen bouwen, zetten we de configuratie van scopes, thema's en talen vast in app/etc/config.php via bin/magento app:config:dump. Gevoelige instellingen staan niet in config.php maar in env.php, en die vullen we pas in de cluster in vanuit environment-variabelen en Secrets. Zo is één image bruikbaar voor test, acceptatie en productie.

Elk image krijgt een unieke tag, gekoppeld aan de commit. Nooit latest. Daardoor weet je altijd precies welke code er draait, en is terugrollen een kwestie van de vorige tag weer uitrollen. Het image wordt in de pipeline gescand op kwetsbaarheden, bijvoorbeeld met Trivy, voordat het naar de registry gaat.

Media, sessies en logs: alles wat niet in de pod mag blijven

Een pod kan op elk moment verdwijnen. Alles wat moet blijven bestaan, hoort er dus buiten.

Media en uploads

  • pub/media op object storage via de remote storage-functie van Magento, of op een ReadWriteMany-volume zoals NFS, EFS of CephFS
  • Productafbeeldingen via een CDN serveren, zodat webpods geen mediaverkeer verwerken
  • Image-resizes niet bij elke deploy opnieuw genereren, maar bewaren op gedeelde opslag
  • Imports en exports in var/ niet op lokale schijf, maar op gedeelde opslag of object storage

Sessies en cache

  • Sessies in Valkey of Redis, nooit in bestanden
  • Default cache en full page cache in Valkey, in aparte databases of instances
  • Full page cache voor bezoekers via Varnish, met Valkey als backend voor de rest
  • Cache-invalidatie bij deploys gecontroleerd vanuit de release-flow, niet handmatig

Logs en monitoring

  • Nginx- en PHP-logs naar stdout, zodat Loki of een andere logcollector ze oppakt
  • Magento-logs uit var/log meesturen of omleiden, zodat ze niet verloren gaan met de pod
  • PHP-FPM-status en Varnish-statistieken als Prometheus-metrics
  • Alerts op wachtrijlengte, cron-achterstand en foutpercentages in de checkout

Cron en queue-consumers als losse workloads

Magento heeft cron nodig voor indexers, e-mails, sitemaps, prijsregels en opruimtaken. Op één server is dat één regel in de crontab. Op Kubernetes moet je kiezen. Een CronJob die elke minuut bin/magento cron:run start is eenvoudig, maar maakt elke minuut een nieuwe pod aan. Met concurrencyPolicy Forbid voorkom je dat runs elkaar overlappen. Bij veel cronwerk kiezen we vaak een Deployment met één replica die cron:run in een lus draait. Dan blijft het proces warm en zie je in de logs één doorlopend verhaal.

Belangrijk is dat er altijd maar één cron-runner actief is. Twee runners betekent dubbele e-mails, dubbele exports en locks die elkaar in de weg zitten. Lees ook waarom cron in Magento vaak het eerste is dat 's nachts vastloopt.

Queue-consumers verwerken asynchroon werk, zoals bulk-acties, export van producten en voorraad-updates. Standaard start Magento consumers vanuit cron. Op Kubernetes zetten we dat uit in env.php, via de instelling cron_consumers_runner met cron_run op false. Daarna draait elke belangrijke consumer als eigen Deployment met bin/magento queue:consumers:start en een limiet op het aantal berichten, zodat het proces regelmatig netjes herstart en geen geheugen lekt.

Gebruik je RabbitMQ als message broker, dan kun je consumers laten schalen op de lengte van de wachtrij met KEDA. Bij een grote import komen er automatisch extra consumers bij, en daarna schaalt het terug. De webpods merken daar niets van, want ze delen geen CPU met het achtergrondwerk.

Varnish, Valkey en OpenSearch: versies en inrichting

Versies volgens de systeemeisen van Adobe Experience League, stand oktober 2026. Controleer bij een upgrade altijd de actuele tabel.

Adobe noemt Valkey sinds 2.4.8 als ondersteunde cache- en sessie-backend. Dat sluit aan bij wat er in de markt gebeurde: Redis veranderde in 2024 de licentie, waarna de Linux Foundation Valkey startte als open fork. Redis 8 kwam in 2025 wel weer met een AGPL-optie. Voor Magento is Valkey de voor de hand liggende keuze, omdat het protocol compatibel is en de licentie geen vragen oproept.

Varnish draait bij ons als aparte Deployment achter de Gateway. Magento moet bij een cache-purge alle Varnish-pods bereiken. Met één Service-adres bereikt een purge maar één pod. Daarom kiezen we een vast aantal replicas met een headless Service, of één Varnish-laag per omgeving met voldoende geheugen. Bij een shop met veel verkeer is dat laatste vaak eenvoudiger en voorspelbaarder.

OnderdeelMagento 2.4.8Magento 2.4.9Hoe wij het inrichten
PHP8.3 en 8.48.5 volgens de systeemeisenEigen PHP-FPM-image per Magento-versie, met alleen de extensies die nodig zijn
DatabaseMySQL 8.4 of MariaDB 11.4MySQL 8.4 of MariaDB 12.3Managed database buiten het cluster, met backups bij de provider
ZoekmachineOpenSearch 2.19, later 3OpenSearch 3Managed OpenSearch of de OpenSearch-operator met persistente volumes
Cache en sessiesValkey 8Valkey 9Gescheiden instances voor cache en sessies
Varnish7.6, later 88Eigen Deployment met de door Magento gegenereerde VCL als ConfigMap
RabbitMQ4.14.3Managed broker of operator, consumers schalen met KEDA

Verkeer naar binnen: Gateway API in plaats van ingress-nginx

Veel Magento-handleidingen voor Kubernetes gebruiken nog de community-controller ingress-nginx. Die is door de Kubernetes-community met pensioen gestuurd. De aankondiging kwam in november 2025, het onderhoud liep op best-effort-basis tot maart 2026. Sindsdien verschijnen er geen releases en geen securityfixes meer. Bestaande installaties werken nog, maar zijn een risico.

Voor nieuwe clusters gebruiken we de Gateway API, met een implementatie zoals Envoy Gateway, NGINX Gateway Fabric, Traefik of Cilium. De keten wordt dan: Gateway met TLS via cert-manager, daarna Varnish, daarna Nginx en PHP-FPM. Een CDN of WAF zoals Cloudflare staat daar meestal nog voor. Meer over de keuze tussen controllers staat op onze pagina over ingress, Gateway API en TLS.

Deploy zonder downtime: wanneer het kan en wanneer niet

Een release van Magento bestaat uit twee delen: nieuwe code en mogelijk een gewijzigde database. Nieuwe code uitrollen zonder downtime is op Kubernetes eenvoudig. Een rolling update vervangt pods een voor een, en readiness probes zorgen dat een pod pas verkeer krijgt als hij echt klaar is.

De database is het lastige deel. bin/magento setup:upgrade past schema en data aan, en Magento controleert of de modules in de database overeenkomen met de code. Daarom draaien we vooraf bin/magento setup:db:status. Meldt die dat alles up-to-date is, dan rollen we de nieuwe pods uit zonder maintenance. Is er wel een schemawijziging, dan draait setup:upgrade --keep-generated als Kubernetes Job, voordat de nieuwe webpods starten. Met Argo CD doen we dat als PreSync-hook of in een vroege sync wave.

Bij schemawijzigingen kiezen we per release bewust: een korte maintenance-window op een rustig moment, of een release die in twee stappen backwards-compatible wordt gemaakt. Dat tweede kost meer werk en is alleen zinvol bij shops waar elke minuut telt. De eerlijke versie: bij de meeste shops is een maintenance-pagina van een paar minuten 's nachts de rationele keuze.

Terugrollen kan alleen veilig als de database het toelaat. Code terugzetten is een kwestie van de vorige image-tag uitrollen. Een gewijzigd schema terugdraaien niet. Daarom maken we voor elke release met schemawijzigingen een database-snapshot bij de provider.

Kubernetes of Hypernode: de rekenstap

Bij managed hosting betaal je voor een omgeving die is afgestemd op Magento, met beheer, updates en support erbij. Bij Kubernetes betaal je voor nodes, load balancers, opslag, een managed database, monitoring en vooral voor de mensen die het cluster bijhouden. Een cluster moet minstens elke paar maanden een Kubernetes-upgrade krijgen, en elke component erin heeft zijn eigen updates.

Zet die posten naast elkaar over drie jaar. Komt het verschil vooral uit op beheeruren zonder dat je de schaalbaarheid gebruikt, dan is managed hosting de betere keuze. Komt het uit op minder overcapaciteit, één platform voor meerdere applicaties of eisen aan portabiliteit, dan verdient Kubernetes zich terug. Op onze pagina over Kubernetes-kosten staan de kostenposten uitgewerkt.

Zo zetten we Magento op Kubernetes

Zes stappen, uitgevoerd door het vaste team dat het platform daarna ook beheert.

  1. 1

    Haalbaarheidsscan

    We bekijken je huidige shop, verkeerspatroon, achtergrondwerk en kosten. Uitkomst: Kubernetes, managed hosting of een tussenvorm, met de onderbouwing erbij.

  2. 2

    Architectuur per component

    Welke onderdelen in het cluster draaien en welke als managed dienst. Keuze voor provider, storage, Gateway API-implementatie en monitoring.

  3. 3

    Image en charts bouwen

    Multi-stage Dockerfile met compilatie en static content in de build. Helm-chart of Kustomize-basis met values per omgeving.

  4. 4

    GitOps en deploy-flow

    Argo CD met een PreSync-Job voor setup:upgrade, rolling updates met readiness probes en database-snapshots voor releases met schemawijzigingen.

  5. 5

    Testen onder belasting

    Loadtest op de acceptatieomgeving om autoscaling, Varnish-hitrate en consumer-capaciteit te controleren voordat er echt verkeer op komt.

  6. 6

    Livegang en beheer

    Overstap met een terugvaloptie, daarna monitoring, Kubernetes-upgrades, Magento-patches en kostenbewaking als doorlopend beheer.

Wat je opgeleverd krijgt

  • Haalbaarheidsadvies met kostenposten van Kubernetes naast managed hosting
  • Architectuurdocument per Magento-component
  • Multi-stage Dockerfile met DI-compilatie en static content in de build
  • Helm-chart of Kustomize-structuur met values per omgeving
  • Argo CD-configuratie met migratie-Job en rollback-procedure
  • Gateway API-configuratie met TLS via cert-manager
  • Monitoring en alerts voor web, cron, consumers en wachtrijen
  • Draaiboek voor releases, upgrades en incidenten

Waarom Coding.nl voor Magento op Kubernetes

Magento-kennis tot in de database

Hyvä Certified en Hyvä Silver Partner. We weten waar Magento schrijft, cachet en vastloopt, en dat bepaalt hoe je het in containers zet.

Eerlijk over hosting

Als Hypernode Silver Partner kennen we managed hosting van binnen. Past dat beter, dan adviseren we dat, ook als het ons minder werk oplevert.

Geen tussenlagen

Je spreekt direct met de mensen die het cluster bouwen en beheren. Geen projectmanagers die vragen doorgeven.

Meten met echte gebruikersdata

Als RUMvision Gold Partner meten we de laadtijd van echte bezoekers, voor en na de overstap naar Kubernetes.

Hyvä Silver PartnerHypernode Silver Partner

Veelgestelde vragen

Ja. Magento 2 draait goed op Kubernetes als je het opsplitst in losse workloads: web met Nginx en PHP-FPM, Varnish, cron, queue-consumers, Valkey en OpenSearch. De database houd je bij voorkeur als managed dienst buiten het cluster. Het image bevat de gecompileerde code en static content, zodat nieuwe pods binnen seconden klaar zijn.

Weten of Kubernetes voor jouw Magento-shop loont?

Vraag een haalbaarheidsscan aan. We bekijken je shop, verkeer, achtergrondwerk en huidige hosting, en vertellen je eerlijk of Kubernetes, managed hosting of een tussenvorm het meeste oplevert.