Nuno
Nuno

Moving a Legacy Adobe AEM Site From End-of-Life VMs to Kubernetes on Azure

Overview

A consumer brand ran its website on Adobe Experience Manager, spread over about twenty virtual machines whose operating systems had reached end of life. Each environment had its own set of single VMs on local disks, deploys were manual, and nothing scaled. In October and November 2025 Nuno moved the author, publish and dispatcher tiers into containers on a single AKS cluster, with production spread over three availability zones, two publishers and a spare node for failover. The platform carried production from the November cutover through the holiday peak. In early 2026 the site moved off AEM entirely and the cluster was retired.

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.

More cases

Enhance Your Cloud Experience with Our Expertise

Don't let fears of service unavailability or lack of support hold you back. Trust in our commitment to excellence and guarantee of service.

Contact Us Today