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.
| Dimension | Unit | What's being charged |
|---|---|---|
| Pool nodes | per node-hour | node_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 disks | per disk-month | Each 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.16Optimization 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 poolA 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 workloadsA 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-sizingThe 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 baselineFor 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.