將Knative和AHPA結(jié)合實(shí)現(xiàn)定時自動擴(kuò)縮容
AHPA(Advanced Horizontal Pod Autoscaler)可以根據(jù)歷史指標(biāo)(RPS、并發(fā)數(shù)、CPU、Memory指標(biāo))彈性預(yù)測未來負(fù)載的情況,提前進(jìn)行彈性規(guī)劃,減少彈性滯后的問題,同時也支持根據(jù)時間段設(shè)置Pod最大和最小副本數(shù)。結(jié)合Cron表達(dá)式,您還可以指定在某些時間區(qū)間內(nèi),擴(kuò)縮容區(qū)間是什么,即最大最小副本數(shù)分別為多少。
前提條件
步驟一:通過AHPA配置彈性指標(biāo)
您可以參見下方Y(jié)AML文件創(chuàng)建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使用目標(biāo)閾值是10。
maxReplicas: 50 # 定義了Pod最大副本數(shù)為50。
minReplicas: 0 # 定義了Pod最小副本數(shù)為0。
prediction:
quantile: 95 # 表示預(yù)測使用95%的置信度進(jìn)行預(yù)測。
scaleUpForward: 180 # 表示向前預(yù)測的時間范圍為180秒。
# 在2023-06-01 00:00:00~2123-06-01 00:00:00這個時間范圍內(nèi),Pod副本數(shù)的數(shù)量將受到AHPAT中定義的最大和最小副本數(shù)的限制。
instanceBounds:
- startTime: "2023-06-01 00:00:00"
endTime: "2123-06-01 00:00:00"
bounds:
# 在0-6小時的時間段內(nèi),最小副本數(shù)為0,最大副本數(shù)為50。
- cron: '* 0-6 ? * *'
maxReplicas: 50
minReplicas: 0
# 在7-9小時的時間段內(nèi),最小副本數(shù)為5,最大副本數(shù)為50。
- cron: '* 7-9 ? * *'
maxReplicas: 50
minReplicas: 5
# 在10-16小時的時間段內(nèi),最小副本數(shù)為10,最大副本數(shù)為50。
- cron: '* 10-16 ? * *'
maxReplicas: 50
minReplicas: 10
# 在17-23小時的時間段內(nèi),最小副本數(shù)為2,最大副本數(shù)為50。
- cron: '* 17-23 ? * *'
maxReplicas: 50
minReplicas: 2
參數(shù) | 是否必選 | 說明 |
| 必選 | 用于配置彈性Metrics 。當(dāng)前支持RPS、并發(fā)數(shù)、CPU、Memory指標(biāo)。 |
| 必選 | 最大擴(kuò)容實(shí)例數(shù)。 |
| 必選 | 最小縮容實(shí)例數(shù)。 |
| 可選 | 擴(kuò)縮容時間段實(shí)例數(shù)邊界。
|
| 可選 | 在不同的時間范圍內(nèi)Pod副本數(shù)的最小值和最大值。
|
Cron表達(dá)式中各個字段的詳細(xì)說明
Cron表達(dá)式的字段解釋如下,更多信息,請參見Cron定時任務(wù)。
字段 | 特定字符 | 是否必選 | 說明 |
分(Minutes) | * / , - | 必選 | 取值范圍為[0,59]。 |
時(Hours) | * / , - | 必選 | 取值范圍為[0,23]。 |
日(Day of month) | * / , – ? | 必選 | 取值范圍為[1,31]。 |
月(Month) | * / , - | 必選 | 取值范圍為[1,12]或者JAN~DEC。 說明 JAN~DEC字段的值不區(qū)分大小寫。 |
星期(Day of week) | * / , – ? | 可選 | 取值范圍為[0,6]或者SUN~SAT。 說明
|
Cron表達(dá)式中各個字符代表的意義如下:
星號(*):所有可能的值。例如
*
表示匹配所有分鐘和小時。斜杠(/):步長,例如
/5
表示每隔5個時間單位。英文半角逗號(,):分隔符,例如
1,3,5
表示匹配1、3、5等值。破折號(-)范圍,例如
1-5
表示匹配1到5。英文半角問號(?):僅在日(Day of month)和星期(Day of week)字段中使用,表示不指定值。
步驟二:創(chuàng)建Knative服務(wù)并指定使用AHPA彈性策略
配置完彈性策略之后,您可以通過Knative服務(wù)使用該定時彈性策略。
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在Knative頁面的服務(wù)管理頁簽下,選擇命名空間為default,然后單擊使用模板創(chuàng)建,將以下YAML示例粘貼至模板,最后單擊創(chuàng)建,創(chuàng)建一個名為helloworld-go-demo的服務(wù)。
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模版參數(shù)修改時,關(guān)聯(lián)的revision會自動修改彈性策略。 spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"
服務(wù)創(chuàng)建成功后,請獲取并記錄服務(wù)網(wǎng)關(guān)地址和域名,供步驟三:訪問服務(wù)時使用。
步驟三:訪問服務(wù)
執(zhí)行如下命令,訪問服務(wù)。
# helloworld-go-demo.default.example.com為服務(wù)的默認(rèn)域名。
# alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com為服務(wù)對應(yīng)的訪問網(wǎng)關(guān)。
curl -H "Host: helloworld-go-demo.default.example.com" http://alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com
預(yù)期輸出:
Hello Knative!
(可選)步驟四:結(jié)果驗(yàn)證
在Knative的監(jiān)控大盤頁面,可查看Knative服務(wù)的實(shí)例擴(kuò)縮容趨勢。關(guān)于Knative監(jiān)控大盤的更多信息,請參見查看Knative服務(wù)監(jiān)控大盤。
當(dāng)Knative應(yīng)用縮容到0且沒有Pod實(shí)例時,Prometheus無法采集Pod的并發(fā)請求數(shù)、Pod每秒請求數(shù)等指標(biāo)。只有訪問Knative應(yīng)用Pod后,控制臺才會展示這些指標(biāo)。
當(dāng)Knative應(yīng)用沒有縮容到0時,無需訪問Knative應(yīng)用Pod,控制臺便會展示Pod的并發(fā)請求數(shù)、Pod每秒請求數(shù)等指標(biāo)。
相關(guān)文檔
您可以基于Pod并發(fā)數(shù)、RPS配置自動擴(kuò)縮容,請參見基于流量請求數(shù)實(shí)現(xiàn)服務(wù)自動擴(kuò)縮容。