在分布式應用管理中,彈性伸縮是較為重要的運維能力之一。彈性伸縮能夠感知應用內各個實例的狀態,并根據實例狀態動態實現應用擴容和縮容。該功能在保證服務質量的同時,還可以提升應用的可用率。本文介紹如何在EDAS控制臺配置自動彈性伸縮策略。
功能優勢
互聯網、游戲類等應用在促銷活動期間容易出現突發性流量洪流,但SLA和資源成本不易平衡,極易造成系統響應延遲、系統癱瘓等問題。EDAS繼承阿里巴巴應對雙十一的流量洪流技術,提供秒級自動彈性功能,保證SLA的同時也節省實例保有成本。多適用于互聯網、游戲以及社交平臺等行業。
使用限制
僅部署在EDAS的容器服務K8s集群和Serverless K8s集群中的應用,可以配置彈性策略。
執行應用變更(如部署應用、應用擴縮、變更規格等)時,無法配置彈性策略。應用處于變更中時,彈性策略將會自動關閉,待變更完成后,自動恢復彈性策略。
注意事項
如果應用配置了Service、SLB,在發生彈性伸縮時,EDAS會自動將擴容的應用實例添加到后端服務器列表,然后將縮容的實例從后端服務器列表中移除。
如果應用配置了持久化存儲,在發生彈性伸縮時,EDAS會自動將擴容的應用實例與配置的持久化存儲進行關聯。
Kubernetes集群不具備節點自動擴容能力時,應用彈性擴容可能無法工作。您可以前往集群頁面配置節點彈性伸縮。具體操作,請參見節點自動伸縮。
操作步驟
登錄EDAS控制臺。
在左側導航欄,單擊 ,在頂部菜單欄選擇地域,并在頁面上方選擇微服務空間,然后在應用列表頁面單擊具體的應用名稱。
在應用總覽頁面的左側導航欄,選擇 ,然后單擊+添加彈性策略。
在策略名稱的文本框,輸入自定義的彈性策略名稱。
在觸發條件區域,單擊新增觸發器,然后在右側彈出的新增觸發器面板配置觸發器規則。配置完成后,單擊確定。
重要在彈性策略內,您可以配置多個觸發器,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使用率(基于Request)、應用平均內存使用率(基于Request)和關聯應用實例數五種指標名。
配置項
描述
推薦使用場景
應用提供服務平均每秒請求量
基于過去1分鐘數據統計,該應用每個實例平均每秒接收到的服務請求量,數據源來自EDAS產品應用監控。
適用于微服務流量的應用。
應用提供服務平均響應時間(毫秒)
基于過去1分鐘數據統計,該應用處理請求的平均響應時間(毫秒),數據源來自EDAS產品應用監控。
適用于微服務響應延遲有要求的應用。
應用平均CPU使用率(基于Request)
基于實時數據統計,該應用每個實例平均CPU使用率,數據源來自K8s自身監控。應用平均CPU使用率基于應用配置的Request進行計算。
適用于絕大多數應用。
應用平均內存使用率(基于Request)
基于實時數據統計,該應用每個實例平均內存使用率,數據源來自K8s自身監控。
適用于可以歸還內存給操作系統的應用(Java應用不適用)。
關聯應用實例數
以關聯應用運行實例數與當前應用運行實例數的比值,作為彈性指標數據,要求應用位于同一集群。
適用于具有依賴關系的應用,例如微服務應用。
Prometheus:分為內置Prometheus和自定義Prometheus。
內置Prometheus:托管ACK集群在導入EDAS時,默認安裝Prometheus監控實例,無需進行額外配置,EDAS服務端將自動發現且配置。
自定義Prometheus:允許填入其他Prometheus實例訪問地址。
配置項
描述
自定義Prometheus地址
在左側導航欄,單擊監控列表,進入Prometheus監控的實例列表頁面。
根據需要選擇對應的Prometheus監控實例,其中
arms_metrics_{地域ID}
格式的實例提供應用監控數據。在實例詳情頁面左側導航欄,單擊設置,獲取HTTP API地址(Grafana 讀取地址)。單擊生成token獲取Token值并復制。
說明建議使用內網地址作為自定義Prometheus地址。
鑒權模式
目前支持無鑒權與Authorization鑒權模式。選擇Authorization模式時,請填寫上一步復制的Token值。
指標查詢語句
說明建議使用的場景:
基于Ingress QPS指標彈性。
基于JVM活躍線程數指標彈性。
基于JVM內存使用率指標彈性。
基于自定義業務指標彈性。
標準Prometheus查詢語句,該語句查詢獲得的數據將作為指標值。
示例語句:
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實例。
更多查詢語句與過濾標簽,可以訪問ARMS Grafana大盤進行調試。
預測指標:
配置項
描述
指標名
目前支持應用平均CPU利用率(基于Limit)。應用平均CPU使用率基于應用配置的CPU Limit計算。
預測模型
支持指標回放和智能預測(AHPA)兩種預測模型。
指標回放:以回放的歷史指標數據作為預測數據,適用于周期明顯的應用。使用時建議結合當前實時指標,即搭配系統指標進行彈性擴縮容。
智能預測(AHPA):使用ACK推出的AHPA進行指標預測。更多信息,請參見AHPA概述。
回放周期
預測模型選擇指標回放時,需配置該參數。
例如,應用的指標數據的周期為1天,填寫回放周期:1。
應用冷啟動時間
需根據應用冷啟動時間調整預測的指標數據。
在輸入框中設置應用冷啟動時間,單位:秒。您可單擊圖標,查看應用歷史啟動時間趨勢圖。
目標值:設置期望的監控指標目標值。系統會幫您自動擴縮實例數,無限接近您設置的目標值。
說明當應用監控指標的實際值大于目標值時,系統會自動幫您縮容實例。反之,系統會自動幫您擴容實例。
配置最大應用實例個數和最小應用實例個數。
最大應用實例個數:可設置的范圍為(2,1000)。觸發彈性伸縮條件后,應用擴容,其實例數可達到最大值。
最小應用實例個數:可設置的范圍為(0,1000)。觸發彈性伸縮條件后,應用縮容,其實例數可達到最小值。
說明應用目標實例數=Max(觸發器1目標實例數,觸發2目標實例數,...,觸發器N目標實例數)
當目標實例數大于當前實例數時,EDAS對應用進行擴容,其應用實例數不超過所設的最大應用實例個數;反之,則進行縮容,其應用實例數不低于所設的最小應用實例個數。
最小應用實例個數不得等于最大應用實例個數。
建議當前實例數在您設置的最小應用實例個數和最大應用實例個數范圍內。如果不在范圍內,保存彈性策略時會提示定時觸發器保持實例數已超出最大最小實例數范圍,但仍能保存。
可選:單擊自定義彈性策略開關,啟用彈性伸縮策略并配置擴容和縮容行為。
您可在配置擴縮行為(behavior)區域配置擴容行為或縮容行為,擴容行為或縮容行為均由三個部分組成:冷卻時間、擴容策略/縮容策略、選擇策略。擴容行為與縮容行為配置方法一致,本文以配置擴容行為進行說明。
冷卻時間(s):根據需要設置冷卻時間。單位為秒,范圍為(0,3600)。擴容行為冷卻時間默認為0秒,縮容行為冷卻時間默認為300秒。
擴容策略:在擴容行為區域,單擊添加擴容策略,在添加擴容策略對話框,配置擴容策略,然后單擊確定。
說明擴容行為用于限制自動彈性擴容時的速率,以防止過高的擴容速率對系統造成沖擊。多條擴容策略并行計算,根據選擇策略選擇合適的限制速率值。
配置項
描述
策略類型
根據需要選擇副本個數或百分比作為策略類型。支持Pods和Percent類型。
Pods:表示副本個數類型。
Percent:表示百分比類型。
最大步長/百分比
根據選擇的策略類型設置該參數值。例如,策略類型選擇Pods,則此處值為Pod數量。
時間周期(s)
當前策略計算限制值時回溯的歷史時長。例如,策略類型選擇Percent,步長/百分比設置為10,時間周期為60秒,則允許在過去一分鐘內最多擴容或縮容當前副本個數的百分之十。
單擊同步至縮容策略,可將配置的擴容策略同步至縮容策略。
選擇策略:支持Min、Max和Disabled三種策略。默認為Max。Disabled表示禁止擴容或縮容。
完成以上配置成后,單擊保存。
在彈性策略頁面右上角,單擊啟用。
觸發彈性策略后,如果EDAS根據所設置的策略對應用實例進行擴容或縮容,表示自動彈性伸縮策略設置成功。
結果驗證
啟用彈性策略后,EDAS將自動依據彈性策略進行應用實例擴縮容,您可以通過以下步驟來查看擴縮容的詳細事件記錄。
在彈性伸縮頁面的右上角,單擊事件。
在事件中心頁面右上角,設置查詢事件的時間范圍。
在事件中心頁面,單擊普通視圖頁簽。
在普通視圖頁簽,在事件來源的下拉列表,選擇K8s事件。
在事件類型的輸入框,填寫EdasHPAScaled、EdasHPAReachBound或EdasHPAClosed。
EdasHPAScaled:彈性擴縮容事件。
EdasHPAReachBound:彈性到達上下限事件。
EdasHPAClosed:彈性關閉事件。
打開顯示高級選項開關,選擇對應的集群ID,并且置應用PID為空,其他配置項無需設置,然后單擊Search。
相關操作
彈性策略啟用后,您可以對彈性策略進行刪除、停用、啟用和編輯,還可以進行一系列應用管理操作。
彈性策略啟用后,無法對應用執行停用、啟動和手動擴縮操作。如果必須執行,請先停止彈性策略。
后續步驟
您可前往事件中心訂閱應用擴縮容相關事件,當應用發生擴縮容、擴縮容失敗(自動擴縮達到設置的最大或最小實例數),您都會接收到消息通知。訂閱彈性伸縮相關的K8s事件,請參見事件中心。
EDAS容器服務K8s和Serverless K8s交流群
如果您在EDAS中使用容器服務K8s集群和Serverless K8s集群過程中有任何疑問或建議,請使用釘釘搜索釘釘群號23197114加入釘釘群進行反饋。