FederatedHPA工作原理
通过配置FederatedHPA策略,您可以基于工作负载的系统指标(CPU利用率、内存利用率)或自定义指标,对部署在多个集群中的无状态工作负载进行自动扩缩容。
您可以配合使用FederatedHPA策略与调度策略来实现各种功能,例如在FederatedHPA策略扩展工作负载Pod数量后,配置调度策略将扩展出的Pod调度到具有更多资源的集群,以解决单个集群的资源限制,提高故障发生时的恢复能力。
FederatedHPA工作原理
FederatedHPA的工作原理如图1,实现流程如下:
- HPA Controller通过API定期查询工作负载的指标数据。
- karmada-apiserver收到查询请求,会路由到之前通过API服务注册的karmada-metrics-adapter。
- karmada-metrics-adapter收到查询请求,会查询并收集集群中工作负载的指标数据。
- karmada-metrics-adapter将计算的指标数据返回至HPA Controller。
- HPA Controller基于返回的指标数据计算所需的Pod扩缩数量,并保持负载伸缩的稳定性。
若您在创建策略时设置了多个指标期望值,HPA Controller会比较每种指标变动计算出的Pod扩缩数量,选取Pod变动最大的计算结果进行扩缩。
如何计算Pod扩缩数量?
HPA Controller基于当前指标值和期望指标值来计算扩缩比例,再依据当前Pod数与扩缩比例计算出期望Pod数。当前Pod数与期望Pod数的计算方法如下:
- 当前Pod数 = 所有集群中状态为Ready的Pod数量
在计算期望Pod数时,HPA Controller会选择最近5分钟内计算所得的Pod数的最大值,以避免之前的自动扩缩操作还未完成,就直接执行新的扩缩的情况。
- 期望Pod数 = 当前Pod数 * ( 当前指标值 / 期望指标值 )
例如,当以CPU利用率为扩缩容参考指标时,若当前指标值为100%,期望指标值为50%,那么按照公式计算出的期望Pod数即为当前Pod数的两倍。
例如,若您在创建策略时选择默认设置,则缩容会在指标数据达到期待值的1.1倍以上,且持续时间超过300秒时触发;扩容会在指标数据达到期待值的0.9倍以下,且持续时间超过0秒时触发。