该问题有如下两种情况:
- 如果同时配置了“CPU分配率”和“内存分配率”的规则,两种或多种规则同时满足扩容条件时,执行扩容节点数更多的规则。
- 如果同时配置了“CPU分配率”和“周期触发”的规则,当达到“周期触发”的时间值时CPU也满足扩容条件时,较早执行的A规则会将节点池状态置为伸缩中状态,导致B规则无法正常执行。待A规则执行完毕,节点池状态恢复正常后,B规则也不会执行。
配置了CPU或者内存规则后,策略的检测周期是多久?是否只要一次检测出满足条件就会触发扩容节点?
周期不固定,会因autoscaler每次循环的处理逻辑而变动。只要一次检测出满足条件就会触发扩容(当然还要满足冷却时间、节点池状态等约束条件)。
节点伸缩和autoscaler插件的本身功能如何配合?
节点伸缩中创建的策略和autoscaler插件中的配置同时生效时,比如不可调度和指标规则同时满足时,优先执行不可调度扩容。
- 若不可调度执行成功,跳过指标规则逻辑,进入下一次循环。
- 若不可调度执行失败,才执行指标规则逻辑。
节点池新增了优先级等功能,弹性扩容时CCE将按照如下策略来选择节点池进行扩容:
1. 通过预判算法判断节点池是否能满足让Pending的Pod正常调度的条件,包括节点资源大于Pod的request值、nodeSelect、nodeAffinity和taints等是否满足Pod正常调度的条件;另外还会过滤掉扩容失败(因为资源不足等原因)还处于15min冷却时间的节点池。
2. 有多个节点池满足条件时,判断节点池设置的优先级(优先级默认值为0,取值范围为0-100,其中100为最高,0为最低),选择优先级最高的节点池扩容。
3. 如果有多个节点池处于相同的优先级,或者都没有配置优先级时,通过最小浪费原则,根据节点池里设置的虚拟机规格,计算刚好能满足Pending的Pod正常调度,且浪费资源最少的节点池。
4. 如果还是有多个节点池的虚拟机规格都一样,只是AZ不同,那么会随机选择其中一个节点池触发扩容。
节点池中配置的缩容冷却时间和autoscaler插件中配置的缩容冷却时间是如何影响的?
弹性缩容冷却时间:当前节点池扩容出的节点多长时间不能被缩容,作用范围为节点池级别。
扩容后缩容冷却时间:autoscaler触发扩容后(不可调度、指标、周期策略)整个集群多长时间内不能被缩容,作用范围为集群级别。
节点删除后缩容冷却时间:autoscaler触发缩容后整个集群多长时间内不能继续缩容,作用范围为集群级别。
缩容失败后缩容冷却时间:autoscaler触发缩容失败后整个集群多长时间内不能继续缩容,作用范围为集群级别。
如果出现优先选择的节点池资源不足,会不会自动选择下一个节点池?
会。