tencent cloud

文档反馈

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

最后更新时间: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
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持