AKS Cost Optimization: A Guide to Reducing Spend in 2026 AKS clusters average just 8% CPU utilization, 20% memory utilization, and 2% GPU utilization, the lowest of any major cloud provider, according to Cast AI's 2026 State of Kubernetes Optimization Report. The report's benchmark data shows 69% of CPU and 79% of memory is wasted across AKS fleets, with GPU utilization trailing EKS at 5% and GKE at 6%. The guide recommends Node Auto Provisioning, generally available on AKS since mid-July 2025, Spot node pools that cut compute costs up to 90%, and Azure Reserved VM Instances that save 48-72% when applied to correctly-sized instances. AKS cost optimization is the process of reducing the cost of running Kubernetes workloads on Azure Kubernetes Service AKS while meeting performance and availability requirements. It involves rightsizing pod resources, adjusting node capacity through autoscaling, using Azure Spot Virtual Machines for interruption-tolerant workloads, and applying reservations or savings plans to predictable compute usage. AKS cost optimization is one of the highest-ROI infrastructure investments a DevOps team can make in 2026. According to Cast AI’s 2026 State of Kubernetes Optimization Report https://cast.ai/reports/state-of-kubernetes-optimization/ , AKS clusters average just 8% CPU utilization and 20% memory utilization. GPU utilization sits at a striking 2%, the lowest of any major cloud provider and a meaningful gap below EKS 5% and GKE 6% . In practical terms, most AKS clusters run at roughly one-fifth of their provisioned capacity while billing at full price. This guide covers the concrete steps to close that gap: choosing the right autoscaler, rightsizing pods before scaling, deploying Spot node pools safely, and applying committed-use discounts to the compute you actually need. For the broader Kubernetes context, start with the Kubernetes cost optimization overview https://cast.ai/blog/kubernetes-cost-optimization/ . Key Takeaways - Cast AI’s 2026 benchmark data shows 69% of CPU and 79% of memory is wasted across AKS fleets Cast AI 2026 State of Kubernetes Optimization Report . - GPU utilization on AKS averages 2%, the widest underutilization gap across any major cloud and a significant cost exposure for GPU-heavy workloads Cast AI 2026 State of Kubernetes Optimization Report . - Node Auto Provisioning NAP , now GA on AKS as of mid-July 2025, selects the optimal VM size per pending workload and outperforms Cluster Autoscaler for most production use cases. - Spot node pools cut compute costs up to 90%, but they require workloads designed to handle a 30-second eviction window. - Rightsize before you commit: Azure Reserved VM Instances save 48-72%, but only when applied to correctly-sized instances. - ARM64 nodes Ampere Altra, Dpls v5 series deliver 30-40% better price-performance for CPU-bound workloads like web servers and API services. Node Provisioning: Choosing the Right AKS Autoscaler Cluster Autoscaler: The Standard Path Cluster Autoscaler CA is the default scaling option for AKS Standard clusters. It scales pre-existing node pools up or down based on pending pod pressure and configurable resource headroom thresholds. CA is mature, well-documented, and straightforward to operate for teams with stable workloads. However, it has a fundamental constraint: every node in a pool uses the same VM size. Therefore, if your cluster hosts bursty batch jobs alongside low-CPU web services, CA cannot dynamically pick a smaller, cheaper VM for the batch work. You define the instance type at pool creation, and CA operates within that boundary. This rigidity leads to a common pattern: teams create separate pools for different workload classes, which works but adds operational overhead and often leaves gaps where no pool is optimally sized. For simple clusters with homogeneous workloads, CA is a reasonable choice. For anything more complex, consider NAP. Node Auto Provisioning: Karpenter Comes to AKS Node Auto Provisioning NAP reached general availability on AKS in mid-July 2025. Under the hood, it runs the Karpenter scheduler and selects from multiple VM sizes dynamically. Instead of scaling a fixed pool, NAP evaluates each pending pod’s resource requirements and selects the most cost-efficient VM type that satisfies them. This results in better bin-packing, lower idle capacity, and faster scale-up for heterogeneous workloads. NAP is available on both AKS Standard and AKS Automatic tiers. Configuration works through Kubernetes CRDs, not Azure CLI flags. NodePool and NodeClass CRDs define which VM families, zones, and capacities NAP can use. This declarative approach integrates cleanly with GitOps workflows. For teams already familiar with Karpenter on EKS, the mental model transfers directly. See the EKS cost optimization guide https://cast.ai/blog/eks-cost-optimization/ for comparison, and the GKE cost optimization guide https://cast.ai/blog/gke-cost-optimization/ for how Google Cloud handles the same challenge. Example: NAP NodePool CRD for AKS apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: general-pool spec: template: spec: nodeClassRef: group: karpenter.azure.com kind: AKSNodeClass name: default requirements: - key: karpenter.sh/capacity-type operator: In values: "on-demand" - key: kubernetes.io/arch operator: In values: "amd64" - key: karpenter.azure.com/sku-family operator: In values: "D", "E" limits: cpu: 1000 disruption: consolidationPolicy: WhenEmptyOrUnderutilized consolidateAfter: 120s AKSNodeClass: references the AKS node image and identity apiVersion: karpenter.azure.com/v1alpha2 kind: AKSNodeClass metadata: name: default spec: imageFamily: AzureLinux The karpenter.azure.com/sku-family requirement lets NAP choose from any D or E-series instance, selecting the optimal size per workload. For ARM64, add "arm64" to the arch values. AKS Automatic vs Standard: Choosing Your Tier AKS Automatic includes NAP by default and applies opinionated defaults for security, availability, and node management. It reduces the operational surface area your team needs to manage. For most production teams that want lower overhead and faster time-to-cost-efficiency, AKS Automatic is the right starting point in 2026. In contrast, AKS Standard gives you complete control over node pool configuration, OS type, taint strategy, and upgrade windows. This matters if you maintain custom VM types, run specific OS configurations, or manage cluster infrastructure through existing Terraform or Bicep pipelines. Choose Standard when your platform engineering team has the capacity to operate it deliberately. Otherwise, AKS Automatic with NAP delivers the faster path to lower spend. Rightsize First: Eliminate Waste Before Scaling Autoscaling only works efficiently when pod resource requests reflect actual usage. Cast AI’s 2026 benchmark data shows 69% of CPU and 79% of memory is wasted across AKS fleets Cast AI 2026 State of Kubernetes Optimization Report https://cast.ai/reports/state-of-kubernetes-optimization/ . Those wasted requests force the scheduler to provision more nodes than the workloads actually need. As a result, your autoscaler spins up capacity to satisfy headroom that never materializes. Fix request sizes first, then tune your autoscaler and commitment strategy. AKS Cost Optimization: Start with PromQL Sizing Queries These queries require at least 14 days of metric retention configured in Prometheus. Most Prometheus installations support this syntax, but verify your retention period with --storage.tsdb.retention.time=15d or equivalent. The following two queries produce accurate p95 CPU and p99 memory consumption per container over a 14-day observation window. Use these values to set resource requests, replacing estimates from developers who calibrate at deploy time without real production data. p95 CPU per container 14-day window max by namespace, container quantile over time 0.95, rate container cpu usage seconds total{container ="",container ="POD"} 5m 14d:5m p99 memory per container 14-day window max by namespace, container quantile over time 0.99, container memory working set bytes{container ="",container ="POD"} 14d:5m Run these queries before you touch any autoscaler configuration or purchase any reservations. The output often reveals that some containers request 4x what they use at peak, and others are already tight. Treat the p95 CPU result as your request baseline and the p99 memory result as your memory request value. Add a small buffer 10-20% for safety headroom. AKS Cost Analysis Add-on Before optimizing, you need cost attribution. The AKS Cost Analysis add-on provides namespace-level spend visibility in the Azure portal. Enable it with one command: az aks update --enable-cost-analysis --resource-group