Build a multi-architecture Kubernetes cluster running nginx on Azure AKS
Introduction
Start your journey with Arm and x86 nginx workloads on a single Kubernetes cluster
Create the AKS cluster
Create the test utility
Deploy nginx on Intel x86
Deploy nginx on Arm
Deploy nginx multiarch service on AKS
Monitor performance with wrk and btop
Next Steps
Build a multi-architecture Kubernetes cluster running nginx on Azure AKS
Set up a multi-architecture AKS cluster
In this section, you’ll create a multi-architecture Azure Kubernetes Service (AKS) cluster that supports both Intel and Arm-based nodes. This setup allows you to deploy and compare workloads across different CPU architectures within the same Kubernetes environment.
You’ll work through three activities:
- Set up authentication - you’ll connect to your Azure account using the Azure CLI
- Create the cluster infrastructure - you’ll build an AKS cluster with two distinct node pools (one x86 and one Arm)
- Verify connectivity - you’ll confirm your cluster is running and accessible using
kubectl
This multi-architecture approach gives you the flexibility to run workloads optimized for specific CPU types while maintaining a unified Kubernetes management experience. By the end of this section, you’ll have a fully functional cluster ready for deploying containerized applications.
Create the cluster and resource
To begin, login to your Azure account using the Azure CLI:
az login
Once logged in, create the resource group and AKS cluster with two node pools:
- One with Intel-based nodes (Standard_D2s_v6)
- One with Arm-based nodes (Standard_D2ps_v6)
This Learning Path uses the westus2 region because it supports both Intel and Arm VM sizes. You can use a different region, but make sure it supports both VM types and AKS.
Set the environment variables as shown below and run the az aks commands on your command line:
# Set environment variables
export RESOURCE_GROUP=nginx-on-arm-rg
export LOCATION=westus2
export CLUSTER_NAME=nginx-on-arm
# Create resource group
az group create --name $RESOURCE_GROUP --location $LOCATION
# Create AKS cluster with Intel node pool in zone 2
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--location $LOCATION \
--zones 2 \
--node-count 1 \
--node-vm-size Standard_D2s_v6 \
--nodepool-name intel \
--generate-ssh-keys
# Add ARM node pool in zone 2
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name arm \
--zones 2 \
--node-count 1 \
--node-vm-size Standard_D2ps_v6
Each command returns JSON output with status information. Look for "provisioningState": "Succeeded" in each response to confirm the operation completed successfully.
Connect to the cluster
Verify kubectl is available by running:
kubectl version --client
The output should look similar to:
Client Version: v1.34.1
Kustomize Version: v5.7.1
If kubectl is installed the version information is printed. If you don’t see the version information printed, refer to the
Azure CLI Install Guide
and
kubectl Install Guide
.
Next, set up your newly-created K8s cluster credentials using the Azure CLI:
az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
The expected output is:
Merged "nginx-on-arm" as current context in /home/user/.kube/config
Now verify you’re connected to the cluster:
kubectl cluster-info
The expected output is:
Kubernetes control plane is running at https://nginx-on-a-nginx-on-arm-rg-dd0bfb-eenbox6p.hcp.westus2.azmk8s.io:443
With the cluster running, verify the node pools are ready:
kubectl get nodes -o wide
You should see output similar to:
NAME STATUS ROLES AGE VERSION
aks-arm-13087205-vmss000002 Ready <none> 6h8m v1.32.7
aks-intel-39600573-vmss000002 Ready <none> 6h8m v1.32.7
With all nodes showing Ready status, you’re now ready to continue to the next section.
What you’ve accomplished and what’s next
Great job! You’ve successfully created a multi-architecture AKS cluster with both Arm and x64 node pools. This is a significant milestone and you’re now set up to deploy and compare workloads across architectures. Keep going to see your cluster in action!