容器服务 预测水平伸缩(EHPA)

EffectiveHorizontalPodAutoscaler(简称 EHPA)是 Crane 提供的弹性伸缩产品,基于社区 HPA 进行底层弹性控制,支持更丰富的弹性触发策略(预测、观测、周期),让弹性更加高效,并保障了服务的质量。参见 使用 EHPA 实现基于流量预测的弹性。TKE 将该功能进行产品化包装,用户可以在控制台上一键安装配置 craned 组件,创建 EHPA,便捷实现基于流量预测的弹性伸缩。

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

一、工作原理

EHPA 的工作原理如下:

1. EffectiveHPAController 创建 HorizontalPodAutoscaler 和 TimeSeriesPrediction 对象。

2. PredictionCore 从 Prometheus 获取历史指标,通过预测算法计算,将结果记录到 TimeSeriesPrediction。

3. HPAController 通过 metric client 从 KubeApiServer 读取指标数据。

4. KubeApiServer 将请求路由到 Crane 的 MetricAdapter。

5. HPAController 计算所有指标返回的结果,得到最终的弹性副本推荐。

6. HPAController 调用 scale API 对目标应用进行扩/缩容。

二、预期效果

通过一个生产环境的客户案例介绍 EHPA 的实际效果。我们将生产数据在预发环境重放,对比使用 EHPA 和社区 HPA 的弹性效果。

下图的红线是应用在一天内的实际 CPU 使用量曲线,可以看到在8点,12点,晚上8点时是使用高峰。绿线是 EHPA 预测的 CPU 使用量。 

下图是对应的自动弹性的副本数曲线,红线是社区 HPA 的副本数曲线,绿线是 EHPA 的副本数曲线。 

EHPA 具有以下优势:

·在流量高峰来临前提前扩容。

·当流量先降后立刻升时,不进行无效缩容。

·相比 HPA,弹性次数更少但更高效。

三、安装和配置

EHPAController 集成在 craned 中,同时依赖 Prometheus 组件获取历史指标。需要在组件管理中安装或升级最新版本的 craned,开启 EHPA 配置,并设置 Prometheus 访问地址和用户名、密码。

操作步骤如下:

1. 登录容器服务控制台,选择左侧导航栏中的 集群。

2. 在集群页面,选择集群 ID,进入集群的基本信息页面。

3. 选择左侧导航栏中的运维中心 > 组件管理。

·若已有 craned 组件,需要升级 craned 组件至最新版本,选择更新配置;

·若无 craned 组件,需要安装 craned 组件,在新建组件管理页面,选择 craned,并选择参数配置。

4. 在 Craned 组件参数设置页面,勾选是否开启 ehpa,并设置 Prometheus 数据查询地址、用户名和密码。

5. 单击确定。

四、控制台创建

1. 登录容器服务控制台,选择左侧导航栏中的 集群。

2. 在集群页面,选择集群 ID,进入集群的基本信息页面。

3. 选择运维中心 > 自动伸缩,在 EffectiveHorizontalPodAutoscaler 页面单击新建。

4. 触发策略可选:

·CPU:CPU 利用率(占 Request)、CPU 使用量。

·内存:内存利用率(占 Request)、内存使用量。

5. 弹性预测配置可选:

·Auto:Auto 策略下 EHPA 会自动执行弹性行为。默认 EHPA 的策略是 Auto。在这个模式下 EHPA 会创建一个社区的 HPA 对象并自动接管它的生命周期。我们不建议用户修改或者控制这个底层的 HPA 对象,当 EHPA 被删除时,底层的 HPA 对象也会一并删除。

·Preview:Preview 策略提供了一种让 EHPA 不自动执行弹性的能力。用户可以通过 EHPA 的 desiredReplicas 字段观测 EHPA 计算出的副本数。用户可以随时在两个模式间切换,当用户切换到 Preview 模式时,可以通过 spec.specificReplicas 调整应用的副本数,如果 spec.specificReplicas 为空,则不会对应用执行弹性,但是依然会执行副本数的计算。

五、YAML 创建

你也可以通过编写 YAML 文件来创建 EHPA。需要通过 Kubectl 创建。以下是一个示例:

apiVersion: autoscaling.crane.io/v1alpha1kind: EffectiveHorizontalPodAutoscalermetadata: name: test namespace: defaultspec: maxReplicas: 10 minReplicas: 1 metrics: – resource: name: cpu target: averageValue: "2" type: AverageValue type: Resource prediction: predictionAlgorithm: algorithmType: dsp dsp: estimators: {} historyLength: 7d sampleInterval: 60s predictionWindowSeconds: 3600 scaleStrategy: Auto scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: php-apache

通过下面的命令创建 EHPA:

vim pod1.yamlkubectl apply -f pod1.yaml

赞 (0)
上一篇 4天前
下一篇 4天前