AHPA 弹性预测最佳实践

简介: 在云原生场景下,资源容量往往难以预估,而使用 K8s 原生的 HPA,往往要面对弹性滞后以及配置复杂问题。阿里云容器服务与达摩院决策智能时序团队合作推出的 AHPA(Advanced Horizontal Pod Autoscaler)弹性预测,可以根据业务历史指标,自动识别弹性周期并对容量进行预测,帮你提前进行弹性规划,解决弹性滞后的问题。 AHPA 如何配置才能解锁最佳使用姿势?本文给你带来 AHPA 弹性预测最佳实践

在云原生场景下,资源容量往往难以预估,而使用 K8s 原生的 HPA,往往要面对弹性滞后以及配置复杂问题。阿里云容器服务与达摩院决策智能时序团队合作推出的 AHPA(Advanced Horizontal Pod Autoscaler)弹性预测,可以根据业务历史指标,自动识别弹性周期并对容量进行预测,帮你提前进行弹性规划,解决弹性滞后的问题。 AHPA 如何配置才能解锁最佳使用姿势?本文给你带来  AHPA 弹性预测最佳实践。接下来将从如下方面展开介绍:

  • AHPA 弹性预测介绍
  • 指标源及AHPA配置参数介绍
  • 边界保护的适用情况
  • 利用降噪、算法分位数可以做哪些事情
  • 典型场景:从 HPA 转 AHPA
  • 典型场景:弹性推荐

AHPA 弹性预测介绍

为什么要做弹性预测,首先当前应用存在冷启动的问题,我们可以看一下应用启动阶段包括资源调度、拉镜像、容器创建、容器启动以及应用启动。冷启动除了要解决 IaaS 资源的分配、Kubernetes 的调度、拉镜像等问题以外还涉及到应用的启动时长。应用启动时长从毫秒到分钟级别都有。应用启动时间这完全是业务行为,在底层平台层面几乎无法控制。

此外当前通用的弹性方案面临如下问题,可用性差,无法预估容量,少了不够,多了浪费。稳定性风险弹性之后,配置固化,易用性差,配置繁琐,如定时的CronHPA, 需要评估每个时间段扩容多少,缩容多少,并且随着业务的变化需要随时进行调整。

image.png

我们思考弹性核心要解的问题:在提升资源使用率的同时,保障业务的稳定性。

那么我们如果能够根据历史数据,通过机器学习算法,提前预测未来需要多少资源,那么就可以避免上述的问题。围绕这个思路,我们需要做哪些事情呢?

首先要有历史指标数据,数据是预测的前提,然后需要预测算法,通过算法提前预测未来的需要多少资源,最后生效在工作负载上。我把他归纳为弹性预测三元组。当然我们目标是:资源提前预热、自动弹性规划、同时能够支持弹性降级,保证稳定性。

方案实现如下:

  • 丰富的数据指标:支持包括CPU、Memory、QPS、RT以及外部指标等
  • 稳定性保障:AHPA的弹性逻辑基于主动预热、被动兜底的策略,并结合降级保护,保证了资源稳定。
  • 主动预测:根据历史预测出未来一段时间的趋势结果,适用于周期性的应用。
  • 被动预测:实时预测。针对突发流量场景,通过被动预测实时准备资源。
  • 降级保护:支持配置多个时间区间范围最大、最小实例。
  • 多种伸缩方式:AHPA支持伸缩方式包括Knative、HPA以及 Deployment:
  • Knative:解决 Serverless 应用场景下,基于并发数/QPS/RT 弹性冷启动的问题
  • HPA:简化 HPA 弹性策略配置,降低用户使用弹性的门槛,解决使用 HPA 面临的冷启动的问题
  • Deployment:直接使用Deployment,自动扩缩容

优势体现:

通过AHPA我们可以做到毫秒级预测、秒级弹性,对于复杂周期识别率到达95%以上,同时支持鲁棒性以及分钟级别边界保护配置。

AHPA 最佳实践配置

指标源配置

首先介绍指标源配置,这里我们通过ConfigMap配置相应的指标源,具体如下

apiVersion: v1
kind: ConfigMap
metadata:
  name: application-intelligence
  namespace: kube-system
