全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:启用节点自动伸缩

更新时间:Jan 08, 2026

当集群的容量规划无法满足应用Pod调度时,您可以使用节点自动伸缩方案实现节点的自动扩缩。节点自动伸缩适用于扩容规模较小(例如开启弹性的节点池数量少于20,或对应节点池中的节点数量少于100),工作负载流量波动平缓,具有周期性或可预测性资源需求,并且单批次资源伸缩即可满足业务需求的场景。

阅读前提示

为了让您更好地使用节点自动伸缩功能,建议您在阅读本文档前,已阅读节点伸缩并了解以下内容:

对节点自动伸缩的工作原理与功能特性

对哪些业务场景下,节点自动伸缩可以满足业务诉求

对使用节点自动伸缩前需要了解的注意事项

对缩容时,包年包月实例会被移除但不会被释放。为避免额外成本,启用本功能时请使用按量付费实例。

前提条件

  • 已开通弹性伸缩ESS服务

  • 已参见注意事项了解使用节点伸缩的配额、限制等。

  • 节点自动伸缩对某些调度策略的支持存在一定已知限制,可能导致扩缩容结果不符合预期。如果您的工作负载或组件使用了不支持的调度策略,建议采用以下方案进行调整:

    • 方案一:切换使用节点即时弹性

    • 方案二:将相关工作负载或组件部署在未开启节点伸缩的节点池中。

      ack-node-local-dns-admission-controller为例,请将该组件部署在未开启节点伸缩的节点池,并在组件配置中声明如下节点亲和性要求。

      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: "k8s.aliyun.com"
              operator: "NotIn"
              values: ["true"]

本功能涉及以下流程:

  1. 步骤一:为集群开启节点自动伸缩功能:先基于集群维度开启节点自动伸缩功能后,节点池设置的自动扩缩容策略才会生效。

  2. 步骤二:配置开启弹性的节点池节点自动伸缩功能仅对设置了自动扩缩容的节点池生效,因此,还需要将指定节点池的扩缩容模式配置为自动模式。

