插件简介
CCE集群弹性引擎(autoscaler)是Kubernetes中非常重要的一个Controller,它提供了微服务的弹性能力,并且和Serverless密切相关。
弹性伸缩是很好理解的一个概念,当微服务负载高(CPU/内存使用率过高)时水平扩容,增加pod的数量以降低负载,当负载降低时减少pod的数量,减少资源的消耗,通过这种方式使得微服务始终稳定在一个理想的状态。
云容器引擎简化了Kubernetes集群的创建、升级和手动扩缩容,而集群中应用的负载本身是会随着时间动态变化的,为了更好的平衡资源使用率以及性能,Kubernetes引入了autoscaler插件,它可以根据部署的应用所请求的资源量自动的动态的伸缩集群,详情请了解创建节点伸缩策略。
开源社区地址: https://github.com/kubernetes/autoscaler
插件说明
autoscaler可分成扩容和缩容两个方面:
自动扩容
集群的自动扩容有以下两种方式实现:
- 当集群中的Pod由于工作节点资源不足而无法调度时,会触发集群扩容,扩容节点与所在节点池资源配额一致。此时需要满足以下条件时才会执行自动扩容:
- 节点上的资源不足。
- Pod的调度配置中不能包含节点亲和的策略(即Pod若已经设置亲和某个节点,则不会自动扩容节点),节点亲和策略设置方法请参见调度策略(亲和与反亲和)。
- 当集群满足节点伸缩策略时,也会触发集群扩容。
说明当前该插件使用的是最小浪费策略,即若Pod创建需要3核,此时有4核、8核两种规格,优先创建规格为4核的节点。
自动缩容
当集群节点处于一段时间空闲状态时(默认10min),会触发集群缩容操作(即节点会被自动删除)。当节点存在以下几种状态的Pod时,不可缩容:
- Pod有设置PodDisruptionBudget,当移除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,节点不缩容。
约束与限制
- 集群为1.9.7-r1及以上版本时,才支持此功能。
- 安装时请确保有足够的资源安装本插件。
- 该插件功能仅支持通过按需计费方式购买的 虚拟机节点 ,不支持“包年/包月”方式购买的节点和物理机节点。
- 默认节点池不支持弹性扩缩容。
安装插件
步骤 1 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“ 插件管理”,在右侧找到 autoscaler ,单击“安装”。
步骤 2 配置插件安装参数。
规格配置
参数 | 参数说明 |
---|---|
插件规格 | 插件部署可选择如下几种规格。说明autoscaler插件高可用或自定义部署时,插件实例间存在反亲和策略,会分别部署在不同的节点上,因此集群中的可用节点必须大于等于插件实例数才可保证插件高可用。 单实例:以单实例部署插件。 高可用50:50节点集群规模多实例部署,实例数为2,具有高可用能力。 高可用200:200节点集群规模多实例部署,实例数为2,具有高可用能力,每个实例使用资源比高可用50的实例更多。 自定义:根据需要自定义实例数量和实例规格。 |
参数配置
参数 说明 扩缩容配置 可以勾选自动扩缩容。
当集群下负载实例无法调度时自动扩容(从节点池)即当出现Pod处于Pending状态无法调度时,集群会自动扩容节点。若Pod已经设置亲和某个节点,则不会自动扩容节点。该功能一般与HPA策略配合使用。如不勾选,则只能通过节点伸缩策略进行扩缩容。
自动缩容节点
空置时间(min):当集群节点处于一段时间的空闲状态时,会触发集群缩容操作,删除节点,默认10min。
缩容阈值:当集群节点资源(Request值)低于多少百分比时,进行集群缩容扫描(默认0.5,即50%,cpu和mem都要满足的条件下才会缩容)。
冷却时间:扩容执行后多久能再次判断是否缩容,默认10min。
说明集群中如果同时存在自动扩容和自动缩容的场景,建议配置“扩容执行后多久能再次判断是否缩容”为0min,避免由于部分节点池持续扩容或者扩容失败重试而阻塞整体缩容节点行为,
导致非预期的节点资源浪费。节点删除后多久能再次判断是否缩容:删除节点后能再次启动缩容评估的时间间隔,默认10min。
缩容失败后多久能再次判断是否缩容:缩容失败后能再次启动缩容评估的时间间隔,默认3min。节点池中配置的缩容冷却时间和此处配置的缩容冷却时间之间的影响和关系请参见缩容冷却时间说明。若节点上的Pod不需要驱逐(DaemonSet的Pod认为不需要驱逐),则认为该节点为完全空闲节点,否则认为该节点为非完全空闲。− 检查间隔:节点被判定不可移除后能再次启动检查的时间间隔,默认5min。
缩容并发数:最多支持多少个空闲节点同时缩容,默认10。缩容并发数只针对完全空闲节点,完全空闲节点可实现并发缩容。非完全空闲节点则只能逐个缩容。说明节点在缩容的时候,
节点总数 集群可管理的节点数目的最大值,扩容时不会让集群下节点数超过此值。 CPU总数(核) 集群中所有节点CPU 核数之和的最大值,扩容时不会让集群下节点CPU核数之和超过此值。 内存总数(GB) 集群中所有节点内存之和的最大值,扩容时不会让集群下节点内存之和超过此值。
步骤 3 配置完成后,单击“安装”。
缩容冷却时间说明
节点池中配置的缩容冷却时间和autoscaler插件中配置的缩容冷却时间之间的影响和关系如下:
节点池配置的缩容冷却时间
弹性缩容冷却时间:当前节点池扩容出的节点多长时间不能被缩容,作用范围为节点池级别。
autoscaler插件配置的缩容冷却时间
扩容后缩容冷却时间:autoscaler触发扩容后(不可调度、指标、周期策略)整个集群多长时间内不能被缩容,作用范围为集群级别。
节点删除后缩容冷却时间:autoscaler触发缩容后整个集群多长时间内不能继续缩容,作用范围为集群级别。
缩容失败后缩容冷却时间:autoscaler触发缩容失败后整个集群多长时间内不能继续缩容,作用范围为集群级别。
版本记录
CCE插件版本记录
插件版本 支持的集群版本 社区版本(仅1.17及以上版本集群支持) 1.23.9 /v1.23.*/ 1.23.0 1.23.8 /v1.23.*/ 1.23.0 1.23.7 /v1.23.*/ 1.23.0 1.23.3 /v1.23.*/ 1.23.0 1.21.8 /v1.21.*/ 1.21.0 1.21.6 /v1.21.*/ 1.21.0 1.21.4 /v1.21.*/ 1.21.0 1.21.2 /v1.21.*/ 1.21.0 1.21.1 /v1.21.*/ 1.21.0 1.19.13 /v1.19.*/ 1.21.0 1.19.12 /v1.19.*/ 1.19.0 1.19.11 /v1.19.*/ 1.19.0 1.19.9 /v1.19.*/ 1.19.0 1.19.8 /v1.19.*/ 1.19.0 1.19.7 /v1.19.*/ 1.19.0 1.19.6 /v1.19.*/ 1.19.0 1.19.3 /v1.19.*/ 1.19.0 1.17.21 /v1.17.*/ 1.19.0 1.17.19 /v1.17.*/ 1.19.0 1.17.17 /v1.17.*/ 1.17.0 1.17.16 /v1.17.*/ 1.17.0 1.17.15 /v1.17.*/ 1.17.0 1.17.14 /v1.17.*/ 1.17.0 1.17.8 /v1.17.*/ 1.17.0 1.17.7 /v1.17.*/ 1.17.0 1.17.5 /v1.17.*/ 1.17.0 1.17.2 /v1.17.*/ 1.17.0