启用节点即时弹性

如果您的集群规模较大(例如弹性节点池中节点数大于100,或弹性节点池数大于20)、对资源交付速度有更高要求、期望灵活实现多实例规格和跨可用区自动伸缩,那么节点自动伸缩可能无法满足您扩缩容的需求,推荐您使用节点即时弹性功能。节点即时弹性降低了开发者的使用门槛并提高了弹性效率,同时降低了运维人员维护成本。

阅读前提示

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

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

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

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

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

前提条件

说明

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

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

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

  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最小数量。

    开启 Daemonset Pod 排水

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

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

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

    说明

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

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

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

image

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

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

    说明

    配置已有节点池时,请确保您的节点池未配置期望节点数。您可以在节点池列表进入节点池详情页面,在基本页签查看期望节点数是否为空,也可以调用DescribeClusterNodePoolDetail - 查询节点池配置接口,查询desired_size是否为nil

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

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

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

节点池已开启自动伸缩

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

已安装节点即时弹性组件

  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。针对有此Annotation的Pod,节点即时弹性会等待节点启动,暂不重复扩容。

goatscaler.io/reschedule-deadline

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

相关操作

查看节点即时弹性健康度

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

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

升级节点即时弹性组件

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