Knative Serverless支持AHPA(Advanced Horizontal Pod Autoscaler)的弹性能力,当应用所需资源具备周期性时,可通过弹性预测,预热资源,解决您在使用Knative中遇到的冷启动问题。本文介绍如何在Knative中使用AHPA弹性预测功能。
步骤一:安装Application Intelligence Controller
在组件管理页面安装Application Intelligence Controller。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择。
- 在组件管理页面,单击其他页签,然后单击Application Intelligence Controller组件的安装。
- 在安装组件Application Intelligence Controller对话框中,单击确定。
步骤二:配置Prometheus指标采集
通过Prometheus采集Knative服务的RT、RPS指标数据。
一、设置采集规则
- 登录ARMS控制台。
- 在左侧导航栏选择。
- 在顶部菜单栏选择目标集群所在的地域,然后单击实例名称列进入目标实例页面。
- 在左侧导航栏选择服务发现,然后单击配置页签。
- 在配置页签,单击自定义服务发现,然后单击添加。
- 在添加自定义服务发现对话框中,设置采集规则。
采集规则配置示例如下:
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
二、配置Prometheus数据源
- 登录ARMS控制台。
- 在左侧导航栏选择。
- 在Prometheus监控页面左上角选择Prometheus实例所在的地域,然后选择实例类型为Prometheus for 容器服务的目标实例名称,进入对应实例页面。
- 在左侧导航栏单击设置,复制HTTP API地址下的公网地址。
- 在HTTP API地址下单击生成token,获取Prometheus实例的鉴权Token。
- 使用以下内容,创建application-intelligence.yaml,在集群中设置Prometheus查询地址。
apiVersion: v1
kind: ConfigMap
metadata:
name: application-intelligence
namespace: kube-system
data:
armsUrl: "https://cn-hangzhou.arms.aliyuncs.com:9443/api/v1/prometheus/da9d7dece901db4c9fc7f5b9c40****/158120454317****/cc6df477a982145d986e3f79c985a****/cn-hangzhou"
token: "****"
部分参数说明如下:
armsUrl
:用于设置ARMS Prometheus的访问地址,值为第4步获取的公网地址。
token
:用于设置访问鉴权Token,值为第5步获取的鉴权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数据对比。
