全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:在Knative中使用AHPA弹性预测

更新时间:Feb 28, 2024

Knative Serverless支持AHPA(Advanced Horizontal Pod Autoscaler)的弹性能力,当应用所需资源具备周期性变化时,可通过弹性预测,预热资源,缓解您在使用Knative时遇到的冷启动问题。本文介绍如何在Knative中使用AHPA弹性预测功能。

前提条件

步骤一:安装AHPA Controller

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

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  3. 组件管理页面,单击其他页签或在页面右上方搜索AHPA Controller,然后在AHPA Controller卡片单击安装

  4. 在安装组件对话框,单击确定

步骤二:配置Prometheus指标采集

通过Prometheus采集Knative服务的RT、RPS指标数据。

1、设置采集规则

  1. 登录ARMS控制台
  2. 在左侧导航栏选择Prometheus监控 > 实例列表,进入可观测监控 Prometheus 版的实例列表页面。

  3. 在顶部菜单栏选择目标集群所在的地域。

  4. 实例列表页面,单击目标实例名称,进入目标实例页面。

  5. 在左侧导航栏选择服务发现,然后单击配置页签,在配置页签下,单击自定义服务发现,然后单击添加

  6. 添加自定义服务发现对话框中,设置采集规则。

    采集规则配置示例如下:

    job_name: queue-proxy
    scrape_interval: 3s
    scrape_timeout: 3s
    kubernetes_sd_configs:
    - role: pod
    relabel_configs:
    - source_labels:
      - __meta_kubernetes_pod_label_serving_knative_dev_revision
      - __meta_kubernetes_pod_container_port_name
      action: keep
      regex: .+;http-usermetric
    - source_labels:
      - __meta_kubernetes_namespace
      target_label: namespace
    - source_labels:
      - __meta_kubernetes_pod_name
      target_label: pod
    - source_labels:
      - __meta_kubernetes_service_name
      target_label: service

2、配置Prometheus数据源

  1. 登录ARMS控制台
  2. 在左侧导航栏选择Prometheus监控 > 实例列表,进入可观测监控 Prometheus 版的实例列表页面。

  3. 在顶部菜单栏选择目标集群所在的地域。

  4. 实例列表页面,单击目标实例名称,进入目标实例详情页面。

  5. 在左侧导航栏单击设置,复制HTTP API地址下的公网地址。

  6. 在HTTP API地址下单击生成token,获取Prometheus实例的鉴权Token。

  7. 使用以下内容,创建application-intelligence.yaml,在集群中设置Prometheus查询地址。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: application-intelligence
      namespace: kube-system
    data:
      prometheusUrl: "https://cn-hangzhou.arms.aliyuncs.com:9443/api/v1/prometheus/da9d7dece901db4c9fc7f5b9c40****/158120454317****/cc6df477a982145d986e3f79c985a****/cn-hangzhou"
      token: "****"

    部分参数说明如下:

    • prometheusUrl:用于设置阿里云Prometheus的访问地址,值为第4步获取的公网地址。

    • token:用于设置访问鉴权Token,值为第5步获取的鉴权Token。

  8. 执行以下命令,部署ConfigMap。

    kubectl apply -f application-intelligence.yaml

步骤三:创建Knative服务

在Knative Service指定使用AHPA弹性策略。

  1. 使用以下内容,创建autoscale-go.yaml

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: autoscale-go
      namespace: default
    spec:
      template:
        metadata:
          labels:
            app: autoscale-go
          annotations:
            autoscaling.knative.dev/class: ahpa.autoscaling.knative.dev
            autoscaling.knative.dev/target: "500"
            autoscaling.knative.dev/metric: "rt"
            autoscaling.knative.dev/minScale: "1"
            autoscaling.knative.dev/maxScale: "30"
            autoscaling.alibabacloud.com/scaleStrategy: "observer"
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/autoscale-go:0.1
                            

    参数

    说明

    autoscaling.knative.dev/class: ahpa.autoscaling.knative.dev

    指定弹性插件AHPA。

    autoscaling.knative.dev/metric: "rt"

    设置AHPA指标。目前仅支持响应时间RT。

    autoscaling.knative.dev/target: "500

    设置AHPA指标的阈值,本示例RT阈值为500,单位毫秒。

    autoscaling.knative.dev/minScale: "1"

    设置弹性策略实例数的最小值为1。

    autoscaling.knative.dev/maxScale: "30"

    设置弹性策略实例数的最大值为30。

    autoscaling.alibabacloud.com/scaleStrategy: "observer"

    设置弹性伸缩模式,默认值是observer

    • observer:表示只观察,但不做真正的伸缩动作。您可以通过这种方式观察AHPA的工作是否符合预期。由于预测需要历史7天的数据,因此创建服务默认是observer模式。

    • auto:表示由AHPA负责扩容和缩容,把AHPA指标和阈值输入到AHPA,AHPA最终决定是否生效。

  2. 执行以下命令,开启AHPA弹性策略。

    kubectl apply -f autoscale-go.yaml

执行结果

Knative Service开启AHPA弹性后,您可以看到弹性预测生效前后的RT数据对比。AHPA效果图.png

相关文档