帮助文档 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
帮助文档 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. ACK Serverless集群
  4. 操作指南
  5. Knative
  6. Knative服务管理
  7. 基于AHPA实现定时自动扩缩容

基于AHPA实现定时自动扩缩容

  • Knative服务管理
  • 发布于 2025-04-18
  • 0 次阅读
文档编辑
文档编辑

AHPA(Advanced Horizontal Pod Autoscaler)可以根据历史指标(RPS、并发数、CPU、Memory指标)弹性预测未来负载的情况,提前进行弹性规划,减少弹性滞后的问题,同时也支持根据时间段设置Pod最大和最小副本数。结合Cron表达式,您还可以指定在某些时间区间内,扩缩容区间是什么,即最大最小副本数分别为多少。

前提条件

  • 已在集群中部署Knative,请参见部署Knative。

  • 已部署AHPA。

步骤一:通过AHPA配置弹性指标

您可以参见下方YAML文件创建AHPA配置文件,并部署到集群中。

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscalerTemplate
metadata:
  name: ahpa-demo
spec:
  metrics:
  - type: Resource
    resource:
      name: rps
      target:
        type: Utilization
        averageUtilization: 10 # 目前阈值,10表示RPS使用目标阈值是10。
  maxReplicas: 50 # 定义了Pod最大副本数为50。
  minReplicas: 0 # 定义了Pod最小副本数为0。
  prediction:
    quantile: 95 # 表示预测使用95%的置信度进行预测。
    scaleUpForward: 180 # 表示向前预测的时间范围为180秒。
# 在2023-06-01 00:00:00~2123-06-01 00:00:00这个时间范围内,Pod副本数的数量将受到AHPAT中定义的最大和最小副本数的限制。
  instanceBounds:
  - startTime: "2023-06-01 00:00:00"
    endTime: "2123-06-01 00:00:00"
    bounds:
# 在0-6小时的时间段内,最小副本数为0,最大副本数为50。
    - cron: '* 0-6 ? * *'
      maxReplicas: 50
      minReplicas: 0
# 在7-9小时的时间段内,最小副本数为5,最大副本数为50。
    - cron: '* 7-9 ? * *'
      maxReplicas: 50
      minReplicas: 5
# 在10-16小时的时间段内,最小副本数为10,最大副本数为50。
    - cron: '* 10-16 ? * *'
      maxReplicas: 50
      minReplicas: 10
# 在17-23小时的时间段内,最小副本数为2,最大副本数为50。
    - cron: '* 17-23 ? * *'
      maxReplicas: 50
      minReplicas: 2

参数

是否必选

说明

metrics

必选

用于配置弹性Metrics 。当前支持RPS、并发数、CPU、Memory指标。

maxReplicas

必选

最大扩容实例数。

minReplicas

必选

最小缩容实例数。

instanceBounds

可选

扩缩容时间段实例数边界。

  • startTime:开始时间。

  • endTime:结束时间。

bounds

可选

在不同的时间范围内Pod副本数的最小值和最大值。

  • cron:用于表示时间范围的格式化字符串。可以配置定时任务。

    如果您需要使用Cron表达式来定义定期运行的任务或自动扩展Pod副本数,请先根据下文Cron表达式中各个字段的详细说明,熟悉Cron中特殊字符和通配符的含义。

  • maxReplicas:最大副本数。

  • minReplicas:最低副本数。

Cron表达式中各个字段的详细说明

Cron表达式的字段解释如下,更多信息,请参见Cron定时任务。

字段

特定字符

是否必选

说明

分(Minutes)

* / , -

必选

取值范围为[0,59]。

时(Hours)

* / , -

必选

取值范围为[0,23]。

日(Day of month)

* / , – ?

必选

取值范围为[1,31]。

月(Month)

* / , -

必选

取值范围为[1,12]或者JAN~DEC。

说明

JAN~DEC字段的值不区分大小写。

星期(Day of week)

* / , – ?

可选

取值范围为[0,6]或者SUN~SAT。

说明
  • SUN~SAT字段的值不区分大小写。如:SUN和sun都可表示星期日。

  • 星期(Day of week)字段如果没提供,相当于是 *。

Cron表达式中各个字符代表的意义如下:

  • 星号(*):所有可能的值。例如*表示匹配所有分钟和小时。

  • 斜杠(/):步长,例如/5表示每隔5个时间单位。

  • 英文半角逗号(,):分隔符,例如1,3,5表示匹配1、3、5等值。

  • 破折号(-)范围,例如1-5表示匹配1到5。

  • 英文半角问号(?):仅在日(Day of month)和星期(Day of week)字段中使用,表示不指定值。

步骤二:创建Knative服务并指定使用AHPA弹性策略

配置完弹性策略之后,您可以通过Knative服务使用该定时弹性策略。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Knative。

  3. 在Knative页面的服务管理页签下,选择命名空间为default,然后单击使用模板创建,将以下YAML示例粘贴至模板,最后单击创建,创建一个名为helloworld-go-demo的服务。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-go-demo
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/class: ahpa.autoscaling.knative.dev # 指定AHPA弹性插件。
            autoscaling.knative.dev.alibabacloud/ahpa-template: "ahpa-demo" # 注意这里引用的AHPA模版参数修改时,关联的revision会自动修改弹性策略。
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
            env:
            - name: TARGET
              value: "Knative"

    服务创建成功后,请获取并记录服务网关地址和域名,供步骤三:访问服务时使用。

    image

步骤三:访问服务

执行如下命令,访问服务。

# helloworld-go-demo.default.example.com为服务的默认域名。
# alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com为服务对应的访问网关。
curl -H "Host: helloworld-go-demo.default.example.com" http://alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com

预期输出:

Hello Knative!

(可选)步骤四:结果验证

在Knative的监控大盘页面,可查看Knative服务的实例扩缩容趋势。关于Knative监控大盘的更多信息,请参见查看Knative服务监控大盘。

说明
  • 当Knative应用缩容到0且没有Pod实例时,Prometheus无法采集Pod的并发请求数、每秒请求数等指标。只有访问Knative应用Pod后,控制台才会展示这些指标。

  • 当Knative应用没有缩容到0时,无需访问Knative应用Pod,控制台便会展示Pod的并发请求数、Pod每秒请求数等指标。

image.png

相关文档

您可以基于Pod并发数、RPS配置自动扩缩容,请参见基于流量请求数实现服务自动扩缩容。

相关文章

为ECI绑定EIP实现公网访问 2025-04-18 14:49

默认情况下,系统只为ECI实例分配一个私网IP。如果您的Knative服务有连接公网的需求,例如拉取公网镜像等,您可以通过添加Annotation为其使用的ECI实例绑定已有的EIP或创建一个新EIP。自动创建EIP时,您还可以同步设置EIP带宽、绑定共享带宽包等。 前提条件

为Knative选择网关 2025-04-18 14:49

Knative网关提供了一种灵活的方式来接入外部流量,并将这些流量路由到不同的Knative服务上。ACK Knative支持ALB、MSE、ASM、Kourier四种网关,每种网关都有其特定的优势和适用场景。本文从产品定位、产品架构、基础路由、运维能力、性能特点、支持的主流协议和可观测能力进行对比

使用ALB网关 2025-04-18 14:49

在大规模Web应用、需要精细化流量分发、需要自动弹性伸缩等对HTTP/HTTPS请求有复杂路由需求的应用中,推荐您基于ALB网关实现Knative服务的流量分发和路由。ALB是专门面向HTTP、HTTPS和QUIC等应用层负载场景的负载均衡服务,具备超强弹性及大规模七层流量处理能力。ALB网关是一款

使用ASM网关 2025-04-18 14:49

在大规模分布式系统、微服务应用流量管理等场景下,特别是已采用或计划采用Istio作为服务网格框架的业务场景中,推荐您使用ASM网关实现Knative服务的流量分发和路由。ASM网关兼容社区Istio规范,控制面组件由ACK托管,简化了服务治理,包括服务调用之间的流量路由与拆分管理、服务间通信的认证安

使用GPU资源 2025-04-18 14:49

如需在Knative中部署需要GPU资源的任务(如AI或高性能计算),您可以在Knative Service中指定GPU规格并创建GPU实例。您还可以开启共享GPU调度能力,允许多个Pod共享GPU,提升使用率。 前提条件 已在集群中部署Knative,请参见

使用Kourier网关 2025-04-18 14:49

Kourier是一个基于Envoy架构实现的轻量级网关,是Knative社区提供的开源网关实现,提供Knative Revisions流量分发,支持gRPC服务、超时和重试、TLS证书和外部认证授权等功能。 前提条件

目录
Copyright © 2025 your company All Rights Reserved. Powered by 博智数字服务平台.
闽ICP备08105208号-1