Urgent Upgrade Notes
Action Required
- CapacityQuota users: update the CapacityQuota CRD and migrate manifests to
autoscaling.x-k8s.io/v1beta1. Thev1alpha1API remains served but is deprecated;v1beta1is now the storage version. The updated CRD is available in this release. (#9890, @norbertcyran)
Changes by Kind
API Change
- Add
observedGenerationto CapacityQuota status. (#9864, @norbertcyran) - Add
readyReplicasto CapacityBuffer status to report buffer chunks schedulable on existing nodes. The bundled core library reconciles this field when CapacityBuffer pod injection is enabled; reconciliation is controlled by--capacity-buffer-ready-replicas-enabled, which defaults totrue. (#10342, core #213, @norbertcyran) - External gRPC: add
maxNodeStartupDurationandallowNonAtomicScaleUpToMaxtoNodeGroupAutoscalingOptions. This preservesMaxNodeStartupTimereturned byNodeGroupGetOptions, preventing newly registered nodes from being classified as Unready instead of NotStarted, and adds support forAllowNonAtomicScaleUpToMax. (#10266, @LakshmirajSunilSawant) - External gRPC: add optional
resourceSliceBytestoNodeGroupTemplateNodeInfoResponse, allowing providers to return node-local DRA ResourceSlices for template nodes and support scale-from-zero for pods using ResourceClaims. (#10303, @Despire)
Feature
- Add opt-in graceful degradation for large unschedulable-pod backlogs. With
--enable-graceful-degradation, scheduling simulations can stop at--pending-pods-batching-timeoutand proceed with a subset of pods instead of blocking the autoscaling loop indefinitely. This can trade optimal scaling decisions for continued progress under heavy load. (#9242, @damikag) - Add a
delay_reasonlabel to thenode_removal_latency_secondsmetric to identify technical blockers that delayed scale-down, such asBlockedByPodorAtomicScaleDownFailed. (#9721, @ttetyanka) - Expire ProvisioningRequest capacity bookings once all associated pods are scheduled, setting the
BookingExpiredcondition with reasonCapacityBookingConsumed. (#9806, @cvgenesis) - CoreWeave: implement
GPULabelso GPU nodes are tracked as upcoming while device plugins start, addrdma/ibcapacity to node templates, and add missing instance types includingb300-8x. (#10295, @chunter-bits) - DigitalOcean: support scale-from-zero for AMD GPU nodes and use
cpuMilliCoresfor more precise CPU allocatable calculations. (#10509, @m3co-code) - GCE: add pricing calculations for the E4 machine family. (#9516, @harrisgu-Google)
- GCE: add pricing information for the Z4D machine family. (#9791, @mariafromano-25)
- GCE: add pricing information for the Z4M machine family. (#10270, @yangspirit)
- GCE: proactively refresh cached MIG information after scale-down. (#9915, @tetianakh)
- GCE: add the
CLOUD_KMS_ERRORerror code to identify Cloud Key Management Service failures. (#10230, @MatthewGree) - Hetzner: add a per-nodepool
firewallsfield tonodeConfigsinHCLOUD_CLUSTER_CONFIG. Firewalls specified by ID or name are attached at server creation in addition to the cluster-wideHCLOUD_FIREWALL. (#9810, @tjorri)
Bug or Regression
- Fix CapacityBuffer sizing when both
replicasandpercentageare specified: use the maximum rather than the minimum, and round fractional percentage-based chunk counts up. (#9959, @walidghallab) - AWS: fix scale-from-zero for node groups using CSI-backed volumes with topology constraints. (#10133, @Debasish-87)
- AWS: fix integer overflow in memory calculations for ASGs using attribute-based
InstanceRequirementswithout instance-type overrides. AMemoryMiB.Minof 2048 or greater could produce a zero-memory template node and prevent scale-up. (#10171, @pujitha24) - Azure: invalidate the instance cache after an ETag precondition refresh so instance-derived data is recomputed from fresh state. (#9991, @MaximilianoUribe)
- Azure: fix VMSS instance deletion when
disableAzureStackCloudis enabled. (#10082, @tallaxes) - Cluster API: fix DRA scale-from-zero by generating ResourceSlices with a valid resource-slice count. (#10200, @dlanov)
- Cluster API: include
topology.kubernetes.io/zonein extracted node-template labels so pods with zone constraints can trigger scale-up. (#10258, @SISheogorath) - GCE: on a cache miss with an otherwise warm MIG cache, fetch only the missing MIG rather than rebuilding the entire cache. (#9917, @tetianakh)
- GCE: treat nodes with non-GCE or empty provider IDs as unmanaged rather than returning an error. (#10274, @ppmechlinski)
- OCI: recover node pools when failed node creation leaves a node without an instance ID. (#9703, @jlamillan)
- OCI: include the fault-domain label on node-pool templates so pods with fault-domain scheduling constraints can select zero-size pools. (#10047, @jlamillan)
- Scaleway: report nodes in an error state as
InstanceCreatingso failed provisioning is detected sooner. (#9949, @Tomy2e)
Other (Cleanup or Flake)
- Rename the Cluster Autoscaler-managed CapacityQuota
Validcondition tocluster-autoscaler.kubernetes.io/validto distinguish it from the public CapacityQuota API. (#9863, @norbertcyran) - Propagate cancellation through
Autoscaler.RunOnceand cancel the main context on termination signals so long-running iterations can be interrupted during graceful shutdown. (#9887, #10511, @yashrajshuklaaa, @norbertcyran) - Add
--scheduler-verbosityto reduce the verbosity of imported scheduler logs without lowering Cluster Autoscaler's overall log verbosity. (#9977, @chmurka1) - Azure: redact query parameters and escape paths when logging
ResponseError, through the updated Azure SDK dependencies. (#9919, @theunrepentantgeek) - Consume the extracted core implementation from the
sigs.k8s.io/cluster-autoscalermodule; provider integrations in this repository use the shared core packages and interfaces. (#10002, @Choraden) - Update Kubernetes dependencies to v1.37.1 and Cluster Autoscaler Core to
v0.0.0-k8s.v1.37.1. (#10366, #10544, @jackfrancis)
Images
registry.k8s.io/autoscaling/cluster-autoscaler:v1.37.0registry.k8s.io/autoscaling/cluster-autoscaler-amd64:v1.37.0registry.k8s.io/autoscaling/cluster-autoscaler-arm64:v1.37.0registry.k8s.io/autoscaling/cluster-autoscaler-s390x:v1.37.0
Full Changelog: cluster-autoscaler-1.36.0...cluster-autoscaler-1.37.0