Skip to content
AzureAzure Kubernetes ServiceContainers

azurerm_kubernetes_cluster_node_pool cost estimation

An additional node pool for an AKS cluster, billed as the underlying VMs it runs. Two Standard_D2s_v5 nodes are ~$140/month.

An azurerm_kubernetes_cluster_node_pool adds a separate group of nodes to an existing AKS cluster, used to run different workloads on different VM sizes (e.g. a memory-optimized pool, a GPU pool, or a Spot pool) alongside the cluster's default pool. It bills as the underlying Virtual Machine Scale Set nodes: node_count × the VM size's hourly rate. Two Standard_D2s_v5 nodes (~$0.096/hour each) is ~$140/month, plus each node's OS disk.

The node pool has no charge of its own, like the whole of AKS, the cost is the worker VMs. So the levers are the same: enable the cluster autoscaler on the pool so it scales node_count to demand instead of a fixed size, run a Spot node pool (spot_max_price set) for fault-tolerant workloads at up to ~90% off, right-size the VM SKU to the workloads scheduled there, and reserve the steady baseline.

Multiple node pools are a cost tool, not just an organizational one: a small on-demand system pool plus a large Spot user pool, or a right-sized pool per workload class, avoids forcing everything onto one VM size.

c3x prices the node pool from vm_size and node_count, so its contribution to the AKS bill is visible before deployment.

Terraform example

A minimal but realistic configuration that C3X can estimate.

resource "azurerm_kubernetes_cluster_node_pool" "spot" {
  name                  = "spot"
  kubernetes_cluster_id = azurerm_kubernetes_cluster.main.id
  vm_size               = "Standard_D2s_v5"
  node_count            = 2

  priority        = "Spot"
  eviction_policy = "Delete"
  spot_max_price  = -1

  node_taints = ["kubernetes.azure.com/scalesetpriority=spot:NoSchedule"]
}

Pricing dimensions

What you actually pay for when you provision azurerm_kubernetes_cluster_node_pool.

DimensionUnitWhat's being charged
Pool nodesper node-hournode_count × the VM size's hourly rate, billed continuously. Spot pools run the same VMs at a deep discount.
$0.096/node-hour for Standard_D2s_v5 → 2 nodes ≈ $140.16/month
Node OS disksper disk-monthEach node's managed OS disk bills per tier on top of compute.

Sample C3X output

A 2-node Standard_D2s_v5 pool, 24/7 (compute only):

azurerm_kubernetes_cluster_node_pool.spot
└─ Pool nodes (Standard_D2s_v5 × 2)   1460 node-hours   $140.16
                                      Monthly           $140.16

Optimization tips

Common ways to reduce azurerm_kubernetes_cluster_node_pool cost without changing the workload.

Run a Spot node pool for fault-tolerant workloads

Up to ~90% on the Spot pool

A node pool with priority = Spot runs evictable VMs at up to ~90% off. Schedule stateless, fault-tolerant pods there with taints/tolerations; keep system and stateful pods on a regular pool.

Enable the cluster autoscaler on the pool

30 to 50% on bursty workloads

A pool fixed at peak node_count pays for peak 24/7. The autoscaler scales the pool to pending-pod demand and removes idle nodes, usually the biggest saving on variable workloads.

Right-size the VM SKU per workload class

Proportional to right-sizing

The point of separate pools is matching VM size to workload. Put memory-heavy pods on E-series, general work on D-series, and don't run everything on one oversized SKU.

Reserve the steady baseline pool

40 to 60% on the steady baseline

For pools that always run, a reservation or savings plan on the VM size discounts the baseline; burst on Spot or on-demand.

FAQ

How is an AKS node pool billed?

As the underlying VMs, node_count × the VM size's hourly rate, plus OS disks, continuously. Two Standard_D2s_v5 nodes is ~$140/month. The node pool itself has no charge; AKS cost is always the worker VMs.

Why use multiple node pools?

To match VM size to workload and to mix pricing models, e.g. a small on-demand system pool plus a large Spot user pool, or memory-optimized and general pools. It's a cost tool as much as an organizational one.

How does c3x estimate the cost?

From vm_size and node_count, pricing node-hours at the VM rate. Autoscaling means actual cost tracks the running count; the estimate reflects the configured node_count.

Related resources

Estimate this resource in your own Terraform

Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including azurerm_kubernetes_cluster_node_pool.