更新时间:2025-05-16 GMT+08:00

CCE集群弹性引擎

插件简介

CCE集群弹性引擎插件基于社区Autoscaler组件,能够根据应用的资源需求自动调整集群节点数量,优化资源利用率和性能。作为Kubernetes中的核心控制器,Autoscaler具备根据资源需求情况自动扩展或缩减节点的能力。当集群中的Pod因为资源不足无法调度时,Autoscaler会扩容新的节点来提供更多的资源。同时,如果扩容的节点资源利用率很低,Autoscaler会自动删除这些节点。关于实现节点弹性伸缩的具体操作,请参见创建节点弹性策略

开源社区地址:https://github.com/kubernetes/autoscaler

插件说明

Autoscaler可分成扩容和缩容两个方面:

  • 自动扩容
    集群的自动扩容有以下两种方式实现:
    • 当集群中的Pod由于工作节点资源不足而无法调度时,会触发集群扩容,扩容节点与所在节点池资源配额一致。
      此时需要满足以下条件时才会执行自动扩容:
      • 节点上的资源不足。
      • Pod的调度配置中不能包含节点亲和的策略(即Pod若已经设置亲和某个节点,则不会自动扩容节点),节点亲和策略设置方法请参见设置节点亲和调度(nodeAffinity)
    • 当集群满足节点伸缩策略时,也会触发集群扩容,详情请参见创建节点弹性策略

    当前该插件使用的是最小浪费策略,即若Pod创建需要3核,此时有4核、8核两种规格,优先创建规格为4核的节点。

  • 自动缩容
    当集群节点处于一段时间空闲状态时(默认10min),会触发集群缩容操作(即节点会被自动删除)。当节点存在以下几种状态的Pod时,不可缩容:
    • Pod有设置Pod Disruption Budget(即干扰预算),当移除Pod不满足对应条件时,节点不会缩容。
    • Pod由于一些限制,如亲和、反亲和等,无法调度到其他节点,节点不会缩容。
    • Pod拥有cluster-autoscaler.kubernetes.io/safe-to-evict: 'false'这个annotations时,节点不缩容。
    • 节点上存在kube-system命名空间下的Pod(除kube-system命名空间下由DaemonSet创建的Pod),节点不缩容。
    • 节点上如果有非controller(Deployment/ReplicaSet/Job/StatefulSet)创建的Pod,节点不缩容。

    当节点符合缩容条件时,Autoscaler将预先给节点打上DeletionCandidateOfClusterAutoscaler污点,限制Pod调度到该节点上。当autoscaler插件被卸载后,如果节点上依然存在该污点请您手动进行删除。

约束与限制

  • 安装时请确保集群具有足够的资源。
  • 默认节点池不支持弹性扩缩容,详情请参见默认节点池DefaultPool说明
  • 缩容节点会导致与节点关联的本地持久卷类型的PVC/PV数据丢失,无法恢复,且PVC/PV无法再正常使用。缩容节点时使用了本地持久存储卷的Pod会从缩容的节点上被驱逐,并重新创建Pod,Pod会一直处于pending状态,因为Pod使用的PVC带有节点标签,由于冲突无法调度成功。
  • 使用CCE集群弹性引擎插件时,部分污点/注解可能会影响弹性伸缩功能,因此集群中应避免使用以下污点/注解:
    • 节点避免使用ignore-taint.cluster-autoscaler.kubernetes.io的污点:该污点作用于节点。由于Autoscaler原生支持异常扩容保护策略,会定期评估集群的可用节点比例,非Ready分类节点数统计比例超过45%比例会触发保护机制;而集群中任何存在该污点的节点都将从自动缩放器模板节点中过滤掉,记录到非Ready分类的节点中,进而影响集群的扩缩容。
    • Pod避免使用cluster-autoscaler.kubernetes.io/enable-ds-eviction的注解:该注解作用于Pod,控制DaemonSet Pod是否可以被Autoscaler驱逐。详情请参见Kubernetes原生的标签、注解和污点

安装插件

  1. 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到CCE集群弹性引擎插件,单击“安装”
  2. 在安装插件页面,根据需求选择“规格配置”

    CCE根据集群规模提供三种“系统预置规格”,您可根据自身需求进行选择,系统会根据不同的预置规格配置插件的实例数及资源配额,具体配置值请以控制台显示为准。

  3. 设置插件实例的部署策略。

    • 调度策略对于DaemonSet类型的插件实例不会生效。
    • 设置多可用区部署或节点亲和策略时,需保证集群中存在满足调度策略的节点且拥有足够的资源,否则插件实例将无法运行。
    表1 插件调度配置

    参数

    参数说明

    多可用区部署

    • 优先模式:优先将插件的Deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区下的不同节点。
    • 均分模式:插件Deployment实例均匀调度到当前集群下各可用区,增加新的可用区后建议扩容插件实例以实现跨可用区高可用部署;均分模式限制不同可用区间插件实例数相差不超过1,单个可用区资源不足会导致后续其他实例无法调度。
    • 强制模式:插件Deployment实例强制调度到不同可用区的节点上,每个可用区下最多运行一个实例。如集群下节点不满足多可用区,插件实例将无法全部运行。节点故障后,插件实例存在无法迁移风险。

    节点亲和

    • 不配置:插件实例不指定节点亲和调度。
    • 指定节点调度:指定插件实例部署的节点。若不指定,将根据集群默认调度策略进行随机调度。
    • 指定节点池调度:指定插件实例部署的节点池。若不指定,将根据集群默认调度策略进行随机调度。
    • 自定义亲和策略:填写期望插件部署的节点标签实现更灵活的调度策略,若不填写将根据集群默认调度策略进行随机调度。

      同时设置多条自定义亲和策略时,需要保证集群中存在同时满足所有亲和策略的节点,否则插件实例将无法运行。

    容忍策略

    容忍策略与节点的污点能力配合使用,允许(不强制)插件的 Deployment 实例调度到带有与之匹配的污点的节点上,也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。

    插件会对实例添加针对node.kubernetes.io/not-readynode.kubernetes.io/unreachable污点的默认容忍策略,容忍时间窗为60s。

    详情请参见设置容忍策略

  4. 配置完成后,单击“安装”。

组件说明

表2 autoscaler组件

容器组件

说明

资源类型

autoscaler

该容器为Kubernetes集群提供自动扩缩容节点的能力。

Deployment