Skip to main content
compliance · azure

AKS node pools running with the cluster autoscaler disabled

resource types
1
rule IDs covered
1
severity
medium

What does ZopNight detect here?

AKS node pools with the cluster autoscaler disabled hold a fixed node count whatever the workload does. Rule RC-1356 fires medium severity when the live agent-pool enableAutoScaling state, stamped by the discoverer as autoscaler_enabled, is explicitly "false"; an absent flag abstains. Unlike RBAC or network policy, autoscaling can be enabled in place.

Signal and threshold

How ZopNight evaluates AKS node pools running with the cluster autoscaler disabled.
Field Value
Rule IDsRC-1356
Categorycompliance
Severitymedium
Metricnone — pure configuration read
Sourceaks_node_autoscale.go

Fixed node counts in an elastic platform

A node pool without the cluster autoscaler holds exactly the node count someone last typed in. Overnight and at weekends those nodes idle at full price; during a traffic spike, pods sit Pending because nothing adds capacity until a human notices. Kubernetes is built around the assumption that the node supply flexes with pod demand. A static pool quietly breaks that on both ends, and the failure mode at peak (unschedulable workloads) is the worse half.

Why compliance and not cost

ZopNight files this under compliance rather than attaching a savings estimate, because a disabled autoscaler is a configuration-posture gap, not a measured waste signal, and the pool might be perfectly sized today. No dollar figure is claimed. Separate metric-driven rules handle the cases where node utilization is measurably low; this one flags the missing mechanism, which matters even while the sizing happens to be right.

An agent-pool property, read live

The finding rests on the agent pool’s enableAutoScaling property, which the discoverer reads from the live ARM API and stamps as autoscaler_enabled metadata; discovery runs under the built-in Reader role. Rule RC-1356 fires only when that state is an explicit "false" and fails safe when the flag is absent. A customer-editable autoscaler tag was the old gate; the rule no longer reads tags at all, so labels cannot suppress or fake the finding.

Enabling the autoscaler in place

No rebuild is needed. This is one of the AKS settings that changes on a running pool:

Terminal window
az aks nodepool update --cluster-name <cluster> -g <rg> -n <pool> \
--enable-cluster-autoscaler --min-count 1 --max-count 5

Pick the minimum from your steady overnight load and the maximum from peak plus headroom. Pools running workloads that genuinely cannot tolerate node churn (stateful sets pinned to local disks, for instance) are the legitimate exception; document them where reviewers will look.

Inspect enableAutoScaling per pool

Terminal window
az aks nodepool list --cluster-name <cluster> -g <rg> \
--query "[].{pool:name, autoscale:enableAutoScaling, count:count, min:minCount, max:maxCount}" \
-o table

Pools showing autoscale: false (with null min and max) are the ones this rule reports.

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·