分布式應用管理中,Auto Scaling是很重要的一個營運能力。Auto Scaling能夠感知應用內各個執行個體的狀態,並根據執行個體狀態動態實現應用擴容和縮容。該功能在保證服務品質的同時,還能提升應用的可用率。本文介紹如何在EDAS控制台配置自動Auto Scaling策略。
背景資訊
互連網、遊戲類等應用在促銷活動期間容易出現突發性流量洪流,但SLA和資源成本不易平衡,極易造成系統響應延遲、系統癱瘓等問題。EDAS繼承阿里巴巴應對雙十一的流量洪流技術,提供秒級自動彈性功能,保證SLA的同時也節省執行個體保有成本。多適用於互連網、遊戲以及社交平台等行業。
使用限制
- 部署在EDAS的Container ServiceK8s叢集和Serverless K8s叢集中的應用,可以配置彈性策略。
- 執行應用變更(如部署應用、應用擴縮、變更規格等)時,無法配置彈性策略。應用處於變更中時,彈性策略將會自動關閉,待變更完成後,自動回復彈性策略。
注意事項
- 如果應用配置了Service、SLB,在發生Auto Scaling時,EDAS會自動將擴容的應用執行個體添加到後端伺服器列表,然後將縮容的執行個體從後端伺服器列表中移除。
- 如果應用配置了持久化儲存,在發生Auto Scaling時,EDAS會自動將擴容的應用執行個體與配置的持久化儲存進行關聯。
- Kubernetes叢集不具備節點自動擴容能力時,應用彈性擴容可能無法工作,您可以前往叢集頁面配置節點Auto Scaling。
操作步驟
登入EDAS控制台。
在左側導覽列,單擊,在頂部功能表列選擇地區,並在頁面上方選擇微服務空間,然後在應用列表頁面單擊具體的應用程式名稱。
- 在應用總覽頁面的左側導覽列,選擇,然後單擊+添加彈性策略。
- 在策略名稱稱的文字框,輸入自訂的彈性策略名稱稱。說明 策略名稱稱必須以字母開頭,允許數字、字母、短劃線(-)或底線(_)組成。最大長度30個字元。
- 在觸發條件地區,單擊新增觸發器,然後在右側彈出的新增觸發器面板配置觸發器規則。配置完成後,單擊確定。重要在彈性策略內,您可以配置多個觸發器,EDAS將根據觸發器自動為您擴容和縮容應用執行個體。
- 當K8s叢集版本低於V1.15.0時,任意一條觸發器運行失敗,將不會進行擴縮容。
- 當K8s叢集版本為V1.15.0或以上版本時,任意一條觸發器運行成功,即可成功擴縮容。當多條觸發器運行成功時,應用目標執行個體數=Max(觸發器1目標執行個體數,觸發器2目標執行個體數,...,觸發器N目標執行個體數)。
- 觸發器名稱:必須以字母開頭,允許數字、字母、短劃線(-)或底線(_)組成。最大長度30個字元。
- 觸發器類型:您可選擇不同的觸發器類型。
- 定時觸發:適用於負載強周期型應用,例如白天(08:00~20:00)負載高、 晚上(20:00~08:00)負載低或工作日(周一~周五)負載高、周末(周六~周日)負載低的周期性應用。
配置項 描述 周期 在下拉式清單選擇每天、每周或每月。 說明 選擇每周後,根據需求可選擇具體日期配置觸發規則。如果一周內不同日期的單天內觸發規則不同,可通過建立多條定時觸發器來實現。單天內的觸發時間 單擊添加建立每天的觸發時間和執行個體數。 重要- 如果錯過設定的觸發時刻,定時策略需要等到下一周期才會被觸發。
- 兩個鄰近觸發時間間隔要大於10分鐘。
- 兩個鄰近觸發時刻設定的執行個體數變化需要大於10%,即
Pod2 / Pod1 > 1.1或者Pod2/ Pod1 < 0.9。其中Pod1是前一個時刻設定的執行個體數,Pod2是後一個時刻設定的執行個體數。
之後保持執行個體數 根據實際情況設定彈性策略執行後保持的執行個體數,可設定範圍為0~50。 開啟執行個體數量保持 當前僅支援啟用周期類型為每天的定時彈性策略。 - 勾選後,若同時設定了指標觸發彈性策略,在設定的時間段內,以兩者中較大值為準。
- 若不勾選,只會在設定的時刻執行一次伸縮動作,之後可能會受其他指標觸發策略影響,執行個體數發生變化。
- 指標觸發:指標來源分為系統指標和Prometheus。適用於應用指標與容量線性相關型應用,例如通過壓測確定應用單一實例可以處理200 QPS,當QPS達到1200的時候,將擴容至6個執行個體的應用。
- 系統指標:支援選擇應用提供服務平均每秒請求量、應用提供服務平均回應時間(毫秒)、應用平均CPU使用率、應用平均記憶體使用量率和關聯應用執行個體數五種指標名。
配置項 描述 推薦使用情境 應用提供服務平均每秒請求量 基於過去1分鐘資料統計,該應用每個執行個體平均每秒接收到的服務要求量,資料來源來自EDAS產品應用監控。 適用於微服務流量的應用。 應用提供服務平均回應時間(毫秒) 基於過去1分鐘資料統計,該應用處理請求的平均回應時間(毫秒),資料來源來自EDAS產品應用監控。 適用於微服務響應延遲有要求的應用。 應用平均CPU使用率 基於即時資料統計,該應用每個執行個體平均CPU使用率,資料來源來自K8s自身監控。 適用於絕大多數應用。 應用平均記憶體使用量率 基於即時資料統計,該應用每個執行個體平均記憶體使用量率,資料來源來自K8s自身監控。 適用於可以歸還記憶體給作業系統的應用(Java應用不適用)。 關聯應用執行個體數 以關聯應用運行執行個體數與當前應用運行執行個體數的比值,作為彈性指標資料,要求應用位於同一叢集。 適用於具有依賴關係的應用,例如微服務應用。 - Prometheus:分為內建Prometheus和自訂Prometheus。
- 內建Prometheus:託管ACK叢集在匯入EDAS時,預設安裝Prometheus監控執行個體,無需進行額外配置,EDAS服務端將自動探索且配置。
- 自訂Prometheus:允許填入其他Prometheus執行個體訪問地址。
配置項 描述 自訂Prometheus地址 - 登入Prometheus控制台。
- 在左側導覽列,單擊監控列表,進入Prometheus監控的執行個體列表頁面。
- 根據需要選擇對應的Prometheus監控執行個體,其中
arms_metrics_{地區ID}格式的執行個體提供應用監控資料。 - 在執行個體詳情頁面左側導覽列,單擊設定,擷取HTTP API地址(Grafana 讀取地址)。單擊產生token擷取Token值並複製。說明 建議使用內網地址作為自訂Prometheus地址。
鑒權模式 目前支援無鑒權與Authorization鑒權模式。選擇Authorization模式時,請填寫上一步複製的Token值。 指標查詢語句 標準Prometheus查詢語句,該語句查詢獲得的資料將作為指標值。說明建議使用的情境:- 基於Ingress QPS指標彈性。
- 基於JVM活躍線程數指標彈性。
- 基於JVM記憶體使用量率指標彈性。
- 基於自訂業務指標彈性。
樣本語句:
- sum(rate(nginx_ingress_controller_requests{host="example.com", method="GET", status=200}[1m]))
該語句表示過去1分鐘,網域名稱為
example.com,要求方法為GET,狀態代碼為200的Nginx Ingress請求的平均QPS。 - sum(arms_threadpool_active_size{pid="72984680-5f82-48c6-8ece-5d14a2e1****"})該語句表示應用ID為
72984680-5f82-48c6-8ece-5d14a2e1****的線程池活躍線程數量。說明 該語句查詢的指標資料來源於ARMS儲存應用監控的Prometheus執行個體。
- 目標值:設定期望的監控指標目標值。系統會幫您自動擴縮執行個體數,無限接近您設定的目標值。說明 當應用監控指標的實際值大於目標值時,系統會自動幫您縮容執行個體。反之,系統會自動幫您擴容執行個體。
- 系統指標:支援選擇應用提供服務平均每秒請求量、應用提供服務平均回應時間(毫秒)、應用平均CPU使用率、應用平均記憶體使用量率和關聯應用執行個體數五種指標名。
- 定時觸發:適用於負載強周期型應用,例如白天(08:00~20:00)負載高、 晚上(20:00~08:00)負載低或工作日(周一~周五)負載高、周末(周六~周日)負載低的周期性應用。
- 配置最大應用執行個體個數和最小應用執行個體個數。
- 最大應用執行個體個數:可設定的範圍為2~1000。觸發Auto Scaling條件後,應用擴容,其執行個體數可達到最大值。
- 最小應用執行個體個數:可設定的範圍為0~1000。觸發Auto Scaling條件後,應用縮容,其執行個體數可達到最小值。
說明- 應用目標執行個體數=Max(觸發器1目標執行個體數,觸發2目標執行個體數,...,觸發器N目標執行個體數)
- 當目標執行個體數大於當前執行個體數時,EDAS對應用進行擴容,其應用執行個體數不超過所設的最大應用執行個體個數;反之,則進行縮容,其應用執行個體數不低於所設的最小應用執行個體個數。
- 最小應用執行個體個數不得等於最大應用執行個體個數。
- 建議當前執行個體數在您設定的最小應用執行個體個數和最大應用執行個體個數範圍內。如果不在範圍內,儲存彈性策略時會提示定時觸發器保持執行個體數已超出最大最小執行個體數範圍,但仍能儲存。
- 可選:單擊自訂彈性策略開關,啟用Auto Scaling策略並配置擴容和縮容行為。
- 冷卻時間(s):根據需要設定冷卻時間。單位為秒,範圍為0~3600。擴容行為冷卻時間預設為0秒,縮容行為冷卻時間預設為300秒。
- 擴容行為:在擴容行為地區,單擊添加擴容策略,在添加擴容策略對話方塊,配置擴容策略,然後單擊確定。
配置項 描述 策略類型 根據需要選擇副本個數或百分比作為策略類型。支援Pods和Percent類型。 - Pods:表示副本個數類型。
- Percent:表示百分比類型。
最大步長/百分比 根據選擇的策略類型設定該參數值。例如,策略類型選擇Pods,則此處值為Pod數量。 時間周期(s) 策略執行循環。例如,策略類型選擇Percent,步長/百分比設定為10,時間周期為60秒,則允許在一分鐘內最多擴容或縮容當前副本個數的百分之十。 單擊同步至縮容策略,可將配置的擴容策略同步至縮容策略。
- 縮容行為:請參見擴容行為。
- 選擇策略:支援Min、Max和Disabled三種策略。預設為Max。
- 完成以上配置成後,單擊儲存。
- 在彈性策略頁面右上方,單擊啟用。觸發彈性策略後,如果EDAS根據所設定的策略對應用執行個體進行擴容或縮容,表示自動Auto Scaling原則設定成功。
結果驗證
啟用彈性策略後,EDAS將自動依據彈性策略進行應用執行個體擴縮容,您可以通過以下步驟來查看擴縮容的詳細事件記錄。
- 在Auto Scaling頁面的右上方,單擊事件。
- 在事件中心頁面右上方,設定查詢事件的時間範圍。
- 在事件中心頁面,單擊普通視圖頁簽。
- 在普通視圖頁簽,在事件來源的下拉式清單,選擇K8s事件。
- 在事件類型的輸入框,填寫EdasHPAScaled、EdasHPAReachBound或EdasHPAClosed。
- EdasHPAScaled:彈性擴縮容事件。
- EdasHPAReachBound:彈性到達上下限事件。
- EdasHPAClosed:彈性關閉事件。
- 開啟顯示進階選項開關,選擇對應的叢集ID,並且置應用PID為空白,其他配置項無需設定,然後單擊Search。

相關操作
彈性策略啟用後,您可以對彈性策略進行刪除、停用、啟用和編輯,還可以進行一系列應用管理操作。
說明 彈性策略啟用後,無法對應用執行停用、啟動和手動擴縮操作。如果必須執行,請先停止彈性策略。
後續步驟
您可前往事件中心訂閱應用擴縮容相關事件,當應用發生擴縮容、擴縮容失敗(自動擴縮達到設定的最大或最小執行個體數),您都會接收到訊息通知。訂閱Auto Scaling相關的K8s事件,請參見事件中心。