ACK GOATScaler

Updated at:

ACK GOATScaler is ACK's next-generation node scaling add-on for instant node scaling. It focuses on improving scale-out success rates and providing customizable elasticity policies.

Introduction

ACK GOATScaler performs on-demand automatic scaling of nodes in ACK clusters. The The add-on continuously monitors Pods that cannot be scheduled due to insufficient resources. It then intelligently scales out by selecting the optimal instance types across multiple availability zones based on your node pool configuration. It also identifies and scales in long-idle nodes, helping you reduce node resource costs while ensuring application elasticity.

Compared to the previous generation of instant node scaling, ACK GOATScaler delivers significant enhancements in scale-out success rates, customizable scale-out policies, and throughput for large-scale clusters. It is ideal for scenarios that involve node pools with multiple instance types, require low scale-out latency, or need to control the scale-out order based on business priorities.

Usage

To learn how to enable and configure instant node scaling in your cluster, see Enable instant node scaling.

Note

New capabilities of this capabilities of this add-on arearameters, labels, or annotations. Some capabilities are enabled by default or take effect automatically. With the default configuration, the scaling behavior remains consistent with previous versions, allowing existing clusters to upgrade smoothly.

Release notes

August 2026

Version

Change

Date

Impact

v0.6.6

New features

  • Startup Taints support: Adds recognition and handling of startup taints. A startup taint indicates that the node has initialization work that must complete before Pods can run on it, such as driver installation or the readiness of network and security components. When a taint is recognized as a startup taint, GOATScaler treats the node as not yet ready but about to be ready: the node's capacity is counted in the scale-out logic, and the node is exempted from automatic deletion during the initialization window. This prevents nodes that are still initializing from being reclaimed as idle nodes.

    The protection is bounded by the initialization window of a single node. The window equals the value of the new-node-duration parameter plus 5 minutes (by default, 10 minutes plus 5 minutes, for a total of 15 minutes), anchored to the node creation time. After the window expires, regular scale-in evaluation resumes.

    Startup taints are defined as the union of the following three sources, matched by taint key regardless of effect:

    • The built-in prefix startup-taint.goatscaler.io/: works out of the box and requires no configuration.

    • The startup-taint parameter: matches taint keys exactly. Multiple values are supported, separated by commas. Example: startup-taint=example.com/init-guard.

    • The startup-taint-prefix parameter: matches taint keys by prefix (string prefix, not regular expression). Multiple values are supported. Example: startup-taint-prefix=example.com/boot-.

      Specify concrete prefixes and avoid broad prefixes that may match system taints, such as node..
  • raw_instance_id added to node naming modes: The node pool node naming mode (NodeNameMode) adds the raw_instance_id option. The node name directly uses the raw instance ID without a region prefix to meet specific naming integration requirements.

Optimizations and enhancements

  • Extended resource allocatability based on the device controller: For extended resources such as GPUs and custom devices, GOATScaler only declares the extended resources in the node's Capacity. The allocatable amount is based entirely on the reporting from the extended resource controller (device plugin), and Allocatable is no longer pre-filled. As a result, before the device plugin completes its reporting, the resource is not counted as allocatable, so scheduling and scaling decisions stay consistent with the actual readiness state of the devices. For in-flight nodes scaled out by GOATScaler itself, the resource is read back from Capacity during scale-out simulation to keep the simulation results consistent with the actual scheduler.

New parameters

  • startup-taint: The list of taint keys for exact matching of startup taints. Multiple values are separated by commas. Example: startup-taint=example.com/init-guard. The default value is empty, which means startup taints are recognized only by the built-in prefix.

  • startup-taint-prefix: The list of taint key prefixes for prefix matching of startup taints (string prefix, not regular expression). Multiple values are separated by commas. Example: startup-taint-prefix=example.com/boot-. The default value is empty, which means startup taints are recognized only by the built-in prefix.

August 12, 2026

Startup taint recognition is enabled by default (built-in prefix startup-taint.goatscaler.io/). To exactly match custom taint keys, configure the startup-taint or startup-taint-prefix parameter. The allocatable amount of extended resources is now based on the reporting from the device controller. The behavior of regular nodes that do not use extended resources or startup taints remains compatible.

May 2026

Version

Change

Date

Impact

v0.6.1

New features

  • Adds the batch scaling (Batch Scale) feature. The The add-on aggregates mergeableling requests into batches and issues them concurrently, which significantly improves overall scaling efficiency in large-scale scaling scenarios. This feature is controlled by the scale-by-batch switch and is enabled by default. When enabled, single-node scaling is also handled by this mechanism as a special case.

Optimizations and enhancements

  • Enhanced node image matching: During scale-out, the system precisely matches the node pool image based on the image ID in the node label alibabacloud.com/os-image-id and adds recognition for system image families such as Alibaba Cloud Linux 4 to make the assessment of inventory and instance type availability more accurate. This label is maintained by the system. Do not manually modify or delete it.

  • Periodic auto-sync of node pool configurations: The The add-on periodically syncsnges to node pool configurations, such as availability zone, instance type, image, and spot instance policy. These changes take effect automatically without restarting the component, reducing the risk of configuration drift.

  • Concurrent scale-out conflict handling: The The add-on automatically recognizes concurrentflict error codes from Auto Scaling, such as Operation.Conflict, and performs a brief backoff on the affected node pool before retrying. This process avoids invalid requests and improves stability in high-concurrency scale-out scenarios.

