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定時彈性的能力,請參見Knative結合AHPA實現基于RPS的定時彈性。