AKS pricing is made of a cluster management fee per tier (Free, Standard, Premium or AKS Automatic), the virtual machines of the node pools, their disks, the load balancer and public IP addresses around the cluster, outbound bandwidth, and the telemetry that Container Insights writes into a Log Analytics workspace. The node VMs dominate almost every bill, log ingestion comes second, and on a small cluster the management fee is the smallest line of all.
Pricing dimensions
| Dimension | Unit | What drives it | Optional |
|---|---|---|---|
| Cluster management, Free | no fee, only the resources consumed | development, test, clusters under 10 nodes; up to 1,000 nodes, no financially backed SLA | the default tier of a Base SKU cluster |
| Cluster management, Standard | per cluster and hour (meter Standard Uptime SLA) | 99.95% uptime SLA on the API server with availability zones, 99.9% without; up to 5,000 nodes | required for production with an SLA and for the cost analysis add-on |
| Cluster management, Premium | per cluster and hour (meter Standard Long Term Support) | Standard plus 24 months of long-term support for Kubernetes versions; only together with the AKSLongTermSupport support plan | regulated environments or long upgrade windows only |
| AKS Automatic | per cluster and hour (Automatic Hosted Control Plane) plus one meter per VM family (Automatic General Purpose, Automatic Memory Optimized and others) | preconfigured on the Standard tier with the uptime SLA and a pod readiness SLA; node autoprovisioning, managed system node pools, Managed Prometheus and Container Insights are switched on by default | its own SKU, chosen when the cluster is created |
| Node pools | VM hour per size and operating system | number and size of nodes, Linux or Windows, Spot or regular; system nodes always run | none, at least one node pool runs |
| Disks | GB-month per disk SKU and snapshot | OS disks per node (unless ephemeral), persistent volumes through the CSI drivers | ephemeral OS disks avoid the meter |
| Load balancer and public IPs | rule hour, GB processed, IP hour | one Standard Load Balancer for services of type LoadBalancer and for egress, one static IP per exposed service | NAT Gateway or user-defined routing as the egress alternative |
| Bandwidth | GB outbound | responses to clients on the internet, replication between regions | none |
| Virtual nodes | Container Instances seconds per vCPU and GB | pods that the virtual kubelet add-on runs on Azure Container Instances; Linux only, Azure CNI only | add-on, off by default |
| Container Insights and Managed Prometheus | GB ingested and GB-month retained in the Log Analytics workspace, metric samples | container logs (stdout, stderr), Kubernetes events, performance tables; volume grows with pods and log level | off by default on AKS Standard, preconfigured on AKS Automatic |
| Purchase options | reservation or savings plan on the VM hours | the steady baseline of the node pools | see Azure reservations and Azure savings plans |
The management fee follows the tier, not the size: a Standard cluster with three nodes pays the same hourly rate as one with 500. Microsoft describes Virtual Nodes v2 as a cluster extension in preview that replaces the earlier add-on.
How it appears in your billing data
In the cost export an AKS cluster is not one line but a bundle of meters from several services. Only the management fee carries the service itself: MeterCategory Azure Kubernetes Service, MeterName Standard Uptime SLA for the Standard tier and Standard Long Term Support for Premium; AKS Automatic appears with the product Azure Kubernetes Service - Automatic and the meters Automatic Hosted Control Plane, Automatic General Purpose, Automatic Memory Optimized and the other family meters. A Free cluster has no meter of its own.
Everything else lands on the meters of the service concerned, each with a resource from the cluster's node resource group (MC_, followed by resource group, cluster name and region) as its ResourceId:
- Node VMs as
MeterCategoryVirtual Machineswith the series asMeterSubCategory(Dsv5 Series, for example) and the size asMeterName(D4s v5, orD4s v5 Spotfor Spot),PricingModelOnDemand,Spot,ReservationorSavingsPlan; Azure Virtual Machines pricing describes the meters. - OS disks and persistent volumes under
Storagewith the disk SKUs asMeterSubCategory(Azure managed disks pricing). - The Standard Load Balancer under
Load Balancerwith the metersStandard Included LB Rules and Outbound Rules,Standard Overage LB Rules and Outbound RulesandStandard Data Processed; the public IPs underVirtual Network,MeterSubCategoryIP Addresses,MeterNameStandard IPv4 Static Public IP. - Outbound traffic under
Bandwidth(Azure bandwidth and networking pricing). - Container Insights under
Log Analytics(Analytics Logs Data Ingestion,Analytics Logs Data Retention) orAzure Monitor(Basic Logs Data Ingestion), attributed to the workspace rather than the cluster (Azure Monitor and Log Analytics pricing). - Virtual nodes under
Container Instances(Container Apps, Container Instances and ACR pricing).
ResourceGroup and Tags tie the lines back to the cluster: the node resource group carries the cluster name, and tags set on the cluster are applied by AKS to the node resource group, the load balancer, the public IP and the other network resources, but not to the node pools; their scale sets and VM instances carry only the tags set on the node pool itself. In the FOCUS export the same lines carry ServiceName as the service (Azure Kubernetes Service, Virtual Machines, Log Analytics, following the meter), x_SkuMeterCategory and SkuMeter for the meter, ChargeCategory Usage for consumption and Purchase for a reservation purchase, and CommitmentDiscountId on the hours a reservation or savings plan covered.
None of these exports knows a namespace, a deployment or a pod. The AKS cost analysis add-on (Standard or Premium tier, built on OpenCost) reconciles usage data from the cluster with the invoice data and shows namespace and asset views in Cost Management with four charge types: idle (provisioned capacity no workload uses), service (uptime SLA, Defender for Containers), system (capacity AKS reserves on every node for the kubelet and container runtime) and unallocated. The views exist only for Enterprise Agreement and Microsoft Customer Agreement offers, data arrives after 8 to 24 hours, and virtual nodes are not supported. What container cost data can and cannot do in general is covered under Kubernetes cost data.
Levers
Configuration. The Free tier covers development and test; Microsoft recommends it for clusters under ten nodes with no need for an SLA. Premium pays off only when a Kubernetes version must run beyond community support, because the LTS fee is a multiple of the Standard fee. For Container Insights, the logs presets, the table selection in the data collection rule, namespace and annotation filters for stdout and stderr, and Basic Logs for ContainerLogV2 decide the ingested volume; Microsoft also names ingestion-time transformations and switching the visualisations to Managed Prometheus as the cheaper metric source. Ephemeral OS disks take the per-node disk meter off the bill where the VM size allows them.
Purchase option. Node pools are ordinary VMs: reservations and savings plans cover their hours, and Spot node pools lower the hourly rate for interruptible work (spot and preemptible capacity). Which form fits the baseline is a question for the commitment strategy; the management fee itself has no purchase option.
Architecture. The cluster autoscaler or node autoprovisioning sizes the node count to the requests, and requests that match actual usage lower the idle charge the cost analysis add-on reports (Kubernetes efficiency, rightsizing). Development clusters can scale to zero nodes or stop overnight (scheduling and auto-scaling). Many small clusters multiply the management fee, system nodes, load balancers and log workspaces; namespaces in a larger cluster share them, and Kubernetes cost allocation hands them back to teams. One service of type LoadBalancer per application creates one public IP each; an ingress controller or the application routing add-on folds them into one.
Where it goes wrong
- The VM cost does not show up under the cluster. The node VMs sit in the
MC_...node resource group and on theVirtual Machinesmeters; filtering on the cluster object's resource group shows only the management fee, and filtering on the cluster tag loses the VMs, because cluster tags are not inherited by node pools. Group by the node resource group'sResourceGroup, or set the tags on every node pool as well. - Log Analytics costs more than the nodes. Container Insights collects stdout and stderr of every pod and all Kubernetes events into one workspace by default; with verbose logging the ingestion grows faster than the cluster. Check the Container Insights Usage workbook for the tables and namespaces that drive the volume, then set a preset, filters or Basic Logs.
- The cluster is empty, the bill is not. System nodes, the Standard fee, the load balancer, public IPs and the workspace keep running without workloads. Stop development clusters that nobody needs at night, or scale the node pool to zero.
- Idle charge stays high although the autoscaler runs. The autoscaler reacts to requests, not to usage; oversized requests keep nodes alive that are barely used. Compare requests with measured usage and use the Vertical Pod Autoscaler in recommendation mode.
- A Premium fee nobody needs. A cluster was moved to Premium to postpone an upgrade and stayed there. Reset the support plan to
KubernetesOfficialand lower the tier to Standard once the version is back in community support. - A reservation does not cover the node pools. The reservation was bought for another VM series or region, or node autoprovisioning picks changing sizes. Check
PricingModelandCommitmentDiscountIdon the node lines and align the reservation with the series actually running. - Several public IPs per application. Every service of type LoadBalancer gets its own static IP and its own rules on the load balancer. Count the services and consolidate them behind one ingress.
Example
List prices from the Azure Retail Prices API in EUR for Germany West Central, read on 2026-10-21, consumption prices without a reservation: cluster management costs EUR 0.088 per cluster and hour on the Standard tier (Standard Uptime SLA) and EUR 0.528 on the Premium tier (Standard Long Term Support); for AKS Automatic the API lists the meter Automatic Hosted Control Plane at EUR 0.1408 per hour and the family meters Automatic General Purpose at EUR 0.009, Automatic Memory Optimized at EUR 0.0142 and Automatic GPU Accelerated at EUR 0.0411, each with a unit of one hour and without the API saying what one unit covers. A Linux node of size Standard_D4s_v5 costs EUR 0.2024 per hour, EUR 0.0374 as a Spot node. Around the cluster, a static Standard IPv4 address costs EUR 0.0044 per hour, and the Standard Load Balancer EUR 0.022 per hour for the included rules, EUR 0.0088 per additional rule and hour and EUR 0.0044 per GB processed. Log ingestion costs EUR 2.6311 per GB in Analytics Logs and EUR 0.572 per GB in Basic Logs, retention beyond the included period EUR 0.1144 per GB and month. Three D4s_v5 nodes (EUR 0.6072 per hour) therefore cost almost seven times the Standard fee, and a single GB of Analytics Logs per day already exceeds that day's management fee (EUR 2.112); the management fee is not the lever, nodes and logs are.
Sources
Read on 2026-10-21. Microsoft Learn: AKS Free, Standard and Premium pricing tiers, Introduction to AKS Automatic, Virtual nodes, Monitoring cost for Container Insights, AKS cost analysis add-on, Understand AKS usage and costs, Azure tags in AKS, Cost details fields, FOCUS cost and usage details schema. Prices: AKS pricing page (script-rendered, no readable amounts) and the Azure Retail Prices API in EUR: Azure Kubernetes Service in Germany West Central, Standard_D4s_v5, public IP addresses, Standard Load Balancer, Log Analytics, Basic Logs.