data:
  armsUrl: https://cn-beijing.arms.aliyuncs.com:9443/api/v1/prometheus/xxx/1581204543170042/xxx/cn-beijing
  token: xxxx
  realtimesource: metric-server

参数说明:

参数

说明

推荐配置

armsUrl

历史指标配置:Promethues 数据源Url

必选

token

Promethues 数据源Token

建议配置

realtimesource

实时指标配置。支持metric-servervk

必选。在使用ASK时,可以直接使用VK

AdvancedHorizontalPodAutoscaler 配置

在 AHPA 中我们通过 AdvancedHorizontalPodAutoscaler 配置弹性策略、目标对象以及扩缩容时间边界。具体如下:

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscaler
metadata:
  name: ahpa-demo
spec:
  scaleStrategy: observer
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  maxReplicas: 100
  minReplicas: 2
  prediction:
    quantile: 95
    scaleUpForward: 180
  instanceBounds:
  - startTime: "2021-12-16 00:00:00"
    endTime: "2022-12-16 00:00:00"
    bounds:
    - cron: "* 0-8 ? * MON-FRI"
      maxReplicas: 15
      minReplicas: 4
    - cron: "* 9-15 ? * MON-FRI"
      maxReplicas: 15
      minReplicas: 10
    - cron: "* 16-23 ? * MON-FRI"
      maxReplicas: 20
      minReplicas: 15

参数说明:

参数

说明

推荐配置

scaleStrategy

弹性生效策略。目前支持:observerauto

刚上线推荐先观察(observer),再生效(auto

metrics

弹性指标,支持cpumemoryqpsrt

必选

scaleTargetRef

弹性生效工作负载:DeploymentHPAKnative

必选

prediction. quantile

预测分位数。表示业务指标实际值低于设定目标值的概率,越大表示越保守,两位小数,01

推荐范围0.90-0.99, 默认0.99

prediction.scaleUpForward

Pod冷启动时间

建议配置

instanceBounds

扩缩容时间区间边界配置

建议配置

指标预处理

由于指标数据质量参差补齐,在AHPA中我们需要对指标进行预处理,包括指标去重、指标补齐以及指标清洗。在应用启动时,往往遇到启动过程中CPU使用率比较高的现象,以java应用为例,类加载过程是比较耗CPU。这样的情况其实不是业务流量本身造成的,因此对于这类指标是不需要参与预测指标输入的,需要清洗过滤掉。因此通过指标预处理,剔除这部分预测干扰。

边界保护配置的灵活使用

在AHPA 中,可以设置不同时间段的最大值和最小值,这样即使遇到指标异常或者弹性预测不准的情况下,也能有兜底的策略。

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscaler
metadata:
  name: ahpa-demo
spec:
  maxReplicas: 100
  minReplicas: 2
  instanceBounds:
  - startTime: "2021-12-16 00:00:00"
    endTime: "2022-12-16 24:00:00"
    bounds:
    - cron: "* 0-8 ? * MON-FRI"
      maxReplicas: 15
      minReplicas: 4
    - cron: "* 9-15 ? * MON-FRI"
      maxReplicas: 15
      minReplicas: 10
    - cron: "* 16-23 ? * MON-FRI"
      maxReplicas: 20
      minReplicas: 15

除了可以进行分钟级别保护之后,利用边界保护配置,可以做到定时弹性或者资源应急准备。也就是如果在某个时间段需要大量的资源(用于突发流量应急、压测等),可以通过调整这个时间段的最小资源,保障这个时间段的资源水位。

利用分位数可以做哪些事情

在 AHPA 中可以设置预测的分位数 quantile ,这个值表示业务指标实际值低于设定目标值的概率,越大表示越保守,取值范围 0~1。越大表示越保守的意思是,值越大表示超出目标设置的数值点越少,也就意味着牺牲更多的资源。但有的业务其实超出一部分目标指标也是可以接受的,这样的情况下也是可以将这个值调低一些。默认推荐值是0.95

典型场景:从HPA转AHPA

客户痛点:当前使用 HPA, 由于应用存在冷启动的问题,导致CPU使用率无法提升。

解决方案:通过 AHPA 预测,资源预热,提升CPU使用率

上线前后使用情况对比:

CPU使用率:较上线提高 9%

•资源成本:成本节省比例 28.68%


典型场景:弹性推荐

客户痛点: 现有弹性方案无法与自身 PaaS 平台结合,期望只做规划不进行生效。

解决方案:通过 AHPA 预测未来24小时Pod实例数,给出弹性规划,不做生效。实际弹性生效由客户自身 PaaS 平台确定执行。

获取配置推荐命令:

kubectl get --raw '/apis/metrics.alibabacloud.com/v1beta1/namespaces/default/predictions/fib-deployment'

参数说明:

参数

说明

periodicity

是否周期性。0:表示无周期,1:有周期

predict_series

未来24小时预测结果,分钟级别

recommend_pod_series

当前推荐pod

小结

当前阿里云容器服务 AHPA 已产品化上线,点击此处了解产品使用详情。

目录
相关文章
|
缓存 弹性计算 Kubernetes
在生产环境中,阿里云如何构建高性能云原生容器网络?(含 PPT 下载)
关注“阿里巴巴云原生”公众号,后台回复 “ 416 ” 即可下载 PPT。
在生产环境中,阿里云如何构建高性能云原生容器网络?(含 PPT 下载)
|
3月前
|
人工智能 关系型数据库 分布式数据库
不止于云原生:阿里云PolarDB全面内化AI能力,构建AI就绪的下一代数据库架构
2026阿里云 PolarDB 开发者大会上,PolarDB 发布 AI 数据湖库(Lakebase)等全新能力,推出“AI 就绪的云原生数据库”四大支柱,推动数据库从“外挂式”集成 AI 到“内生智能”的进化,赋能 Agent 应用开发,助力企业实现智能决策与业务跃迁。
|
5月前
|
运维 监控 数据可视化
别让运维跪着查日志了!给老板看的“业务观测”大盘才是真香
深夜告警、业务暴跌、全员背锅?一次支付故障暴露传统监控盲区。我们通过业务观测,将技术指标转化为老板听得懂的“人话”,实现从被动救火到主动洞察的跨越。让技术团队不再跪着查日志,而是站着驱动业务增长。
别让运维跪着查日志了!给老板看的“业务观测”大盘才是真香
|
运维 Kubernetes 监控
容器服务ASK初评
【8月更文挑战第12天】容器服务ASK初评
621 3
|
机器学习/深度学习 数据采集 弹性计算
甩掉容量规划炸弹:用 AHPA 实现 Kubernetes 智能弹性伸缩
我们提出了一种智能化弹性伸缩方案 AHPA,可以根据历史时序数据进行主动预测,提前扩容,避免弹性滞后。同时,会根据实时数据动态调整主动预测结果,兼容周期变动等场景。
598 74
甩掉容量规划炸弹:用 AHPA 实现 Kubernetes 智能弹性伸缩
|
存储 运维 Kubernetes
Kubernetes HPA 的三个误区与避坑指南
云计算带来的优势之一便是弹性能力,云原生场景下Kubernetes提供了水平弹性扩容能力(HPA),让应用可以随着实时指标进行扩/缩。然而HPA的实际工作情况可能和我们直观预想的情况是不一样的,这里面存在一些认知误区。本文总结了一下 EDAS 用户在使用 HPA 时常遇到的三个认知误区
3071 102
Kubernetes HPA 的三个误区与避坑指南
|
域名解析 网络协议 应用服务中间件
nginx-ingress通过ipv6暴露服务,并在nginx ingress日志中记录客户端真实ipv6的ip地址
本文主要通过阿里云提供的clb和nlb来实现,建议是提前创建好双栈的vpc和vsw(使用clb可以不用双栈vpc和vsw)
1374 1
|
弹性计算 运维 Cloud Native
阿里云云原生弹性方案,用弹性解决集群资源利用率难题
本文主要介绍了通过弹性,实现成本优化,解决集群资源利用率难题。
93391 8
|
人工智能 资源调度 Kubernetes
Koordinator 异构资源/任务调度实践
Koordinator 异构资源/任务调度实践
16748 10