步骤一:为集群开启节点自动伸缩功能

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 节点池页面,单击节点伸缩后方的去配置

    1.jpg

  4. 首次使用节点自动伸缩功能时,按照页面提示,开通ESS服务并完成授权(如已开通并授权,请跳过)。

    • ACK托管集群:完成AliyunCSManagedAutoScalerRole角色授权

    • ACK专有集群:完成KubernetesWorkerRole角色授权和AliyunCSManagedAutoScalerRolePolicy系统策略的授权,入口如下所示。

      image

  5. 节点伸缩配置页面,选择节点伸缩方案自动伸缩,配置伸缩的配置项,然后单击确定

    节点伸缩方案选择后支持切换。如需切换,您可以在此处变更为节点即时弹性,仔细阅读页面提示并按照页面指引完成操作。

    配置

    说明

    节点池扩容顺序策略

    • 随机策略:存在多个可扩容节点池时,从中任意选择一个节点池进行扩容。

    • 默认策略:存在多个可扩容节点池时,从中选择一个资源浪费最少的节点池进行扩容。

    • 优先级策略:存在多个可扩容节点池时,选择优先级高的节点池进行扩容。

      节点池优先级通过节点池扩容优先级参数定义。

    节点池扩容优先级

    设置节点池的扩容优先级。仅当节点池扩容顺序策略选择为优先级策略时生效。

    取值范围:1~100的整数,数字越大,优先级越高。

    您需要在参数右侧单击添加,选择已开启了自动弹性的节点池,并为其设置优先级。

    若无已开启自动弹性的节点池可选择,您可以暂时忽略该参数,待步骤二:配置开启弹性的节点池执行后再重新设置节点池优先级。

    弹性灵敏度

    用于调整系统判断伸缩的间隔时间。默认值为60s。

    实施弹性伸缩时,弹性组件会基于调度情况自动触发扩容。

    重要
    • ECS节点:仅当同时满足缩容阈值缩容触发时延静默时间三个条件时,弹性组件才有可能执行节点缩容。

    • GPU节点:仅当同时满足GPU 缩容阈值缩容触发时延静默时间三个条件时,弹性组件才有可能执行GPU节点缩容。

    允许缩容

    是否允许进行节点缩容。关闭时,缩容相关配置不生效。请谨慎设置。

    缩容阈值

    启用节点自动伸缩的节点池中,单个节点的请求资源(Request)与单个节点资源容量的比值。

    仅当该比值低于配置的阈值时,即节点的CPU和内存资源利用率均低于缩容阈值时,节点才有可能被缩容。

    GPU 缩容阈值

    GPU实例的缩容阈值。

    仅当该比值低于配置的阈值时,即节点的CPU、内存和GPU资源利用率均低于GPU 缩容阈值时,GPU节点才有可能被缩容。

    缩容触发时延

    从检测到有缩容需求到实际执行缩容操作之间的时间间隔。单位:分钟。默认值:10分钟。

    重要

    仅当满足缩容阈值配置,且达到缩容触发时延后,弹性组件才有可能执行节点缩容。

    静默时间

    距离最近一次扩容完成后,弹性组件不执行缩容的时间间隔。

    在静默时间内,弹性组件不会缩容节点,但仍会判断节点是否可以缩容;超过静默时间后,如果节点满足缩容阈值和缩容触发时延两个条件,弹性组件则会正常执行缩容。例如,当静默时间为10分钟,缩容触发时延为5分钟时,弹性组件在最近一次扩容后的10分钟内不会缩容节点,但会在静默的10分钟内判断节点是否符合缩容条件。等待静默时间结束,节点达到缩容阈值且时间超过缩容触发时延规定的5分钟时,弹性组件会继续执行缩容。

    查看高级配置的配置项说明

    配置项

    说明

    Pod 终止超时时间

    缩容节点时等待节点上Pod终止的最长时间。单位:秒。

    Pod 最小副本数

    为由 ReplicationController 或 ReplicaSet 管理的应用设置一个缩容保护阈值。当这类应用的当前实际副本数小于此值时,运行其 Pod 的节点将不会被缩容。

    参数仅对由 ReplicationController 或 ReplicaSet 管理的 Pod 生效,对于 StatefulSetDaemonSet 等其他控制器管理的 Pod 不生效。

    开启 DaemonSet Pod 排水

    开启DaemonSet Pod排水后,节点缩容时会驱逐节点上的DaemonSet Pod。

    跳过有 kube-system 命名空间下 Pod 所在节点

    开启后,当集群执行节点自动缩容操作时,可以忽略运行在kube-system命名空间下的Pod所在的节点,确保这些节点不受缩容的影响。

    说明

    此功能对DaemonSet Pod和Mirror Pod不生效。

步骤二:配置开启弹性的节点池

您可以配置已有节点池,将节点扩缩容模式修改为自动模式,也可以新建开启自动弹性的节点池。

具体操作,请参见创建和管理节点池。主要配置项如下:

配置

说明

扩缩容模式

  • 手动:ACK会根据配置的期望节点数调整节点池中的节点数,将节点数始终维持在期望节点数。更多信息,请参见手动扩缩容节点池

  • 自动:当集群的容量规划无法满足应用Pod调度时,ACK会根据配置的最小和最大实例数自动扩缩节点资源。1.24及以上版本的集群默认启用节点即时弹性;1.24以下版本的集群默认启用节点自动伸缩。更多信息,请参见节点伸缩

实例数量

节点池中可伸缩的最小实例数最大实例数,不包含您已有的实例。

说明
  • 最小实例数不为0时,伸缩组生效后,将自动创建对应数量的ECS实例。

  • 建议设置的最大实例数不要小于当前节点池中的节点数,否则弹性伸缩功能生效后会直接导致节点池的节点缩容。

实例相关的配置项

节点池扩容时,会从配置的ECS实例规格族中分配。为提高扩容成功率,请选择多个可用区下的多种实例规格,避免规格不可用或库存不足。具体扩容的实例规格由配置的扩缩容策略决定。

为确保业务稳定性和资源调度的准确性,请勿在同一个节点池中混合使用GPU和非GPU实例规格。

可通过以下两种方式配置扩容时使用的实例规格:

  • 具体规格:根据vCPU、内存、规格族、架构等维度指定具体的实例规格。

  • 泛化配置:根据属性(vCPU、内存等)选择待使用或需排除的实例规格列表,进一步提升扩容成功率。请参见使用指定实例属性配置节点池

