赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. ACK Serverless集群
  4. 操作指南
  5. Knative
  6. Knative服务管理
  7. 使用MSE网关并实现精准自动弹性

使用MSE网关并实现精准自动弹性

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

在微服务架构的业务场景下,推荐您使用MSE网关实现Knative服务的流量分发和路由。MSE网关是一款全托管免运维的网关,支持实现基于请求的精准自动弹性,即精准地控制单个Pod的请求并发处理数,能够满足大规模云原生分布式应用的流量治理诉求。

前提条件

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

  • 已安装MSE Ingress Controller组件,并为MSE Ingress Controller组件完成授权,请参见授予MSE Ingress Controller访问权限。

实现原理

在实际业务场景中,单个Pod处理请求的吞吐率有限,如果多个请求同时转发到同一个Pod,会导致服务端过载异常。因此,您可能需要精准地控制单个Pod的请求并发处理数。例如,在AIGC场景下,由于单个请求会占用较多的GPU资源,您需要对每个Pod的并发处理请求数进行严格的限制。结合MSE网关,Knative可以实现基于请求的精准自动弹性,以满足大规模云原生分布式应用的流量治理诉求。

如下图所示,弹性插件MPA会从MSE网关获取并发数,并计算所需要的Pod数进行扩缩容,实现了基于实际请求负载的自动弹性。同时,MSE网关可以根据路由规则和条件,实现基于请求的精准转发,以满足不同服务和版本的路由需求。

image.png

步骤一:部署MSE网关

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

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

  3. 在组件管理页签,单击一键部署Knative,选择MSE服务网关,然后按照页面指引完成Knative的部署。

步骤二:通过MSE网关访问部署的服务

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

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

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

    创建一个名为helloworld-go的服务。

    重要

    请将下方代码中的{REGION-ID}替换为您集群所在地域,以确保可以正确地访问和使用镜像。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-go
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/class: mpa.autoscaling.knative.dev # 表明使用MSE指标进行扩缩容,支持缩容到0。
            autoscaling.knative.dev/max-scale: '20' # 扩容Pod数上限是20。
        spec:
          containerConcurrency: 5 # 1个Pod能处理的最大并发数是5。
          containers:
          - image: registry-vpc.{REGION-ID}.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 # {REGION-ID}为对应集群所在的地域,如cn-hangzhou。
            env:
            - name: TARGET
              value: "Knative"

    若目标服务的状态列显示成功,表明服务已部署成功。

  4. 在服务管理页面的默认域名和访问网关列,分别获取helloworld-go服务的域名和网关地址。

  5. 执行以下命令,访问helloworld-go服务。

    curl -H "host: helloworld-go.default.example.com" http://8.141.XX.XX # 网关IP和域名请以您的实际数据为准。

    预期输出:

    Hello Knative!

步骤三:基于并发数实现自动弹性

  1. 安装Hey压测工具。

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

  2. 执行以下命令,对服务执行压测。

    # 发送100000个请求,并发数为50,请求超时时间为180秒。
    hey -n 100000 -c 50 -t 180 -host "helloworld-go.default.example.com" "http://8.141.XX.XX"

    预期输出:

    Summary:
      Total:        86.0126 secs
      Slowest:      0.1672 secs
      Fastest:      0.0276 secs
      Average:      0.0337 secs
      Requests/sec: 1162.6199
      
      Total data:   1500000 bytes
      Size/request: 15 bytes
    
    Response time histogram:
      0.028 [1]     |
      0.042 [95291] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
      0.056 [4573]  |■■
      0.069 [64]    |
      0.083 [19]    |
      0.097 [2]     |
      0.111 [0]     |
      0.125 [0]     |
      0.139 [18]    |
      0.153 [23]    |
      0.167 [9]     |
    
    
    Latency distribution:
      10% in 0.0294 secs
      25% in 0.0305 secs
      50% in 0.0327 secs
      75% in 0.0367 secs
      90% in 0.0386 secs
      95% in 0.0405 secs
      99% in 0.0433 secs
    
    Details (average, fastest, slowest):
      DNS+dialup:   0.0000 secs, 0.0276 secs, 0.1672 secs
      DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0000 secs
      req write:    0.0000 secs, 0.0000 secs, 0.0009 secs
      resp wait:    0.0336 secs, 0.0276 secs, 0.1671 secs
      resp read:    0.0000 secs, 0.0000 secs, 0.0009 secs
    
    Status code distribution:
      [200] 100000 responses

    输出结果表明,持续发送了100000个请求,请求成功率为100%。

  3. 执行如下命令,实时观察Pod的扩缩容情况。

    说明

    这个命令会持续运行,直到您手动停止它。如果您只想观察一段时间,可以按Ctrl + C组合键来终止命令的运行。

    kubectl get pods --watch

    image.png

(可选)步骤四:查看服务监控数据

Knative提供开箱即用的可观测能力,在Knative页面,单击监控大盘页签,即可查看目标Knative服务的监控数据情况。如何开启Knative监控大盘,请参见查看Knative服务监控大盘。

相关文档

  • 您可以为Knative服务启用自定义域名,请参见使用自定义域名。

  • 您可以为Knative服务配置HTTPS证书访问,请参见配置HTTPS证书访问。

  • 您可以在Knative中部署gRPC服务,提升网络效率,请参见在Knative中部署gRPC服务。

  • 您可以配置探针(Probe),监测Knative服务的健康状态和可用性,请参见在Knative中配置端口探测。

  • 如果您的ECI实例有连接公网的需求,您需要绑定EIP,请参见为ECI绑定EIP实现公网访问。

相关文章

为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号