05 AKS Automatic
Goal
Experience simplified Kubernetes with AKS Automatic. Deploy the same Patient Triage app with zero infrastructure tuning and compare it with the standard AKS cluster from earlier lessons.
Estimated time
20 minutes.
Official references
Key concepts
| Feature | Standard AKS | AKS Automatic |
|---|---|---|
| Node pools | You create and manage | Auto-provisioned |
| VM size | You choose | System selects optimal |
| Scaling | You configure HPA + cluster autoscaler | Built-in, always on |
| Upgrades | You schedule | Automatic |
| Monitoring | You enable Container Insights | Enabled by default |
| Ingress | You install controller | App routing built-in |
| Security | You configure policies | Best practices enabled |
AKS Automatic is designed for teams that want Kubernetes without the operational overhead. It applies Microsoft's recommended best practices automatically.
Exercise
Step 1 — Create an AKS Automatic cluster
source .env
az aks create \
--resource-group $RESOURCE_GROUP \
--name $AKS_AUTO_CLUSTER_NAME \
--sku automatic \
--attach-acr $ACR_NAME
Note
AKS Automatic takes a few minutes to provision. The cluster comes with node auto-provisioning, monitoring, and app routing enabled by default.
Step 2 — Get credentials
Step 3 — Explore what is pre-configured
# Nodes — provisioned automatically
kubectl get nodes
# Monitoring agent — already running
kubectl get pods -n kube-system | grep ama-
# App routing — already installed
kubectl get pods -n app-routing-system
Notice: you did not need to configure any of this manually.
Step 4 — Deploy the same app
Use the same manifests from lesson 01:
kubectl apply -f manifests/aks/namespace.yaml
kubectl apply -f manifests/aks/configmap.yaml
kubectl apply -f manifests/aks/secret.yaml
kubectl apply -f manifests/aks/backend-deployment.yaml
kubectl apply -f manifests/aks/backend-service.yaml
kubectl apply -f manifests/aks/frontend-deployment.yaml
kubectl apply -f manifests/aks/frontend-service.yaml
kubectl apply -f manifests/aks/ingress.yaml
Step 5 — Verify the deployment
Get the external IP and test:
export INGRESS_IP=$(kubectl get ingress triage-ingress -n triage -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
curl http://$INGRESS_IP/api/health
Step 6 — Compare with standard AKS
Open the Azure Portal and compare both clusters side by side:
| Aspect | Check in Portal |
|---|---|
| Node pools | AKS Automatic → no manual node pool management |
| Monitoring | Insights tab → already active |
| Upgrades | Settings → Auto-upgrade enabled |
| Network policy | Networking → Azure network policy active |
Step 7 — Observe auto-scaling
AKS Automatic scales nodes automatically based on workload demand. You do not need to configure a cluster autoscaler:
# Apply the HPA — pod scaling still works
kubectl apply -f manifests/aks/hpa.yaml
# Check the node count after deploying
kubectl get nodes
If you send load (like in lesson 03), AKS Automatic provisions additional nodes as needed — without any autoscaler configuration.
What this lab demonstrates
- Creating an AKS Automatic cluster with a single command.
- Batteries-included: monitoring, ingress, scaling, upgrades.
- Deploying the same manifests with zero changes.
- Reduced operational overhead compared to standard AKS.
- Node auto-provisioning — the cluster picks VM sizes for you.
When to use AKS Automatic
-
Choose AKS Automatic when you want Kubernetes without the ops overhead. Ideal for teams new to Kubernetes, dev/test environments, and workloads where Microsoft's defaults align with your needs.
-
Choose Standard AKS when you need fine-grained control over node pools, VM SKUs, network plugins, or custom policies.
Expected result
The Patient Triage app runs on AKS Automatic with the same manifests. The cluster self-manages nodes, monitoring, ingress, and upgrades.
Verification
- [ ]
az aks show --name $AKS_AUTO_CLUSTER_NAME --resource-group $RESOURCE_GROUP --query skushows Automatic. - [ ]
kubectl get nodesshows auto-provisioned nodes. - [ ]
kubectl get pods -n triageshows all pods Running. - [ ]
curl http://$INGRESS_IP/api/healthreturns{"status": "healthy"}. - [ ] Container Insights is active without manual setup.
Cleanup (optional)
If you want to keep only the standard cluster for later lessons: