在应用上云的场景中,容器化率已经达到比较高的水平。在解决需要资源快速弹性等业务需求时,容器的自动伸缩能力就显得尤为重要和便捷。K8s提供Pod的自动伸缩能力,本文简述其中的Pod自动水平伸缩。
在K8s中,HorizontalPodAutoscaler 可以自动更新Deploymen、StatefulSet等工作负载资源, 以满足自动扩缩工作负载的需求。水平扩缩就是当有更多的负载需要响应时,自动部署更多的 Pod。当负载减少并且 Pod 的数量高于配置的最小值时, HorizontalPodAutoscaler 会更新工作负载资源进行缩减。
HorizontalPodAutoscaler 通过K8s API 资源和控制器来实现。Pod水平自动扩缩控制器运行在 K8s 控制平面,定期调整资源的所需规模,以匹配平均 CPU 利用率、平均内存利用率或任何其他自定义指标。
HorizontalPodAutoscaler工作原理:
Pod 水平自动扩缩通过一个间歇运行的控制回路实现,默认间隔为 15 秒。在每个间隔的时间段内,控制器管理器根据 HorizontalPodAutoscaler 定义中的指标查询资源利用率,然后根据平均的资源使用率或原始值计算出扩缩的比例,并计算出目标副本数。副本公式如下:
期望副本数 = ceil[当前副本数 * (当前指标 / 期望指标)]