AHPA(Advanced Horizontal Pod Autoscaler)可以根據歷史指標(RPS、並發數、CPU、Memory指標)彈性預測未來負載的情況,提前進行彈性規劃,減少彈性滯後的問題,同時也支援根據時間段設定Pod最大和最小副本數。結合Cron運算式,您還可以指定在某些時間區間內,擴縮容區間是什麼,即最大最小副本數分別為多少。
前提條件
步驟一:通過AHPA配置彈性指標
您可以參見下方YAML檔案建立AHPA設定檔,並部署到叢集中。
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscalerTemplate
metadata:
name: ahpa-demo
spec:
metrics:
- type: Resource
resource:
name: rps
target:
type: Utilization
averageUtilization: 10 # 目前閾值,10表示RPS使用目標閾值是10。
maxReplicas: 50 # 定義了Pod最大副本數為50。
minReplicas: 0 # 定義了Pod最小副本數為0。
prediction:
quantile: 95 # 表示預測使用95%的信賴度進行預測。
scaleUpForward: 180 # 表示向前預測的時間範圍為180秒。
# 在2023-06-01 00:00:00~2123-06-01 00:00:00這個時間範圍內,Pod副本數的數量將受到AHPAT中定義的最大和最小副本數的限制。
instanceBounds:
- startTime: "2023-06-01 00:00:00"
endTime: "2123-06-01 00:00:00"
bounds:
# 在0-6小時的時間段內,最小副本數為0,最大副本數為50。
- cron: '* 0-6 ? * *'
maxReplicas: 50
minReplicas: 0
# 在7-9小時的時間段內,最小副本數為5,最大副本數為50。
- cron: '* 7-9 ? * *'
maxReplicas: 50
minReplicas: 5
# 在10-16小時的時間段內,最小副本數為10,最大副本數為50。
- cron: '* 10-16 ? * *'
maxReplicas: 50
minReplicas: 10
# 在17-23小時的時間段內,最小副本數為2,最大副本數為50。
- cron: '* 17-23 ? * *'
maxReplicas: 50
minReplicas: 2
參數 | 是否必選 | 說明 |
| 必選 | 用於配置彈性Metrics 。當前支援RPS、並發數、CPU、Memory指標。 |
| 必選 | 最大擴容執行個體數。 |
| 必選 | 最小縮容執行個體數。 |
| 可選 | 擴縮容時間段執行個體數邊界。
|
| 可選 | 在不同的時間範圍內Pod副本數的最小值和最大值。
|
Cron運算式中各個欄位的詳細說明
Cron運算式的欄位解釋如下,更多資訊,請參見Cron運算式。
欄位 | 特定字元 | 是否必選 | 說明 |
分(Minutes) | * / , - | 必選 | 取值範圍為[0,59]。 |
時(Hours) | * / , - | 必選 | 取值範圍為[0,23]。 |
日(Day of month) | * / , – ? | 必選 | 取值範圍為[1,31]。 |
月(Month) | * / , - | 必選 | 取值範圍為[1,12]或者JAN~DEC。 說明 JAN~DEC欄位的值不區分大小寫。 |
星期(Day of week) | * / , – ? | 可選 | 取值範圍為[0,6]或者SUN~SAT。 說明
|
Cron運算式中各個字元代表的意義如下:
星號(*):所有可能的值。例如
*
表示匹配所有分鐘和小時。斜杠(/):步長,例如
/5
表示每隔5個時間單位。英文半形逗號(,):分隔字元,例如
1,3,5
表示匹配1、3、5等值。破折號(-)範圍,例如
1-5
表示匹配1到5。英文半形問號(?):僅在日(Day of month)和星期(Day of week)欄位中使用,表示不指定值。
步驟二:建立Knative服務並指定使用AHPA彈性策略
配置完彈性策略之後,您可以通過Knative服務使用該定時彈性策略。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Knative頁面的服務管理頁簽下,選擇命名空間為default,然後單擊使用模板建立,將以下YAML樣本粘貼至模板,最後單擊建立,建立一個名為helloworld-go-demo的服務。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go-demo spec: template: metadata: annotations: autoscaling.knative.dev/class: ahpa.autoscaling.knative.dev # 指定AHPA彈性外掛程式。 autoscaling.knative.dev.alibabacloud/ahpa-template: "ahpa-demo" # 注意這裡引用的AHPA模版參數修改時,關聯的revision會自動修改彈性策略。 spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"
服務建立成功後,請擷取並記錄服務網關地址和網域名稱,供步驟三:訪問服務時使用。
步驟三:訪問服務
執行如下命令,訪問服務。
# helloworld-go-demo.default.example.com為服務的預設網域名稱。
# alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com為服務對應的訪問網關。
curl -H "Host: helloworld-go-demo.default.example.com" http://alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com
預期輸出:
Hello Knative!
(可選)步驟四:結果驗證
在Knative的監控大盤頁面,可查看Knative服務的執行個體擴縮容趨勢。關於Knative監控大盤的更多資訊,請參見查看Knative服務監控大盤。
當Knative應用縮容到0且沒有Pod執行個體時,Prometheus無法採集Pod的並發請求數、Pod每秒請求數等指標。只有訪問Knative應用Pod後,控制台才會展示這些指標。
當Knative應用沒有縮容到0時,無需訪問Knative應用Pod,控制台便會展示Pod的並發請求數、Pod每秒請求數等指標。
相關文檔
您可以基於Pod並發數、RPS配置自動擴縮容,請參見基於流量請求數實現服務自動擴縮容。