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–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–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.