The problem
AEM author, publish, an Apache dispatcher and a redirect server ran on end-of-life CentOS VMs across four environments, five or six VMs each. Production was a set of single machines, each on its own local disk, so losing one VM meant losing that role until someone rebuilt it. Deploys went through manual Jenkins and Ansible runs. There was no autoscaling. The CDN in front of the site was fetching from the VMs with caching turned off, so every visitor request reached the origin.
Why Kubernetes and not a like-for-like refresh
The cheaper-looking option was to rebuild the same VMs on a supported operating system. Nuno estimated both paths, and the effort came out close. A refresh would have kept the single points of failure and the manual deploys, so the move to Kubernetes won.
What Nuno did
Nuno wrote Terraform for the cluster, network and container registry, and built container images for the author, publish and dispatcher tiers. AEM runs as StatefulSets on Azure managed disks, with one author, two publishers and dispatchers holding a 50 GiB cache. One cluster serves every environment through namespaces, with separate node pools for system, production and non-production workloads. The production pool is spread over three zones, and it keeps one spare node so a node can fail without downtime. Traffic enters through Azure Application Gateway, and cert-manager handles certificates. Deploys moved from Jenkins to a pipeline with an atomic production step that updates the author and both publishers together. Finally the CDN was pointed at the new origin with caching switched on.
Cleaning up after the move
In March 2026 Nuno powered off the old QA and UAT VMs and the non-production cluster nodes for a week. Nothing broke, so all 14 servers were deleted. That brought the estimated cluster cost down to about $1,376 a month.
Results
About twenty end-of-life VMs were replaced by one cluster that spreads production over three zones and heals itself when a pod or node fails. Deploys became a pipeline run instead of a manual sequence. The CDN started serving cached pages instead of passing every request to the origin. After the non-production cleanup the cluster was estimated at about $1,376 a month. The platform carried production through the 2025 holiday peak, until the site moved off AEM in early 2026 and the cluster was retired.
Solutions
Platform
- One AKS cluster defined in Terraform, with namespaces per environment.
- Production node pool over three availability zones, with a spare node for failover.
- AEM author, two publishers and dispatchers as StatefulSets on managed disks.
Delivery and edge
- Container images and Helm charts for each AEM tier.
- Jenkins replaced by a pipeline with an atomic production deploy.
- CDN caching switched on in front of the new origin.
















