CCE集群弹性引擎
插件简介
CCE集群弹性引擎(autoscaler)是Kubernetes中非常重要的一个Controller,它提供了微服务的弹性能力,并且和Serverless密切相关。
弹性伸缩是很好理解的一个概念,当微服务负载高(CPU/内存使用率过高)时水平扩容,增加pod的数量以降低负载,当负载降低时减少pod的数量,减少资源的消耗,通过这种方式使得微服务始终稳定在一个理想的状态。
云容器引擎简化了Kubernetes集群的创建、升级和手动扩缩容,而集群中应用的负载本身是会随着时间动态变化的,为了更好的平衡资源使用率以及性能,Kubernetes引入了autoscaler插件,它可以根据部署的应用所请求的资源量自动伸缩集群中节点数量,详情请了解创建节点弹性策略。
插件说明
autoscaler可分成扩容和缩容两个方面:
- 自动扩容
集群的自动扩容有以下两种方式实现:
- 当集群中的Pod由于工作节点资源不足而无法调度时,会触发集群扩容,扩容节点与所在节点池资源配额一致。
此时需要满足以下条件时才会执行自动扩容:
- 节点上的资源不足。
- Pod的调度配置中不能包含节点亲和的策略(即Pod若已经设置亲和某个节点,则不会自动扩容节点),节点亲和策略设置方法请参见设置节点亲和调度(nodeAffinity)。
- 当集群满足节点伸缩策略时,也会触发集群扩容,详情请参见创建节点弹性策略。
当前该插件使用的是最小浪费策略,即若Pod创建需要3核,此时有4核、8核两种规格,优先创建规格为4核的节点。
- 当集群中的Pod由于工作节点资源不足而无法调度时,会触发集群扩容,扩容节点与所在节点池资源配额一致。
- 自动缩容
当集群节点处于一段时间空闲状态时(默认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带有节点标签,由于冲突无法调度成功。
- 使用autoscaler插件时,部分污点/注解可能会影响弹性伸缩功能,因此集群中应避免使用以下污点/注解:
- 节点避免使用ignore-taint.cluster-autoscaler.kubernetes.io的污点:该污点作用于节点。由于autoscaler原生支持异常扩容保护策略,会定期评估集群的可用节点比例,非Ready分类节点数统计比例超过45%比例会触发保护机制;而集群中任何存在该污点的节点都将从自动缩放器模板节点中过滤掉,记录到非Ready分类的节点中,进而影响集群的扩缩容。
- Pod避免使用cluster-autoscaler.kubernetes.io/enable-ds-eviction的注解:该注解作用于Pod,控制DaemonSet Pod是否可以被autoscaler驱逐。详情请参见Kubernetes原生的标签、注解和污点。
安装插件
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到CCE集群弹性引擎插件,单击“安装”。
- 在安装插件页面,根据需求选择“规格配置”。
CCE根据集群规模提供三种“系统预置规格”,您可根据自身需求进行选择,系统会根据不同的预置规格配置插件的实例数及资源配额,具体配置值请以控制台显示为准。
- 设置插件实例的部署策略。
- 调度策略对于DaemonSet类型的插件实例不会生效。
- 设置多可用区部署或节点亲和策略时,需保证集群中存在满足调度策略的节点且拥有足够的资源,否则插件实例将无法运行。
表1 插件调度配置 参数
参数说明
多可用区部署
- 优先模式:优先将插件的Deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区下的不同节点。
- 均分模式:插件Deployment实例均匀调度到当前集群下各可用区,增加新的可用区后建议扩容插件实例以实现跨可用区高可用部署;均分模式限制不同可用区间插件实例数相差不超过1,单个可用区资源不足会导致后续其他实例无法调度。
- 强制模式:插件Deployment实例强制调度到不同可用区的节点上,每个可用区下最多运行一个实例。如集群下节点不满足多可用区,插件实例将无法全部运行。节点故障后,插件实例存在无法迁移风险。
节点亲和
容忍策略
容忍策略与节点的污点能力配合使用,允许(不强制)插件的 Deployment 实例调度到带有与之匹配的污点的节点上,也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。
插件会对实例添加针对node.kubernetes.io/not-ready和node.kubernetes.io/unreachable污点的默认容忍策略,容忍时间窗为60s。
详情请参见设置容忍策略。
- 配置完成后,单击“安装”。
组件说明
容器组件 |
说明 |
资源类型 |
---|---|---|
autoscaler |
该容器为Kubernetes集群提供自动扩缩容节点的能力。 |
Deployment |
版本记录
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
1.30.15 |
v1.30 |
|
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
1.29.50 |
v1.29 |
事件增加节点池名称 |
|
1.29.17 |
v1.29 |
事件优化 |
|
1.29.13 |
v1.29 |
支持v1.29集群 |
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
1.28.88 |
v1.28 |
事件增加节点池名称 |
|
1.28.55 |
v1.28 |
事件优化 |
|
1.28.51 |
v1.28 |
优化节点池资源售罄告警逻辑 |
|
1.28.22 |
v1.28 |
修复部分问题 |
|
1.28.20 |
v1.28 |
修复部分问题 |
|
1.28.17 |
v1.28 |
解决存在自定义控制器类型的Pod时无法缩容的问题 |
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
1.27.119 |
v1.27 |
事件增加节点池名称 |
|
1.27.88 |
v1.27 |
事件优化 |
|
1.27.84 |
v1.27 |
优化节点池资源售罄告警逻辑 |
|
1.27.55 |
v1.27 |
修复部分问题 |
|
1.27.53 |
v1.27 |
修复部分问题 |
|
1.27.51 |
v1.27 |
修复部分问题 |
|
1.27.14 |
v1.27 |
修复多规格情况下无法缩容和非预期PreferNoSchedule污点问题 |
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
1.25.152 |
v1.25 |
事件增加节点池名称 |
|
1.25.120 |
v1.25 |
事件优化 |
|
1.25.116 |
v1.25 |
优化节点池资源售罄告警逻辑 |
|
1.25.88 |
v1.25 |
修复部分问题 |
|
1.25.86 |
v1.25 |
修复部分问题 |
|
1.25.84 |
v1.25 |
修复部分问题 |
|
1.25.46 |
v1.25 |
修复多规格情况下无法缩容和非预期PreferNoSchedule污点问题 |
|
1.25.34 |
v1.25 |
|
|
1.25.21 |
v1.25 |
|
|
1.25.11 |
v1.25 |
|
|
1.25.7 |
v1.25 |
|
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
1.23.156 |
v1.23 |
事件增加节点池名称 |
|
1.23.125 |
v1.23 |
事件优化 |
|
1.23.121 |
v1.23 |
优化节点池资源售罄告警逻辑 |
|
1.23.95 |
v1.23 |
修复部分问题 |
|
1.23.93 |
v1.23 |
修复部分问题 |
|
1.23.91 |
v1.23 |
修复部分问题 |
|
1.23.54 |
v1.23 |
修复多规格情况下无法缩容和非预期PreferNoSchedule污点问题 |
|
1.23.44 |
v1.23 |
|
|
1.23.31 |
v1.23 |
|
|
1.23.21 |
v1.23 |
|
|
1.23.17 |
v1.23 |
|
|
1.23.10 |
v1.23 |
|
|
1.23.9 |
v1.23 |
新增nodenetworkconfigs.crd.yangtse.cni资源对象权限。 |
|
1.23.8 |
v1.23 |
修复周期性扩容场景下,单次扩容数量超过节点池上限,扩容失败问题。 |
|
1.23.7 |
v1.23 |
- |
|
1.23.3 |
v1.23 |
适配CCE v1.23集群 |
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
1.21.114 |
v1.21 |
优化节点池资源售罄告警逻辑 |
|
1.21.89 |
v1.21 |
修复部分问题 |
|
1.21.87 |
v1.21 |
修复部分问题 |
|
1.21.86 |
v1.21 |
修复配置节点AZ拓扑约束时,节点池弹性扩容后不符合预期问题 |
|
1.21.51 |
v1.21 |
修复多规格情况下无法缩容和非预期PreferNoSchedule污点问题 |
|
1.21.43 |
v1.21 |
|
|
1.21.29 |
v1.21 |
|
|
1.21.20 |
v1.21 |
|
|
1.21.16 |
v1.21 |
|
|
1.21.9 |
v1.21 |
|
|
1.21.8 |
v1.21 |
新增nodenetworkconfigs.crd.yangtse.cni资源对象权限 |
|
1.21.6 |
v1.21 |
修复插件请求重试场景下签名错误导致鉴权失败的问题 |
|
1.21.4 |
v1.21 |
修复插件请求重试场景下签名错误导致鉴权失败的问题 |
|
1.21.2 |
v1.21 |
修复未注册节点删除失败可能阻塞弹性伸缩的问题 |
|
1.21.1 |
v1.21 |
修复在已有的周期弹性伸缩规则里节点池修改不生效的问题。 |
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
1.19.76 |
v1.19 |
|
|
1.19.56 |
v1.19 |
修复多规格情况下无法缩容和非预期PreferNoSchedule污点问题 |
|
1.19.48 |
v1.19 |
|
|
1.19.35 |
v1.19 |
|
|
1.19.27 |
v1.19 |
|
|
1.19.22 |
v1.19 |
|
|
1.19.14 |
v1.19 |
|
|
1.19.13 |
v1.19 |
修复周期性扩容场景下,单次扩容数量超过节点池上限,扩容失败问题 |
|
1.19.12 |
v1.19 |
修复插件请求重试场景下签名错误导致鉴权失败的问题 |
|
1.19.11 |
v1.19 |
修复插件请求重试场景下签名错误导致鉴权失败的问题 |
|
1.19.9 |
v1.19 |
修复未注册节点删除失败可能阻塞弹性伸缩的问题 |
|
1.19.8 |
v1.19 |
修复在已有的周期弹性伸缩规则里节点池修改不生效的问题。 |
|
1.19.7 |
v1.19 |
插件依赖例行升级。 |
|
1.19.6 |
v1.19 |
修复污点异步更新场景触发的重复扩容问题。 |
|
1.19.3 |
v1.19 |
定时策略中能够根据节点总数,CPU,内存限制进行扩缩容。修复其它功能缺陷。 |
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
1.17.27 |
v1.17 |
|
|
1.17.22 |
v1.17 |
日志优化 |
|
1.17.21 |
v1.17 |
修复周期性扩容场景下,单次扩容数量超过节点池上限,扩容失败问题 |
|
1.17.19 |
v1.17 |
修复插件请求重试场景下签名错误导致鉴权失败的问题 |
|
1.17.17 |
v1.17 |
修复未注册节点删除失败可能阻塞弹性伸缩的问题 |
|
1.17.16 |
v1.17 |
修复在已有的周期弹性伸缩规则里节点池修改不生效的问题。 |
|
1.17.15 |
v1.17 |
资源规格配置单位统一化 |
|
1.17.14 |
v1.17 |
修复Taints异步更新场景触发的重复扩容问题。 |
|
1.17.8 |
v1.17 |
Bug修复 |
|
1.17.7 |
v1.17 |
添加日志内容,Bug修复 |
|
1.17.5 |
v1.17 |
支持v1.17版本的集群,支持页面显示伸缩事件 |
|
1.17.2 |
v1.17 |
支持v1.17版本的集群 |