# AKS Spot Node Pool Opportunity

> Spot VM node pools cut AKS compute costs by a measured 5–92% depending on SKU and region, and dev/test workloads tolerate the evictions. ZopNight flags non-production node pools whose spotEnabled metadata is not true, computing the discount from live on-demand and Spot rates. No rates, no claim.

Source: https://zop.dev/integrations/azure/recommendations/aks-spot-node-pool-opportunity
Updated: 2026-08-19

---

## Interruptible workloads on uninterruptible pricing

Dev and test clusters rebuild themselves constantly by nature: that eviction tolerance is
exactly what Azure Spot pricing pays for, and most such clusters never claim it. The rule
classifies a node pool as non-production through an evidence chain: an env-style dev or test
tag is authoritative, a production tag suppresses a misleading name, and dev/test naming
patterns serve only as fallback. Production pools are never flagged.

## The already-Spot check reads the API, not labels

Whether a pool is already on Spot comes from the discoverer's authoritative metadata (the
agent pool's scaleSetPriority property, stamped as spotEnabled), with a legacy customer tag
consulted only when that metadata is absent. An earlier version read the tag alone, which the
platform never writes, and would happily recommend Spot for a pool already running on it.

## A discount computed, not quoted

Spot discounts vary wildly by SKU, region, and moment; flat marketing percentages are
fiction. ZopNight derives the fraction from the live on-demand and Spot rates for the pool's
exact VM size, bounded between 5% and 92%, and abstains entirely when either rate is missing.
The number on the finding is the number your region's market currently offers.

## Audit your pools' priority

```bash
az aks nodepool list --cluster-name <cluster> -g <rg> \
  --query "[].{pool:name, priority:scaleSetPriority, size:vmSize, count:count}" -o table
```

Any dev/test pool showing Regular (or null) priority is a candidate.

## Add a Spot pool alongside, do not convert

Priority is immutable on an existing pool, and the recommendation is deliberately additive:
create a Spot pool next to the current one, steer workloads onto it with node selectors and
tolerations for the Spot taint, and keep a small on-demand pool for anything eviction-averse.
System pools must stay on-demand, because AKS requires it. Handle evictions with graceful shutdown
hooks; they arrive with 30 seconds of notice.

## Signals that suppress the finding

A production classification, spotEnabled already true, an unpriced pool, or missing tier
rates each return silence. Reader covers all the metadata involved; Cost Management Reader
supplies the pool's billed baseline.
