What it shows
Each row surfaces the facts you’d otherwise chase acrosskubectl:
- Saturation — an HPA that’s out of headroom (
maxReplicas − currentReplicas ≤ 1). A fixed (min == max) HPA is never flagged saturated. - Responsiveness posture + source — the resolved scale-up/down behavior and where it came from (
original/override/policy/scheduled). - CPU target + source, and config-drift facets: fixed-replicas, sensitivity override, scale-down disabled, “using default.”
- Over-provisioned min — an HPA pinned at an over-committed
minReplicaswith a recommended right-sized value and the replicas it would save. - Auto status — whether Auto-Optimization is effective for this HPA, and its per-HPA override.
Inert HPAs are demoted
An HPA that can’t scale on CPU — fixed-replicas, a disabled CPU target (≥ 100%, a value the pod can never reach), or a memory/custom-metric HPA — is marked inert (nothing to tune). The default “Tunable only” filter hides inert HPAs so the actionable ones aren’t drowned by a fleet of decorative single-replica ones. A fleet-summary strip (total / saturated / inert / using-default / overridden / scale-down-disabled) sits above the table, and facet filters narrow it.Bulk tuning
Select up to 500 HPAs and apply one action — every mutation reuses the exact per-HPA logic the single-workload controls use, so single and bulk never diverge:Where to find it
The HPA Audit page is in the Nodes navigation group. Recommendations (right-sized min, CPU target) render as clickable chips that open a pre-filled modal — you confirm, Autopilot never auto-applies them.The audit is read-and-tune, not autonomous: it surfaces what could change and lets you apply
it. Turnkey autonomous tuning is Auto-Optimization; this page is
where you steer it across the fleet.