赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. ACK Serverless集群
  4. 操作指南
  5. Knative
  6. Knative服务管理
  7. 在Knative中使用HPA

在Knative中使用HPA

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

Knative和HPA(Horizontal Pod Autoscaler)的结合使用可以为您的应用提供基于资源负载的自动扩缩容能力。Knative本身已经提供了基于请求量的自动扩缩容功能,但通过结合HPA,您可以根据更多指标类型(例如CPU使用率、内存使用率等)进一步精细化控制扩缩容行为。

前提条件

  • 已为集群部署Knative。具体操作,请参见在ACK Serverless集群部署Knative。

  • 已通过kubectl工具连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。

  • 如需使用Knative监控大盘查看Knative服务监控数据,需已将Knative接入阿里云Prometheus监控,请参见查看Knative服务监控大盘。

步骤一:部署Knative Service

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

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

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

    创建一个名为helloworld-go-hpa的服务,以下为配置示例。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-go-hpa # Knative服务名称。
    spec:
      template:
        metadata:
          labels:
            app: helloworld-go-hpa
          annotations:
            autoscaling.knative.dev/class: "hpa.autoscaling.knative.dev" # 指定弹性插件为HPA。
            autoscaling.knative.dev/metric: "cpu" # HPA的指标类型可以设置为CPU和Memory。此处以CPU为例。
            autoscaling.knative.dev/target: "30" # 设置HPA CPU指标的阈值。根据该阈值,Knative的HPA将自动调整副本数。
            autoscaling.knative.dev/minScale: "1" # 设置弹性策略实例数的最小值。
            autoscaling.knative.dev/maxScale: "4" # 设置弹性策略实例数的最大值。
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/autoscale-go:v1024
              resources:
                requests:
                  cpu: '200m'
  4. 执行以下命令,检查服务是否正常运行。

    kubectl get ksvc

    预期输出如下:

    NAME                   URL                                               LATESTCREATED                LATESTREADY                  READY   REASON
    helloworld-go-hpa      http://helloworld-go-hpa.default.example.com      helloworld-go-hpa-00001      helloworld-go-hpa-00001      True        

    READY列显示True,表明Knative服务正常运行。

步骤二:基于CPU实现自动弹性扩缩容

  1. 安装Hey压测工具。

    关于Hey压测工具的详细信息,请参见Hey。

  2. 执行以下命令,模拟 100 qps 持续60s内对服务发起访问,从而进行压测。

    说明

    请替换121.XX.XX.10为网关IP或域名。

    hey -z 60s -q 100   -host "helloworld-go-hpa.default.example.com"   "http://121.XX.XX.10?prime=40000000" # 121.199.XXX.XXX为网关IP或域名。

    在压测的同时,执行以下命令实时查看Pod扩缩容情况。

    kubectl get pods --watch

    Pod扩缩容预期输出如下结果:

    NAME                                                     READY   STATUS    RESTARTS   AGE
    # 该Pod正在运行,且容器已经就绪。
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxfl5      2/2     Running   0          101m
    # Pod扩容为4个,且状态为0/2 Pending,这意味着容器正在等待调度并分配资源。
    helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj      0/2     Pending   0          0s
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85      0/2     Pending   0          0s
    helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj      0/2     Pending   0          0s
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85      0/2     Pending   0          0s
    # 4个Pod的状态变为0/2 ContainerCreating,表示容器正在创建。
    helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj      0/2     ContainerCreating   0          0s
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85      0/2     ContainerCreating   0          0s
    helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj      0/2     ContainerCreating   0          0s
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85      0/2     ContainerCreating   0          0s
    # 4个Pod的状态变为1/2 Running和2/2 Running,表示其中一个或两个容器已经成功创建并运行。
    helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj      1/2     Running             0          1s
    helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj      2/2     Running             0          1s
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85      1/2     Running             0          1s
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85      2/2     Running             0          1s

    输出结果表明,Knative具有基于请求实现自动弹性扩缩容的能力。表现为当系统负载增加,需要更多的Pod来处理请求时,Pod数从最初的1个扩展到了4个,以提高系统的处理能力和吞吐量。

(可选)步骤三:查看Knative监控大盘

Knative提供开箱即用的可观测能力,在Knative页面单击监控大盘页签,即可查看服务的监控数据情况。关于大盘信息的详细介绍,请参见查看Knative服务监控大盘。

image.png

相关文档

  • 阿里云Knative通过整合容器构建(或者函数)、工作负载管理(动态扩缩)以及事件模型来实现Serverless标准。关于阿里云Knative的更多基本信息,请参见Knative。

  • 关于阿里云Knative的更多功能,请参见阿里云Knative和开源Knative对比。

相关文章

为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备14022346号-15
gongan beian 京公网安备11010802041014号