可参考控制台的弹性强度建议来配置,或在节点池创建后查看节点池弹性强度

关于ACK不支持的实例规格及节点配置建议,请参见ECS实例规格配置建议

云资源及计费说明:imageECS实例imageGPU实例

操作系统

在开启自动伸缩时,支持选择Alibaba Cloud Linux、Windows镜像、Windows Core镜像。

当所选镜像是Windows镜像或Windows Core镜像时,系统将自动配置污点(Taints){ effect: 'NoSchedule', key: 'os', value: 'windows' }

节点标签(Labels)

在集群中添加节点标签(Label)后,会自动添加到弹性伸缩扩容出的节点上。

重要

当节点标签和污点配置映射到节点池Tag后,自动伸缩才可识别,且节点池Tag存在数量上限。因此,请将开启自动伸缩的节点池配置的ECS标签、污点和节点标签的总数控制在12个之内。

扩缩容策略

配置节点池在节点扩缩容时如何选择实例。

  • 优先级策略:按集群配置的vSwitch优先级(vSwitch顺序由上到下优先级递减)扩缩容。优先级较高的vSwitch所在可用区无法创建实例时,自动使用下一优先级vSwitch。

  • 成本优化策略:按vCPU单价从低到高扩缩容。

    节点池使用抢占式实例时,则抢占式实例优先。支持同时配置按量实例所占比例(%),当抢占式实例规格因库存等原因无法创建时,自动使用按量付费实例来补充。

  • 均衡分布策略:在且仅在多可用区场景下将ECS实例均匀分配至多可用区。如果由于库存不足等原因造成可用区分布不平衡,可再次进行均衡操作。

使用按量实例补充抢占式容量

需同时选择付费类型为抢占式实例。

开启后,如果因价格或库存等原因无法创建足够的抢占式实例,ACK将自动尝试创建按量实例作为补充。

云资源及计费说明:imageECS实例

开启抢占式实例补偿

开启抢占式实例补偿

需同时选择付费类型为抢占式实例。

开启后,当收到抢占式实例将被回收的系统消息时(即抢占式实例被回收前5分钟),ACK将尝试扩容新实例进行补偿。

  • 补偿成功:ACK对旧节点执行排水并从集群中移除。

  • 补偿失败:ACK不会对旧节点执行排水,到期实例仍然会在5分钟后被回收释放。当库存恢复或满足价格条件时,ACK将自动购买实例以保证期望节点数,详情请参见抢占式实例节点池最佳实践

抢占式实例的主动释放可能导致业务异常,为提高补偿成功率,建议同时开启使用按量实例补充抢占式容量

云资源及计费说明:imageECS实例

伸缩模式

需开启节点池自动伸缩扩缩容模式自动
  • 标准模式:通过创建、释放ECS实例的方式进行伸缩。

  • 极速模式:通过创建、停机、再启动ECS实例的方式进行伸缩,以便在需要再次伸缩时,直接重新启动处于停机状态的实例,提高伸缩速度。

    ECS实例停机时不收取计算资源费用,只收取存储费用(包含本地存储能力的实例规格族除外,例如大数据型、本地SSD型等)。关于ECS实例停机模式的计费详情及相关注意事项,请参见节省停机模式

污点 (Taints)

添加污点后,集群将不会将Pod调度到该节点上。

步骤三:(可选)结果验证

完成如上操作后,您便可以使用节点自动伸缩功能。此时,节点池将显示已开始自动伸缩且集群已自动安装cluster-autoscaler组件

节点池已开启自动伸缩

节点池页面,节点池列表中将展示已开启自动伸缩的节点池。

image

已安装cluster-autoscaler组件

  1. 在集群管理页左侧导航栏,选择工作负载 > 无状态

  2. 选择kube-system命名空间,显示cluster-autoscaler组件

    image

常见问题

分类

二级分类

跳转链接

节点自动伸缩的扩缩容行为

已知限制

扩容行为相关

缩容行为相关

拓展支持相关

cluster-autoscaler组件是否支持CRD?

自定义的扩缩容行为

通过Pod控制扩缩容行为

通过节点控制扩缩容行为

cluster-autoscaler组件相关