公众号:yunops

一、需求说明

水平弹性伸缩是 k8s 的一个重要的特性,我们在使用 k8s 的过程中,通常会使用 HPA 功能基于一些指标让 k8s 自动调整 pod 数量,在设置了 cpu 和 memory 资源 request 的情况下,在不借助其他三方组件的情况下,HPA 就可以基于其中的 Pods 的资源用量来实现目标资源的扩缩。但是 cpu 和 memory 的用量很多时候时候并不能体现出业务应用的真实负载情况,比如说非资源密集型应用,存在资源使用率不高、但实际上已经达到负载瓶颈的场景;还有多线程并发应用,线程池配置较小也会导致在业务高峰期间线程池耗尽,部分请求进入队列排队等候处理进而造成响应超时等问题,所以需要使用能精确反映真实负载情况的监控指标作为 HPA 的依据,比如 QPS、线程池使用率等。

以下就我们使用阿里云 ACK 服务、自建 Prometheus 收集业务应用上报的 metric 监控数据样本实现基于自定义指标的 HPA(水平伸缩)方案。

二、环境说明

三、实现说明

四、实际规划方案:

  1. 核心 QPS:只要各项池化资源配置合理,它一个基本上就能说明问题了,随着核心接口 QPS 的变化,各副本节点数、各项可用的池化资源也随之变化。
  2. 基础资源使用率,如:CPU 使用率。