启用节点即时弹性

如果您的集群规模较大或对资源交付速度有更高要求,节点自动伸缩可能无法满足您的需求。此时,推荐您使用节点即时弹性功能,它可以降低开发者的使用门槛,提高资源弹性效率,并降低运维成本。

阅读前提示

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

对节点即时弹性的工作原理

对节点即时弹性的功能优势

对哪些业务场景下,建议您选择节点即时弹性

对使用节点即时弹性前需要了解的注意事项

使用说明

说明

如果您的集群节点池已开启自动弹性伸缩且节点池的伸缩模式非极速模式节点即时弹性可兼容原弹性节点池的语义与行为,并支持所有类型的应用无缝开启与使用。但针对伸缩模式极速模式的节点池,节点即时弹性无法兼容。

本功能涉及以下流程:

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

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

步骤一:开启节点即时弹性功能

使用节点即时弹性功能前,您需要在节点池页面开启并配置集群自动弹性伸缩,使节点具备伸缩能力。

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

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

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

    1.jpg

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

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

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

      image

  5. 节点伸缩配置页面,选择节点伸缩方案即时弹性,配置伸缩配置项,然后单击确定

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

    节点伸缩方案选择后支持切换。如需切换,您可以在此处变更为节点自动伸缩,仔细阅读页面提示并按照页面指引完成操作。本功能白名单开放中,如需使用,请提交工单

    配置项

    说明

    缩容阈值

    启用节点即时弹性的节点池中,单个节点的请求资源(Request)与单个节点资源容量的比值。

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

    GPU 缩容阈值

    GPU实例的缩容阈值。

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

    缩容触发时延

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

    重要

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

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

    配置项

    说明

    Pod 终止超时时间

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

    Pod 最小副本数

    节点缩容前每个ReplicaSet中允许的Pod最小数量。当Pod所属ReplicaSet的实际副本数小于此参数时,节点不会被缩容。

    开启 Daemonset Pod 排水

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

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

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

    说明

    此功能对DaemonSet PodMirror Pod不生效。

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

节点即时弹性的扩缩对象为开启自动伸缩节点池的节点。因此,配置节点即时弹性后,您还需要配置至少一个开启了弹性的节点池。

  • 新建一个开启自动弹性伸缩的节点池。具体操作,请参见创建节点池

  • 配置已有节点池,为其开启自动弹性伸缩功能。具体操作,请参见编辑节点池

推荐您扩大节点池实例规格的可选范围,例如为节点池配置多个可选的实例规格、使用指定实例属性配置,或为节点池配置多个可用区,以进一步保障实例规格库存充足,节点伸缩活动执行成功。

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

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

节点池已开启自动伸缩

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

image

已安装节点即时弹性组件

  1. 集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理

  2. 组件管理页面,定位ACK GOATScaler组件,显示已安装

节点即时弹性关键事件介绍

节点即时弹性涉及到以下关键事件(Event),以便查看节点即时弹性发生时内部的状态信息。

事件名称

事件对象

说明

ProvisionNode

pod

节点即时弹性触发节点扩容成功。

ProvisionNodeFailed

pod

节点即时弹性触发节点扩容失败。

ResetPod

pod

节点即时弹性将满足条件的、已触发过扩容的、但仍不可调度的Pod重新纳入可触发扩容的范围。

InstanceInventoryStatusChanged

ACKNodePool

某个可用区的某个实例规格供给状态发生变化。格式为{实例规格}/{可用区} inventory status changed from {旧库存状态} to {新库存状态}

详细信息,请参见查看节点即时弹性健康度

节点即时弹性标识介绍

节点即时弹性维护了以下标识。请勿手动操作,以免引发异常。

Node Label

node label

说明

goatscaler.io/managed:true

用于标识被节点即时弹性管理的节点。针对带此标签的节点,节点即时弹性会周期性检查是否满足缩容条件。

k8s.aliyun.com: true

用于标识被节点即时弹性管理的节点的标识,针对带此标签的节点,节点即时弹性会周期性检查是否满足缩容条件。

goatscaler.io/provision-task-id:{task-id}

用于标识节点即时弹性扩容节点的任务Task ID,以便您追踪创建节点的触发源。

Node Taint

Node Taint

说明

goatscaler.io/node-terminating

打上此污点的节点会被节点即时弹性执行缩容。

Pod Annotation

Pod Annotation

说明

goatscaler.io/provision-task-id

用于标识节点即时弹性为此Pod扩容后节点的Task ID。针对有此AnnotationPod,节点即时弹性会等待节点启动,暂不重复扩容。

goatscaler.io/reschedule-deadline

用于标识节点即时弹性等待Pod未被调度到节点上的时间。超出此时间后,若Pod仍然不可调度,节点即时弹性会将Pod重新纳入可触发扩容的范围。

常见问题

分类

二级分类

跳转链接

节点即时弹性的扩缩容行为

已知限制

扩容行为相关

缩容行为相关

自定义的扩缩容行为

通过Pod控制扩缩容行为

如何通过Pod控制节点即时弹性的节点缩容?

通过节点控制扩缩容行为

节点即时弹性组件相关

相关操作

查看节点即时弹性健康度

节点即时弹性功能支持根据ECS实例的库存情况来动态选择规格和可用区。如需感知并监控实例规格库存健康状况,获取节点池的实例配置优化建议,从而进一步保障节点伸缩活动执行成功,您可以查看节点池库存健康度的ConfigMap,评估当前节点池库存是否健康,提前对实例规格配置进行分析和调整。

详细信息,请参见查看节点即时弹性健康度

开启节点即时弹性日志收集

如果您的集群为ACK托管集群,您可以在控制面组件日志页面收集节点即时弹性的组件日志。

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

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 日志中心

  3. 单击控制面组件日志页签,然后在页面右上角单击更新组件,按照页面提示勾选节点即时弹性组件。

    image

    等待组件的更新。更新完成后,可在组件下拉列表中勾选节点即时弹性组件,查看其日志。

    image

升级节点即时弹性组件

请及时升级节点即时弹性组件,以便享用最新的功能改进和特性优化。具体操作,请参见管理组件