對於Web服務、訊息處理等應用,其業務負載往往與QPS、隊列長度等自訂指標直接相關,僅依賴CPU或記憶體進行擴縮容可能導致資源浪費或響應延遲。通過配置AHPA,可利用阿里雲Prometheus採集到的業務指標作為Auto Scaling的依據,更精準地匹配真實業務流量。
工作原理
|
準備工作
已參見部署AHPA部署AHPA組件並配置Prometheus資料來源。
步驟一:部署應用及ServiceMonitor
首先,需要一個能夠暴露自訂指標的樣本應用,並配置參數,讓Prometheus能夠發現其相關資源。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在無狀態頁面,單擊使用YAML建立資源,按照頁面指引完成如下YAML的部署:部署
sample-app應用、為其提供叢集內訪問的Service以及用於指標採集的ServiceMonitor。Deployment
此容器在8080連接埠的
/metrics路徑下暴露自訂指標requests_per_second,用於標識每秒訪問次數。Service
為Deployment建立一個叢集內穩定的訪問地址。
ServiceMonitor
建立後可啟動指標採集流程。ServiceMonitor目前已預設啟用,如需檢查啟用狀態,請參見啟用功能。
步驟二:部署Metrics Adapter
Metrics Adapter是串連AHPA與Prometheus的橋樑。部署組件後,還需配置將其串連到ARMS Prometheus執行個體。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
單擊建立,按照頁面搜尋並部署ack-alibaba-cloud-metrics-adapter。
Chart 版本:推薦使用最新版本。
參數配置:在Chart YAML中,在參數地區配置
prometheus.url和prometheus.prometheusHeader,然後單擊確定。prometheus.url:阿里雲Prometheus監控的HTTP API地址(Grafana 讀取地址)。擷取方式請參見如何擷取Prometheus資料請求URL。prometheus.prometheusHeader:
步驟三:為Metrics Adapter配置自訂指標
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
定位alibaba-cloud-metrics-adapter,單擊操作列的更新。
將以下YAML內容複寫並覆蓋模板中對應的參數,然後單擊更新。
樣本說明中的
requests_per_second需修改為實際對應的指標,對應Prometheus每秒請求數指標。...... prometheus: adapter: rules: custom: - metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) name: as: requests_per_second resources: overrides: namespace: resource: namespace seriesQuery: requests_per_second # 設定指標名稱,請確保阿里雲Prometheus中指標和此處一致。 ......通過Custom Metrics指標查詢方式,查看可用指標詳情。
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/requests_per_second"預期輸出:
{"kind":"ExternalMetricValueList","apiVersion":"external.metrics.k8s.io/v1beta1","metadata":{},"items":[{"metricName":"requests_per_second","metricLabels":{},"timestamp":"2025-10-15T07:57:00Z","value":"1"}]}
步驟四:建立AHPA規則並驗證彈性效果
接下來,建立AHPA規則來自動化伸縮過程,並進行壓測驗證。
建立AHPA資源。
使用以下YAML建立一個AHPA資源:當
sample-app服務關聯的requests_per_second指標的平均值(AverageValue)超過10時,觸發擴容;低於該值則縮容。設定
external.metric, 指定指標名稱以及matchLabels。指標名稱與配置自訂指標中的指標名稱保持一致。這裡指定自訂指標為requests_per_second。設定目標閾值,這裡指定
AverageValue為10, 表示每秒請求數超過10就開始擴容。
壓測後,查看AHPA的狀態。
kubectl get ahpa預期輸出:
NAME STRATEGY PERIODICITY REFERENCE METRIC TARGETS DESIREDPODS REPLICAS MINPODS MAXPODS AGE customer-deployment observer Deployment/sample-app requests_per_second 16/10 2 1 1 50 102sTARGETS:顯示當前指標值16,目標值為10。DESIREDPODS:AHPA根據當前值(16) / 目標值(10) = 2,計算出期望的副本數為2。REPLICAS:顯示sample-app的實際副本數。由於當前 AHPA 的
STRATEGY為observer,只進行計算和觀察,不執行擴縮容操作。因此,儘管DESIREDPODS為 2,但REPLICAS仍然為1。
也可以通過
kubectl get deployment sample-app命令來確認Pod副本數的即時變化。
生產環境使用建議
維度 | 說明 |
彈性指標選擇 | 使用能反映真實負載的平滑指標,而非瞬時值,避免因流量毛刺(瞬間抖動)導致不必要的擴縮容。 |
擴縮策略配置 |
|
監控與警示 | 對AHPA運行狀態建立警示,以便及時發現潛在問題,如容量瓶頸、策略配置不合理或上遊流量異常。 |
