AKS is the choice when you need the full Kubernetes API, its ecosystem, or fine control over scheduling.
AKS gives you a Kubernetes cluster whose control plane (API server, etcd, scheduler) Azure runs for you. The Free tier has no SLA; the Standard tier adds a financially backed SLA and higher scale; Premium adds long-term support versions. AKS Automatic is a preconfigured mode that also manages nodes, scaling and security defaults.
What you still decide and operate:
- Node pools: groups of VMs (scale sets) of one size. A system pool runs cluster add-ons; user pools run your workloads, can be Spot, GPU or ARM, and can scale to zero. Spread pools across zones.
- Networking: Azure CNI Overlay (pods get IPs from a private overlay range, saving VNet space) is the common default, often with the Cilium dataplane for network policy and observability.
- Ingress: the application routing add-on (managed NGINX) or Application Gateway for Containers.
- Identity: Entra ID integration with Azure RBAC for Kubernetes authorization, a kubelet identity with AcrPull on your registry, and workload identity for pods calling Azure services.
- Scaling: cluster autoscaler or node auto-provisioning for nodes, HPA/KEDA for pods.
- Upgrades: Kubernetes minor versions are supported for about a year; use auto-upgrade channels, planned maintenance windows, and PodDisruptionBudgets so upgrades drain nodes safely.
Monitoring comes from Container Insights and managed Prometheus with Grafana.
Example
az aks create -g rg-aks -n aks-orders --tier standard \
--node-count 3 --zones 1 2 3 --node-vm-size Standard_D4s_v5 \
--network-plugin azure --network-plugin-mode overlay --network-dataplane cilium \
--enable-oidc-issuer --enable-workload-identity \
--enable-aad --enable-azure-rbac \
--attach-acr acrorders --auto-upgrade-channel patch --generate-ssh-keys
az aks nodepool add -g rg-aks --cluster-name aks-orders -n spotpool \
--priority Spot --eviction-policy Delete --spot-max-price -1 \
--enable-cluster-autoscaler --min-count 0 --max-count 10
az aks get-credentials -g rg-aks -n aks-orders
kubectl get nodes -o wideRemember
- Azure runs the control plane; you own node pools, workloads and upgrades
- Separate system and user node pools; spread across zones
- CNI Overlay with Cilium is the common networking default
- Use Entra auth, AcrPull via --attach-acr, and workload identity for pods
Watch out for
- Running application pods on the system pool, starving CoreDNS and other critical add-ons.