云端节点伸缩概述

更新时间: 2025-02-19 15:04:31

ACK Edge集群可以管理各种类型的线上线下节点资源,例如不同地域的ECS节点、IDC节点、其他厂商节云节点,以及分布在工厂、门店、车辆和船舶中的服务器节点,当线下节点资源不足时,节点自动伸缩能力可以为ACK Edge集群自动扩容云上节点,进行调度容量的补充。这种弹性的扩缩容能力能够极大地节省资源成本。

阅读前提示

为了让您更好地了解ACK提供的节点伸缩方案,并结合您的业务诉求进行方案选型,建议您在启用节点伸缩能力前阅读本篇概述。

阅读本文前,推荐您参见Kubernetes官方文档了解手动伸缩、自动伸缩、水平伸缩、垂直伸缩等伸缩概念。

工作原理

在Kubernetes中,节点伸缩的工作原理与传统意义上基于使用率阈值的模型有所差别。这也是从传统IDC或其他编排系统迁移到Kubernetes集群后往往需要解决的问题。

阈值是如何选择与判断的?

在一个集群中,部分热点节点的利用率可能较高,而其他节点的利用率可能较低。

  • 如果根据整个集群的平均资源利用率来决定是否弹性伸缩,使得热点节点的差异被平均,那么会造成对热点节点的扩缩不够及时。

  • 如果依据最高的节点利用率来决定是否弹性伸缩,那么会造成弹出资源的浪费,影响集群的整体服务。

弹出实例后如何缓解压力?

在Kubernetes集群中,应用以Pod为最小单元部署在集群的不同节点上。当一个Pod资源利用率较高时,即使该Pod所在的节点或者集群触发了弹性扩容,但该应用的Pod数量以及Pod对应的Limit并没有发生变化,节点负载的压力也无法转移到新扩容的节点上。

如何判断以及执行实例的缩容?

如果基于资源利用率的方式判断节点是否缩容,那么很有可能出现Request(资源请求)较大、但Usage(实际资源使用)很小的Pod被驱逐。当集群中这种类型的Pod较多时,会占用集群大量的调度资源,导致部分Pod无法调度。

如何判断节点的弹出?

节点伸缩会监听Pod是否处于调度失败的状态,以判断是否需要触发扩容。当Pod由于调度资源不足而调度失败时,节点伸缩会开始模拟调度,计算在开启弹性的节点池中哪个节点池可为这些Pod提供所需的节点资源,并在满足需求时弹出相应的节点。

说明

模拟调度时将一个开启弹性的节点池作为一个的抽象节点,开启弹性的节点池中配置的机型规格对应会成为抽象节点的CPU、内存或GPU的容量,且其配置的Label、Taint也会成为抽象节点的Label与Taint。模拟调度器会在调度模拟时,将该抽象节点纳入调度参考范围。符合调度条件时,调度模拟器会计算所需的节点数目,驱动节点池弹出节点。

如何判断节点的缩容?

节点伸缩仅缩容开启了弹性的节点池中的节点,无法管理静态节点(不在开启了弹性的节点池中的其他节点)。每个节点会单独判断是否进行缩容。当任意一个节点的调度利用率低于所设置的调度阈值时,就会触发缩容判断。此时,节点伸缩会尝试模拟驱逐节点上的负载,判断当前节点是否可以排水。部分特殊的Pod(例如kube-system命名空间的非DaemonSet Pod、PDB控制的Pod等)则会跳过该节点而选择其他的候选节点。当节点发生驱逐时,会先进行排水,将节点上的Pod驱逐到其他的节点,然后再下线该节点。

如何提高弹性伸缩的成功率?

弹性伸缩的成功率主要取决于以下两个因素:

  • 调度策略是否满足

    配置开启弹性的节点池后,您需要先确认该节点池可以承载的Pod的调度策略范围。如果无法直接判断,您可以通过nodeSelector直接选择节点池的Label,来进行预弹模拟。

  • 资源配置是否充分

    当模拟调度通过后,系统会选择开启弹性的节点池,以弹出实例。但开启弹性的节点池中配置的ECS规格库存会直接影响是否可以成功弹出实例。因此,推荐您配置多个可用区、多个不同机型组合,以提高弹出成功率。

如何提高弹性伸缩的速度?

  • 方法一:使用极速模式加速弹出速度。当开启弹性的节点池预热后(已完成一次扩容和一次缩容),节点池即可进入极速伸缩模式。更多信息,请参见启用节点自动伸缩

  • 方法二:使用自定义镜像的方式,以Alibaba Cloud Linux 3作为基础镜像,大大提升IaaS层的资源交付速度(50%)。更多信息,请参见弹性优化之自定义镜像

节点自动伸缩方案

节点自动伸缩指资源层弹性,即当集群的容量规划无法满足应用Pod调度时,自动扩缩节点资源,进行调度容量的补充。节点自动伸缩通过cluster-autoscaler组件,以轮询的方式,周期性地维护和检查集群状态,以发现满足扩缩容条件的情况,从而自动扩缩容集群节点。

伸缩速度与效率

  • 单次伸缩时,标准模式的伸缩速度约为60s,极速模式为50s。

  • 当达到1分钟的伸缩量级时,伸缩速度会遇到瓶颈,并且在不同规模(多节点池)、不同场景(连续伸缩)下,弹性速度也会有比较明显的抖动。例如,当节点池数量超过100时,伸缩速度将衰减为100~150s。

  • 使用轮询式模型,且受制于对集群状态维护的依赖,弹性灵敏度最低为5s。

注意事项

配额与限制

  • 在专有网络下创建的单个路由表可创建的自定义路由数限额是200条。如需更大的配额,请前往配额中心提交申请。关于其他资源的配额限制及升配详情,请参见依赖底层云产品配额限制

  • 请合理配置开启自动伸缩的节点池的最大实例数,保证此范围内的节点所依赖的资源和配额充足,例如合理规划VPC网段、交换机等网络资源,以避免节点扩容失败。配置开启自动伸缩的节点池的最大实例数,请参见配置实例数量。关于ACK的网络规划,请参见Kubernetes集群网络规划

  • 节点伸缩功能不支持包年包月付费类型的节点。如需新建开启自动伸缩的节点池,请勿选择付费类型为包年包月。如需为已有节点池开启自动伸缩,请确保节点池内没有包年包月付费类型的节点。

依赖资源的维护

选择绑定EIP时,请勿通过ECS控制台直接删除节点伸缩扩容出的ECS节点,否则会导致EIP无法自动释放。

后续阅读

如在使用节点自动伸缩过程中遇到问题,您可以参见节点自动伸缩常见问题进行自排查。

上一篇: 云上弹性 下一篇: 启用节点自动伸缩
阿里云首页 容器服务Kubernetes版 相关技术圈