Skip to content

cluster-autoscaler-1.36.0

Latest

Choose a tag to compare

@jackfrancis jackfrancis released this 08 Jul 20:18
9dbc007

Changes by Kind

API Change

  • Fixed a bug with DRA node readiness processor not considering devices from multiple resource slices (#9245, @mtrqq)
  • The flag should be set to empty for general release. This flag should only be used for specific clusters which have any such needs or as a mitigation tool if applicable. (#8869, @damikag)
  • Update Azure SDK to v2 (#8784, @mboersma)

Feature

  • DRA: partitionable devices support (#8559, @MenD32)
  • "cluster-autoscaler-status" config map will have a new state "suspended" that shows how many nodes are suspended, identified by node condition "Suspended = True". (#9397, @walidghallab)
  • A new experimental salvo-scale-up flag can be enabled to allow multiple scale-ups in a single CA loop. Additional --salvo-scale-up-budget flag can be used to configure the maximum time CA spends on subsequent scale ups in a single CA loop. (#9606, @morshielt)
  • AWS: Update EC2 static instance list on 2026-01-07 (#9013, @punkwalker)
  • Add DRA ScaleUp/ScaleDown metrics (#9267, @mtrqq)
  • Add fastpath binpacking optimization to scale-ups (#9145, @yonizxz)
  • Add flag --max-startup-time for separate liveness probes timeout until first successful loop (#9510, @yonizxz)
  • Add g7e and x8i EC2 instance types for AWS (#9097, @ceuity)
  • Add new label to last_activity metric called "mainSuccessful" that is emitted after each full loop execution that finishes without errors. (#8963, @jbtk)
  • Added --startup-taint-prefix flag to treat taints with matching key prefixes as startup taints. (#9296, @kincoy)
  • Added cluster autoscaler metric detecting DRA resource mismatches in cluster nodes (dra_node_template_resources_mismatch) (#9352, @mtrqq)
  • Added reconciliation loop for CapacityQuota CRD. It will run in the background if --capacity-quotas-enabled flag is true. (#9754, @norbertcyran)
  • Added support for CapacityQuota CRD, which can be used to limit resources scaled up by CAS. It can be enabled with --capacity-quotas-enabled flag. See the proposal and example usage: https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/proposals/granular-resource-limits.md (#8949, @norbertcyran)
  • Added support for auto-discovery for instancepools in the OCI cloud provider. Users can now supply --node-group-auto-discovery with the compartment ID, instance pool tags, and min/max size to let CAS detect and scale matching instance pools. (#9268, @domenicbozzuto)
  • Adds new "scaleup-simulation-for-skipped-node-groups-enabled" flag which enables an extra SchedulablePodGroups run for the skipped node groups during ScaleUp simulation. (#9346, @shaikenov)
  • Azure: implement AtomicIncreaseSize for VMS (#9731, @reneeli123)
  • Azure: implement AtomicIncreaseSize for VMSS (#9514, @jackfrancis)
  • Azure: optional ETag optimistic concurrency on VMSS capacity updates (#9783, @mboersma)
  • CapacityQuotas without Valid=True condition will not be enforced (#9788, @norbertcyran)
  • Chunk the list of nodes when running scheduler predicates in parallel (#9565, @tetianakh)
  • Cluster Autoscaler: Support Vultr in Helm chart (#9053, @mondragonfx)
  • Cluster autoscaling now works with gpu.intel.com/xe resource requests. (#9040, @poussa)
  • Improve performance of capacity buffers pods when they are unschedulable including during their scale-ups and when CA can't create nodes for them. (#9595, @walidghallab)
  • Improved logging for and other incremental improvements. (#9357, @jlamillan)
  • Introduce new metric: failed_node_creation_total (#9302, @MartynaGrotek)
  • Kamatera cloudprovider: added options for node scale up/down by turning servers on/off rather then deleting them. Many stability and speed-up improvements. (#9740, @OriHoch)
  • OCI: implement ForceDelete (#8876, @matkam)
  • Refactored resource quota tracking to support BOTH minimum and maximum limits using a unified model. This allows for more flexible implementation of scale-down prevention based on resource quotas. (#9598, @4llower)
  • The clusterapi provider now reads node taints from scalable resource spec in addition to the capacity annotation (requires CAPI v1.12+ with MachineTaintPropagation feature gate). (#9298, @LiangquanLi930)

Bug or Regression

  • Add template-node label to mitigate scale up issue (#9702, @NedAnd1)
  • Azure Cluster Autoscaler now handles VMSS target-size cache failures during delete operations more defensively, preventing negative cached sizes and target-size panics after failed or uncertain VMSS deletes. (#9779, @tallaxes)
  • Cluster-autoscaler now automatically reverts the target size of a node group when a scale-up request times out. This prevents cloud providers from indefinitely retrying failed node provisioning attempts after infrastructure capacity limits are hit. (#9132, @thatmidwesterncoder)
  • Fix "Skipping scale down on node group" log spam in ScaleDownCandidatesDelayProcessor (#9804, @rrangith)
  • Fix Azure provider incorrectly labeling ARM64 VM node templates as amd64 (#9331, @rrangith)
  • Fix BalanceSimilarNodeGroups bypassing resource quota checks during scale-up (#9494, @rrangith)
  • Fix OCI cloud provider OCPU-to-vCPU conversion: ARM A1 shapes now correctly use 1:1 ratio instead of 1:2, and instance pools now apply the conversion (previously missing). (#9429, @grkml)
  • Fix Scaleway cloud provider node pricing when cluster has 0 node pools (#9081, @pablo-ruth)
  • Fix bugs in OCI provider (#8837, @lxuan94-pp)
  • Fix cluster-autoscaler deadlock where upcoming nodes from failed or backed-off node groups block scale-up to alternative groups, leaving pods Pending indefinitely. (#9360, @ortherion)
  • Fix scale-down behavior when both scale-down-utilization-threshold and node utilization are zero, so empty nodes (for example, nodes with only DaemonSet pods) can be scaled down as expected. (#8975, @kincoy)
  • Fix: Handle NodeGroupForNode errors gracefully (#9046, @BigDarkClown)
  • Fixed CAPI provider failing to initialize when using CAPI v1.11+ with infrastructure providers that only serve v1beta1 APIs (e.g. Azure CAPZ). (#9458, @LiangquanLi930)
  • Fixed a bug in node removal latency metrics where "flapping" node states caused incorrect or negative latency values. Metrics now accurately track the full duration a node remains unneeded. (#9065, @ttetyanka)
  • Fixed an issue where Exoscale instance pool node groups ignored the configured minimum size and defaulted to 1. (#9506, @Debasish-87)
  • Fixed an issue where the --log-file option stopped working. Logging now correctly writes to the specified file in addition to standard error. (#8836, @lxuan94-pp)
  • Fixed event recording for CapacityBuffers. (#9135, @norbertcyran)
  • Fixes an issue on GCE where draining nodes can be miscategorized as upcoming nodes (#9319, @domenicbozzuto)
  • Fixes an issue where node_removal_latency_seconds reported incorrect values (missing the unneeded/unready threshold) when a previously unneeded node became needed again. (#8972, @ttetyanka)
  • OCI: Ignore string case when comparing instance pool summary state (#9250, @domenicbozzuto)
  • Pods with hard TopologySpreadConstraints using the default nodeTaintsPolicy will no longer cause scale-down/scale-up oscillation. The scale-down simulation now faithfully models the drain taint, matching real scheduler behavior. Pods using nodeTaintsPolicy: Honor are unaffected and continue to scale down correctly. (#9288, @tallaxes)
  • The Hetzner cloud provider adds a new serverLabels field to nodeConfigs in
    HCLOUD_CLUSTER_CONFIG. Labels specified here are applied directly to the Hetzner
    Cloud server at creation time, allowing cluster bootstrappers that authenticate nodes
    via Hetzner server labels (e.g. kops) to work correctly with cluster-autoscaler-created
    nodes. (#9430, @bjornharrtell)
  • Use application/json for CapacityBuffer client config (#9603, @jackfrancis)
  • Use application/json for ProvisioningRequest client config (#9546, @jackfrancis)
  • [GCE] Reduced number of listManagedInstances API calls during cluster scale down. (#9213, @tetianakh)
  • huawei-cloud-provider: Nodes without providerId are skipped (with a warning), and CA continues to work normally for other nodes. (#9204, @Hargeek)

Other (Cleanup or Flake)

  • --cluster-snapshot-parallelism flag has been deprecated. It is recommended to use --predicate-parallelism instead. (#9644, @Choraden)
  • AWS: use k8s.io/cloud-provider-aws v1.35.0 (#9003, @jackfrancis)
  • All implementations of Backoff interface must be thread safe. (#9308, @MartynaGrotek)
  • Cluster Autoscaler has transitioned its cloud provider initialization to a dynamic registration pattern. This architectural shift decouples the core logic from specific provider implementations, addressing long-standing "dependency bloat" and improving overall maintainability. No configuration changes are required for standard deployments. Developers creating custom Cluster Autoscaler binaries can now manage included providers via blank imports in their main package. (#9639, @Choraden)
  • Fix typo in metric name:
    failed_node_creation_total -> failed_node_creations_total (#9497, @MartynaGrotek)
  • GCE Provider: Support scale-up events larger than 1,000 nodes. The GCE provider now handles API validation limits internally, allowing --max-nodes-per-scaleup to be configured above 1,000. (#9315, @pmendelski)
  • Minor performance improvement reducing loop time in large clusters. (#9149, @x13n)
  • Pods with status.nominatedNodeName will not trigger scale up even if the target node does not exist (#9607, @norbertcyran)
  • Regenerate Azure static SKU list (#9323, @rrangith)
  • Update Kubernetes dependencies to v1.36.1 (#9636, @jackfrancis)
  • Update Kubernetes dependencies to v1.36.2 (#9839, @jackfrancis)
  • [GCE] Minor performance improvement (#9133, @x13n)

Uncategorized

  • Add support for counting CSI volume limits when scaling nodes (#8721, @gnufied)
  • Azure: OperationPreempted does not retry if delete fails (#9505, @MaximilianoUribe)
  • Azure: report deleting instances as gone from HasInstance (#9918, @jackfrancis)
  • CA: use consistent logic for determining upcoming Nodes in ClusterStateRegistry (#9868, @towca)
  • Fixed CapacityBuffers using only spec.limits to configure the replicas (#9369, @norbertcyran)
  • Fixed overwriting CapacityBuffer conditions and fixed typos in condition messages and reasons. (#9128, @norbertcyran)
  • Integrated CapacityBuffers with the core ResourceQuotas. Buffers will now respect the defined quotas, and the number of the buffer's replicas will be shrunk accordingly if provisioning the buffer would exceed the limit. (#9036, @norbertcyran)
  • Introduced cluster-autoscaler.kubernetes.io/safe-to-evict: "on-completion" annotation value. Pods with this annotation will not be forcefully evicted during node scale-down; instead, the Cluster Autoscaler will wait for them to natively run to completion before scaling down the node. Nodes with only these pods are prioritized for scale-down over nodes with standard pods requiring eviction. (#9355, @ulladz)

Images

  • registry.k8s.io/autoscaling/cluster-autoscaler:v1.36.0
  • registry.k8s.io/autoscaling/cluster-autoscaler-arm64:v1.36.0
  • registry.k8s.io/autoscaling/cluster-autoscaler-amd64:v1.36.0
  • registry.k8s.io/autoscaling/cluster-autoscaler-s390x:v1.36.0