tencent cloud

容器服务

动态与公告
产品动态
公告
产品发布记录
产品简介
产品概述
产品优势
产品架构
应用场景
产品功能
基本概念
原生 Kubernetes 名词对照
容器服务高危操作
地域和可用区
开源组件
购买指南
购买指引
购买 TKE 标准集群
购买原生节点
购买超级节点
快速入门
新手指引
快速创建一个标准集群
入门示例
容器应用部署 Check List
集群配置
标准集群概述
集群管理
网络管理
存储管理
节点管理
GPU 资源管理
远程终端
应用配置
工作负载管理
服务和配置管理
组件和应用管理
弹性伸缩
容器登录方式
可观测配置
运维可观测性
成本洞察和优化
调度配置
调度组件概述
资源利用率优化调度
业务优先级保障调度
Qos 感知调度
安全和稳定性
容器服务安全组设置
身份验证和授权
应用安全
多集群管理
计划升级
备份中心
云原生服务指南
云原生 etcd
Prometheus 监控服务
TKE Serverless 集群指南
TKE 注册集群指南
实践教程
集群
Serverless 集群
调度
安全
服务部署
网络
发布
日志
监控
运维
Terraform
DevOps
弹性伸缩
容器化
微服务
成本管理
混合云
AI
故障处理
节点磁盘爆满排障处理
节点高负载排障处理
节点内存碎片化排障处理
集群 DNS 解析异常排障处理
集群 Kube-Proxy 异常排障处理
集群 API Server 网络无法访问排障处理
Service&Ingress 网络无法访问排障处理
Service&Ingress 常见报错和处理
Nginx Ingress 偶现 Connection Refused
CLB Ingress 创建报错排障处理
Pod 网络无法访问排查处理
Pod 状态异常与处理措施
授权腾讯云售后运维排障
CLB 回环问题
API 文档
History
Introduction
API Category
Making API Requests
Elastic Cluster APIs
Resource Reserved Coupon APIs
Cluster APIs
Third-party Node APIs
Relevant APIs for Addon
Network APIs
Node APIs
Node Pool APIs
TKE Edge Cluster APIs
Cloud Native Monitoring APIs
Scaling group APIs
Super Node APIs
Other APIs
Data Types
Error Codes
TKE API 2022-05-01
常见问题
TKE 标准集群
TKE Serverless 集群
运维类
隐患处理
服务类
镜像仓库类
远程终端类
事件类
资源管理类
服务协议
TKE Service Level Agreement
TKE Serverless Service Level Agreement
联系我们
词汇表
文档容器服务实践教程弹性伸缩使用 EHPA 实现基于流量预测的弹性

使用 EHPA 实现基于流量预测的弹性

PDF
聚焦模式
字号
最后更新时间: 2024-05-24 15:26:59

EHPA 简介

EHPA(EffectiveHorizontalPodAutoscaler)是 Crane 开源项目 提供的弹性伸缩产品。它基于社区 HPA 做底层的弹性控制,支持更丰富的弹性触发策略(预测、观测、周期),以提高弹性控制的效率,并确保服务质量。
EHPA 的主要特点包括:
提前扩容,保证服务质量:通过算法预测未来的流量洪峰,提前扩容以避免扩容不及时导致的雪崩和服务稳定性故障。
减少无效缩容:通过预测未来的需求,减少不必要的缩容,稳定工作负载的资源使用率,消除突刺误判。
支持 Cron 配置:支持基于 Cron 的弹性配置,以应对大促等异常流量洪峰。
兼容社区:使用社区 HPA 作为弹性控制的执行层,能力完全兼容社区。

安装

安装 EHPA 可以参考 Crane 开源项目的文档,具体步骤请参见 Intelligent Autoscaling Practices Based on Effective HPA for Custom Metrics

产品功能

基于预测的弹性

大多数在线应用的负载都具有周期性的特征。用户可以根据按天或者按周的趋势预测未来的负载。EHPA 使用 DSP 算法来预测应用未来的时间序列数据。
以下代码为一个开启了预测能力的 EHPA 模版示例:
apiVersion: autoscaling.crane.io/v1alpha1
kind: EffectiveHorizontalPodAutoscaler
spec:
prediction:
predictionWindowSeconds: 3600
predictionAlgorithm:
algorithmType: dsp
dsp:
sampleInterval: "60s"
historyLength: "3d"

