Skip to main content
discount · azure

Dev/test AKS clusters running every node at on-demand rates

resource types
1
rule IDs covered
1
severity
low

What does ZopNight detect here?

Spot VM node pools cut AKS compute costs by a measured 592% 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.

Signal and threshold

How ZopNight evaluates Dev/test AKS clusters running every node at on-demand rates.
Field Value
Rule IDsRC-250
Categorydiscount
Severitylow
Metricnone — pure configuration read
Sourceaks_spot_nodepool.go

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

Terminal window
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.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

417 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

417 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·