# AKS Agent Pool

> An AKS agent pool bills for every node VM it holds whether or not pods run on them. ZopNight discovers each pool with node counts and VM sizes via Resource Graph, applies a 60-day metric lookback, and scales individual pools to 0 nodes on schedule, restoring the saved count on start.

Source: https://zop.dev/integrations/azure/aks-agentpool
Updated: 2026-08-19

---

An AKS agent pool is a group of identically sized VMs (backed by a scale set) that provides compute to an AKS cluster. Each pool bills for its node VMs whether or not pods are scheduled on them.

## A pool bills for nodes, not for pods

The meter on an agent pool is simply node count times VM size: each node is a full VM accruing compute charges for every allocated hour, with its OS disk billing on top. Pod density is invisible to the invoice. A pool of five nodes running three small pods costs exactly what it would cost fully packed, which is why per-pool utilization, not cluster-level averages, is where AKS savings hide.

## Independent pool schedules inside one cluster

Pools can be scheduled separately from their cluster. On stop, ZopNight scales a pool to 0 nodes, saving the prior node count; on start, that saved count is restored. This makes mixed clusters practical: a GPU pool used only for daytime experiments can sleep every night while the system pool and a shared services pool keep running. Zeroing a pool requires the agentPools/write action, included in the Zopnight AKS Access role. System pools that must retain minimum nodes should be left off schedules.

## Discovery signals on every agent pool

Azure Resource Graph surfaces each pool with its node count and VM size. Utilization from Azure Monitor metrics over a 60-day lookback feeds the AKS recommendation rules that identify underutilized or idle pools, so a pool that has hovered near zero CPU for weeks gets flagged even if nobody remembers it exists.

## Where agent pools overspend

Three recurring shapes: a second or third pool added for one migration and never removed; GPU or memory-optimized pools held at fixed size for jobs that run a few hours a week; and user pools pinned above zero "just in case" when the cluster autoscaler could refill them on demand.

## Reaching node pools in the portal

Azure portal → Kubernetes services → select the cluster → Settings → Node pools. Each row shows the pool's size, node count, and scale method. Size and node count are the two numbers whose product is the pool's bill.