监控数据兜底

在使用预测算法进行预测时,您可能会担心预测数据的准确性,因此在计算副本数时,EHPA 不仅会按预测数据计算,同时也会考虑实际监控数据来兜底,以提升弹性的安全性。具体实现原理是,当您在 EHPA 中定义 spec.metrics 并且开启弹性预测时,EffectiveHPAController 会根据策略自动生成多个 Metric Spec 来创建底层管理的 HPA。
例如,当用户在 EHPA 的 yaml 文件中定义如下 Metric Spec:
apiVersion: autoscaling.crane.io/v1alpha1
kind: EffectiveHorizontalPodAutoscaler
spec:
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
将会自动转换为两条 HPA 的阈值配置:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
spec:
metrics:
- pods:
metric:
name: crane_pod_cpu_usage
selector:
matchLabels:
autoscaling.crane.io/effective-hpa-uid: f9b92249-eab9-4671-afe0-17925e5987b8
target:
type: AverageValue
averageValue: 100m
type: Pods
- resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
type: Resource
在上述示例中,用户在 EHPA 创建的 Metric 阈值配置将自动转换为底层 HPA 上的两条 Metric 阈值配置:预测 Metric 阈值和实际监控 Metric 阈值。
预测 Metric 阈值是一个 custom metric。其值由 Crane 的 MetricAdapter 提供。
实际监控 Metric 阈值是一个 resource metric,与用户在 EHPA 中定义的相同。这样 HPA 将根据应用程序实际监控的 Metric 计算副本数。
当配置了多个弹性 Metric 阈值时,HPA 将分别计算每个 Metric 对应的副本数,并选择最大的副本数作为最终的推荐弹性结果。

水平弹性的执行流程

1. EffectiveHPAController 创建 HorizontalPodAutoscaler 和 TimeSeriesPrediction 对象。
2. PredictionCore 从 Prometheus 获取历史 metric,通过预测算法计算,将结果记录到 TimeSeriesPrediction。
3. HPAController 通过 metric client 从 KubeApiServer 读取 metric 数据。
4. KubeApiServer 将请求路由到 Crane 的 MetricAdapter。
5. HPAController 计算所有的 Metric 返回的结果,得到最终的弹性副本推荐。
6. HPAController 调用 scale API 对目标应用进行扩/缩容。
整体流程图如下所示:
crane-ehpa



用户案例

通过一个生产环境的客户案例,向您展示 EHPA 的实际效果。本案例在预发环境中重放了生产数据,并对比了使用 EHPA 和社区的 HPA 的弹性效果。
下图中的红线代表应用在一天内的实际 CPU 使用量曲线,您可以看到在早上8点、中午12点和晚上8点时出现了使用高峰。绿线代表 EHPA 预测的 CPU 使用量。

craen-ehpa-metrics-chart


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

crane-ehpa-metrics-replicas-chart


可以看出 EHPA 具有以下优势:
在流量洪峰到来之前进行扩容。
当流量先下降后立即上升时,不做无效的缩容。
相比 HPA,EHPA 具有更少的弹性次数却更高效。

ScaleStrategy 弹性策略

EHPA 提供了两种弹性策略:Auto 和 Preview。您可以随时切换它并立即生效。

Auto

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

Preview

Preview 策略提供了一种让 EHPA 不自动执行弹性的能力。因此,您可以通过 EHPA 的 desiredReplicas 字段观测 EHPA 计算出的副本数。您可以随时在两个模式之间切换,当您切换到 Preview 模式时,您可以通过 spec.specificReplicas 调整应用的副本数,如果 spec.specificReplicas 为空,则不会对应用执行弹性,但仍会执行副本数的计算。
以下是一个配置为 Preview 模式的 EHPA 模板示例:
apiVersion: autoscaling.crane.io/v1alpha1
kind: EffectiveHorizontalPodAutoscaler
spec:
scaleStrategy: Preview # ScaleStrategy indicate the strategy to scaling target, value can be "Auto" and "Preview". s
pecificReplicas: 5 # SpecificReplicas specify the target replicas.
status:
expectReplicas: 4 # expectReplicas is the calculated replicas that based on prediction metrics or spec.specificReplicas.
currentReplicas: 4 # currentReplicas is actual replicas from target


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