Knative Serverless支持AHPA(Advanced Horizontal Pod Autoscaler)的弹性能力,当应用所需资源具备周期性变化时,可通过弹性预测,预热资源,缓解您在使用Knative时遇到的冷启动问题。本文介绍如何在Knative中使用AHPA弹性预测功能。
前提条件
已部署Knative。具体操作,请参见部署Knative。
已开启Prometheus监控。具体操作,请参见阿里云Prometheus监控。
步骤一:安装AHPA Controller
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面,单击其他页签或在页面右上方搜索AHPA Controller,然后在AHPA Controller卡片单击安装。
在安装组件对话框,单击确定。
步骤二:配置Prometheus指标采集
通过Prometheus采集Knative服务的RT、RPS指标数据。
1、设置采集规则
登录ARMS控制台。
在左侧导航栏选择 ,进入可观测监控 Prometheus 版的实例列表页面。
在顶部菜单栏选择目标集群所在的地域。
在实例列表页面,单击目标实例名称,进入目标实例页面。
在左侧导航栏选择服务发现,然后单击配置页签,在配置页签下,单击自定义服务发现,然后单击添加。
在添加自定义服务发现对话框中,设置采集规则。
采集规则配置示例如下:
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数据源
登录ARMS控制台。
在左侧导航栏选择 ,进入可观测监控 Prometheus 版的实例列表页面。
在顶部菜单栏选择目标集群所在的地域。
在实例列表页面,单击目标实例名称,进入目标实例详情页面。
在左侧导航栏单击设置,复制HTTP API地址下的公网地址。
在HTTP API地址下单击生成token,获取Prometheus实例的鉴权Token。
使用以下内容,创建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: "****"
执行以下命令,部署ConfigMap。
kubectl apply -f application-intelligence.yaml
步骤三:创建Knative服务
在Knative Service指定使用AHPA弹性策略。
使用以下内容,创建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最终决定是否生效。
执行以下命令,开启AHPA弹性策略。
kubectl apply -f autoscale-go.yaml
执行结果
Knative Service开启AHPA弹性后,您可以看到弹性预测生效前后的RT数据对比。
相关文档
阿里云Prometheus监控提供一键安装AHPA组件功能,并提供开箱即用的专属监控大盘。详细信息,请参见为AHPA开启Prometheus大盘。
如何将Knative和AHPA结合从而拥有基于RPS定时弹性的能力,请参见基于AHPA实现定时自动扩缩容。