Security and maintenance

  • Upgrades the the add-on's Golang dependencyversion 1.25 to improve stability.

New parameters

  • scale-by-batch: The batch scaling switch. The value can be true or false. true indicates that batch scaling is used, and false indicates that node-by-node scale-out is used. The default value is true.

  • max-nodes-per-batch: The maximum number of nodes per batch. A value of 0 indicates no limit. The value must be a non-negative integer. The default value is 500.

May 29, 2026

Batch scaling is enabled by default. Single-node scale-out is treated as a special case of batch scaling. The results of regular scaling operations remain consistent with v0.6.0. To revert to node-by-node scale-out, set scale-by-batch=false. Internal optimizations, such as automatic synchronization of node pool configurations, enhanced image matching, and conflict handling for concurrent scale-out operations, do not affect the existing scaling semantics.

v0.6.0

New features

  • Support for multiple instance types in a single scaling activity: Before v0.6.0, each scaling activity tried only one instance type, and the scale-out failed if that type had no inventory in the target zone. Starting with v0.6.0, each scaling activity can include multiple candidate instance types (up to 20, limited by Auto Scaling). Auto Scaling then selects the optimal type based on real-time availability to create the instance. This significantly improves the scale-out success rate and reduces Pod waiting time for node pools with multiple instance types or insufficient inventory. This feature is automatically enabled for existing node pools and requires no extra configuration.

  • Customizable node pool scale-out strategy (Expander): Adds the expander parameter to configure the selection strategy among multiple candidate node pools for scale-out operations. The parameter supports two values: default (overall scoring strategy) and priority (scale-out based on user-defined node pool priorities).

    In priority mode, node pool priorities are configured in the ConfigMap named cluster-autoscaler-priority-expander in the kube-system namespace. A higher value indicates a higher priority. Matching entries must be node pool IDs (strings that start with np). Configuration example:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-autoscaler-priority-expander
      namespace: kube-system
    data:
      priorities: |
        # Replace with your actual node pool IDs (strings that start with np)
        10:
          - np42fa9597**********
        50:
          - npaf8e834f**********
    
  • Instance type priority: Instance type priority can be configured for a node pool. In multi-instance-type scenarios, specified instance types are prioritized for scale-out. To enable this feature, add the label goatscaler.io/instance-type-priority-enabled: "true" to the node pool.

Optimizations and enhancements

  • Optimized and configurable scale-out candidate sorting strategy: The default sorting logic for candidate instance types and availability zones during scale-out has been optimized. The new logic is more effective in terms of balance between zones, inventory, and resource capacity, resulting in a higher overall scale-out success rate and better resource distribution. This logic is also made configurable through the score-policies parameter, which you can adjust based on your business requirements. The dimensions are arranged in ascending order of priority: balance between zones (balance-between-zones), inventory (inventory), resource capacity (resource-capacity), and custom priority (custom-priority). Dimensions listed later have higher priority. A lower-priority dimension is considered only when the scores for all higher-priority dimensions are the same.

    Additionally, when a Pod matches a ResourcePolicy and triggers the Custom Elastic Resource Priority Scheduling policy, the system automatically enables an internal policy named resource-policy. This policy has a higher priority than all other dimensions and acts as the highest-priority sorting criterion to ensure that the scale-out selection is consistent with the resource order defined in the ResourcePolicy. This policy works in conjunction with the scheduler, takes effect automatically, and cannot be configured by using score-policies.

  • Optimized resources and throughput for large-scale clusters: This version reduces the controller's memory footprint and improves concurrent scale-out throughput to better support large-scale clusters.

  • Enhanced handling of inventory and vSwitch IP addresses: The The add-on now checks the inventoryeach instance type independently per availability zone, preventing an entire type from being mistakenly marked as unavailable due to a stockout in a single zone. When a vSwitch runs out of available IP addresses, it enters a cooldown state faster to reduce invalid retries.

  • More detailed scale-out results: The scale-out API response now includes more detailed execution information for easier troubleshooting and verification.

New parameters

  • expander: The policy for selecting a node pool from multiple candidate node pools during a scale-out. The value can be default or priority. default selects a node pool based on a comprehensive scoring policy. priority selects a node pool based on user-defined node pool priorities. The default value is default.

  • score-policies: The sorting policy for scale-out candidates, which controls the sorting dimensions and their priorities. The later a dimension appears in the list, the higher its weight. The value is a comma-separated combination of the following dimensions: balance-between-zones (balance between zones), inventory, resource-capacity (resource capacity), and custom-priority (custom priority). If this parameter is not set, a default combination is used.

May 27, 2026

Multi-instance type scale-out is an internal enhancement that only improves the scale-out success rate without changing the instance type range or configuration of the node pool. The default sorting of scale-out candidates is optimized for general scenarios. Existing clusters automatically benefit from this improvement after an upgrade, with no configuration required. If you have specific sorting requirements, you can use score-policies to make adjustments as needed.