AdvancedClusterAutoscaler
插件简介
AdvancedClusterAutoscaler是一个基于社区cluster-autoscaler智能增强的集群预测弹性引擎插件,深度对接AASP服务(柔性资源容量预测服务),提前感知集群级别负载压力变化,实现更主动,更精准的容量调整。
使用此插件前需要联系客服开启AASP的预测数据获取。
插件说明
AdvancedClusterAutoscaler可分成扩容和缩容两个方面:
- 自动扩容
集群的自动扩容有以下两种方式实现:
- 当集群中的Pod由于工作节点资源不足而无法调度时,会触发集群扩容,扩容节点与所在节点池资源配额一致。
- 当AASP(柔性资源容量预测服务)预测的需要的节点数量大于当前节点数量,节点池会扩容到预测的节点数量。
- 自动缩容
当AASP(柔性资源容量预测服务)预测的需要的节点数量小于当前节点数量,节点池会缩容到预测的节点数量。
约束与限制
- 该插件不能和CCE集群弹性引擎插件同时使用。
- 使用该插件要求已存在时长大于等于2周的AOM数据。
- 节点池只支持一种CPU/Memory规格(例如:4U8G),且只支持创建一个节点池。
- 创建出来的节点需要确保POD可以调度。
- 该插件功能仅支持虚拟机节点,不支持物理机节点和裸金属服务器。
- 默认节点池不支持弹性扩缩容,详情请参见默认节点池DefaultPool说明。
- 缩容节点会导致与节点关联的本地持久卷类型的PVC/PV数据丢失,无法恢复,且PVC/PV无法再正常使用。缩容节点时使用了本地持久存储卷的Pod会从缩容的节点上被驱逐,并重新创建Pod,Pod会一直处于pending状态,因为Pod使用的PVC带有节点标签,由于冲突无法调度成功。
- AdvancedClusterAutoscaler插件仅支持1.33及以上版本。
安装插件
- 为插件创建委托。
- 登录统一身份认证服务控制台。
- 在左侧导航栏中选择“委托”,单击“创建委托”。
- 委托类型选择“云服务”,云服务选择“云容器引擎服务CCE”。
- 单击“完成”。创建完成后选择“立即授权”。
- 单击右上角“新建策略”,策略内容如下:
{ "Version": "1.1", "Statement": [ { "Action": [ "cce:node:list", "cce:node:delete", "cce:nodepool:update", "cce:nodepool:list", "cce:nodepool:get", "cce:cluster:get", "cce:nodepool:scale", "ecs:cloudServerFlavors:get", "ecs:flavors:get", "ecs:flavors:get", "evs:types:get" ], "Effect": "Allow" } ] } - 选择刚创建的策略进行授权。
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“插件中心”,在右侧找到AdvancedClusterAutoscaler插件,单击“安装”。
- 在安装插件页面,根据需求选择“实例数”和资源配额。
内存申请值和限制值建议如下:
- 内存申请值 = Pod数量 * Pod的YAML大小(Kb)/ 1w * 0.28G+1G
- 内存限制值 = 内存申请值+2G
例如2w个Pod的场景下,每个Pod的YAML为10Kb,则内存申请值 = 2 * 10 * 0.28G + 1G = 6.6G;内存限制值 = 6.6G + 2G = 8.6G(该计算方法相比表1中的建议值会存在一定的误差,通过查表或计算均可)
- 设置“参数配置”,以下为必填项。
- agencyName:使用的委托名称,使用第1步中创建的委托
- clusterId:集群ID
- instanceId:AASP服务实例ID
- nodepoolName:节点池名称
- tenantId:项目ID
- stabilizationWindowSeconds:稳定窗口期,推荐节点数更新周期,默认值为300秒
- minPoolSize:节点池最小节点数量,默认为0
- maxPoolSize:节点池最大节点数量,默认为50
- 设置插件实例的部署策略。
- 调度策略对于DaemonSet类型的插件实例不会生效。
- 设置多可用区部署或节点亲和策略时,需保证集群中存在满足调度策略的节点且拥有足够的资源,否则插件实例将无法运行。
表2 插件调度配置 参数
参数说明
多可用区部署
- 优先模式:优先将插件的Deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区下的不同节点。
- 均分模式:插件Deployment实例均匀调度到当前集群下各可用区,增加新的可用区后建议扩容插件实例以实现跨可用区高可用部署;均分模式限制不同可用区间插件实例数相差不超过1,单个可用区资源不足会导致后续其他实例无法调度。
- 强制模式:插件Deployment实例强制调度到不同可用区的节点上,每个可用区下最多运行一个实例。如集群下节点不满足多可用区,插件实例将无法全部运行。节点故障后,插件实例存在无法迁移风险。
节点亲和
容忍策略
容忍策略与节点的污点能力配合使用,允许(不强制)插件的 Deployment 实例调度到带有与之匹配的污点的节点上,也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。
插件会对实例添加针对node.kubernetes.io/not-ready和node.kubernetes.io/unreachable污点的默认容忍策略,容忍时间窗为60s。
详情请参见设置容忍策略。
- 配置完成后,单击“安装”。