ECI支持搭配使用阿里云彈性伸縮(ESS)服務,實現根據實時負載動態增加或者減少ECI實例,從而提升資源利用率和系統可用性,降低使用成本。本文以Spring Boot容器應用為例,演示如何配置負載均衡和彈性伸縮,實現根據實時負載自動擴縮容ECI實例。
背景信息
本文將通過Spring Boot容器應用來演示以下場景:
通過阿里云彈性伸縮和負載均衡服務,實現根據實時負載自動擴縮容ECI實例。
結合ECI的鏡像緩存、日志采集、監控等能力驗證Serverless場景下的容器彈性能力。
借助彈性伸縮原生的擴縮容能力進行應用的灰度升級。
本文示例中各組件的關系如下圖所示:
配置說明
配置應用鏡像
本文示例基于Spring Boot實現了一個簡易的HTTP Server,可以監聽外部請求并為每個請求消耗5s左右的CPU時間。源代碼詳見SpringBootDemo。
示例采用TCP 8761端口作為應用監聽的端口,您也可以自定義端口。
編譯應用得到.jar文件,然后通過Docker打包成鏡像。
FROM java:8 ADD target/*.jar /app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]
將打包好的鏡像推送到您的鏡像倉庫中。
配置負載均衡
應用一般采用分布式多副本部署,當應用需要對外提供服務時,則需要負載均衡來實現流量分發,本文使用阿里云負載均衡SLB服務來實現(SLB分為ALB和CLB,本文以CLB為例)。相關操作如下:
配置伸縮組
登錄彈性伸縮控制臺。
創建彈性伸縮組。
在左側導航欄,單擊伸縮組管理。
在頂部菜單欄,選擇地域。
單擊創建伸縮組。
在彈出的對話框中完成伸縮組配置。
創建時需要注意的參數如下表所示。更多信息,請參見創建伸縮組。
參數
描述
示例
伸縮組類型
伸縮組內的實例類型。此處必須選擇ECI。
ECI
組內實例配置信息來源
對應伸縮配置,包含擴容時創建的實例的配置信息。
選擇已有實例:采用已有實例的信息,創建對應的伸縮配置。
從零開始創建:等伸縮組創建完成后再進行伸縮配置。
從零開始創建
組內最小實例數
伸縮組內的實例數量下限。當實例數量低于該下限時,伸縮組會自動添加實例,使得伸縮組內的實例數量等于下限。
1
組內最大實例數
伸縮組內的實例數量上限。當實例數量高于該上限時,伸縮組會自動移出實例,使得伸縮組內的實例數量等于上限。
50
專有網絡
選擇ECI實例所屬的專有網絡。
vpc-2zeghwzptn5zii0******
選擇交換機
選擇ECI實例所示的交換機,建議選擇多個交換機實現多可用區功能。
vsw-2zevanrscmoiaxr******
vsw-2ze23nqzig8inpr******
關聯傳統型負載均衡CLB(原SLB)
關聯CLB后,加入伸縮組的實例會自動添加為CLB實例的后端服務器。此處選擇已創建的CLB實例。
lb-2zerkwijjdblq4n******
創建并啟用伸縮配置。
在伸縮組管理頁面,找到目標伸縮組,單擊組內實例配置信息來源列對應的添加伸縮配置。
在彈出頁面完成伸縮配置。
創建時需要注意的參數如下表所示。更多信息,請參見創建伸縮配置(ECI實例)。
配置模塊
參數
描述
容器組配置
CPU、內存
請根據業務需要選擇vCPU和內存規格。本文示例為4 vCPU、8 GiB內存。
存儲
如果應用需要使用配置項,或者需要NAS等外部存儲,則需要添加數據卷。更多信息,請參見數據卷。
臨時存儲大小
ECI實例默認提供30 GiB的免費存儲空間,如果無法滿足需求,您可以額外增加臨時存儲空間。更多信息,請參見自定義臨時存儲空間大小。
鏡像緩存
鏡像緩存用于加速拉取鏡像。建議您開啟該功能,開啟后在后續擴容ECI實例時無需拉取相同鏡像,從而提高擴容速度。更多信息,請參見鏡像緩存概述。
容器配置
鏡像
選擇制作好的應用容器鏡像以及版本。
啟動命令
如果在鏡像中沒有設置好啟動命令,您可以在此處配置,否則容器可能不會啟動或者出現啟動異常而退出。更多信息,請參見設置容器啟動命令和參數。
環境變量
除了鏡像自帶的環境變量外,您可以自定義添加其他環境變量。建議您采用環境變量來自定義配置日志采集,更多信息,請參見自定義配置ECI日志采集。
示例如下圖所示,表示將ECI實例的標準輸出日志采集到自定義的store-ess配置中。
啟用伸縮配置后,系統將自動創建ECI實例,以滿足伸縮組內的最小實例數要求,并將組內所有ECI實例加入到CLB的后端服務器組中。
創建伸縮規則。
在伸縮組管理頁面,找到目標伸縮組,單擊伸縮組ID。
單擊伸縮規則與報警任務頁簽。
在伸縮規則頁簽下,單擊創建伸縮規則。
在彈出的對話框中,完成伸縮規則配置。
伸縮規則用于觸發伸縮活動,分為簡單規則和目標追蹤規則等,本文以目標追蹤規則為例,采用CPU使用率作為擴縮容指標,目標值為60%,創建時需要注意的參數如下表所示。
參數
描述
示例
規則類型
分為簡單規則和目標追蹤規則:
簡單規則:指定增加、減少的實例數,或者將實例數量調整到指定值。
目標追蹤規則:選擇某一監控指標并設置目標值,系統將自動增加或者減少實例數,使得監控指標值維持在目標值附近。
目標追蹤規則
指標類型
設置目標追蹤規則時,需選擇要監控的指標。
CPU使用率
目標值
設置目標追蹤規則時,需設置監控指標的目標值。
60
實例預熱時間
處于預熱狀態的實例正常加入伸縮組,但是不會向云監控上報監控數據。動態計算需要擴縮容的實例數量時,處于預熱狀態的實例不計入現有實例數量,以免造成指標值波動。
30
擴容報警觸發的閾值次數
觸發擴容時,需要滿足規則條件的次數。
1
縮容報警觸發的閾值次數
觸發縮容時,需要滿足規則條件的次數。
10
測試彈性伸縮效果
默認情況下,彈性伸縮組保持初始狀態,即組內實例數量為期望的實例數,不具備彈性伸縮的能力。配置伸縮規則后,當監控指標不滿足規則條件時,將自動進行彈性伸縮。
由于示例的伸縮規則中以CPU使用率作為擴縮容指標,目標值為60%,擴容報警觸發的閾值次數為1,縮容報警觸發的閾值次數為10 ,則在CPU使用率出現一次60%以上時,將觸發自動擴容;在CPU使用率連續10次低于60%時,將觸發自動縮容。
測試過程如下:
模擬壓測,按500次/分鐘的頻次向應用發起請求。
模擬壓測的示例代碼可參見HttpClientHelper。
停止發送請求。
此時應用負載降低到0,將觸發縮容??s容成功后,伸縮組中僅保留最小實例數。
配置應用升級
應用一般需要進行升級發布,目前彈性伸縮暫不支持基于ECI的滾動升級。您可以通過以下方式灰度升級應用版本,假設應用版本要從v4升級到v5版本,配置流程如下:
以彈性伸縮組v4為基礎,克隆一個新的彈性伸縮組,命名為v5。
修改彈性伸縮組v4和v5的設置,實現v5擴容,v4縮容。
修改彈性伸縮組v5的伸縮規則,將CPU使用率閾值改為30%,即CPU高于30%就觸發擴容。
修改彈性伸縮組v4的最小實例數為0。
由于兩個伸縮組的擴縮容規則是相沖突的,所以v5會一直擴容,導致CPU使用率持續降低,最終觸發v4縮容。過程如下:一段時間后,v4的實例數將縮容至0臺,v5的實例數將擴容至CPU使用率為30%左右。
修改彈性伸縮組v5的伸縮規則,將CPU使用率閾值改回到60%。
由于整體負載水平較低(CPU使用率30%左右),因此需要修改v5的伸縮規則,將CPU使用率閾值改回到60%,此時v5的實例數將縮容至正常情況。
配置完成后,查看日志,可以看到一個基于ESS自動擴縮容能力的灰度發布過程。
v4
v5
該過程具備以下特點:
灰度發布過程中,應用負載不會突然增長,過渡比較平穩。
灰度發布過程完全可控。借助ESS的實例數量管理能力還可以精準控制新舊版本的實例副本比例,即流量比例。發布過程中隨時可以直接回滾到之前版本,并且容器鏡像自帶的版本管理方便隨時回滾到之前的任意版本。
借助ECI容器生命周期的postStart和preStop hook實現應用優雅上下線。
相關文檔
如需了解更多關于彈性伸縮的功能,請參見彈性伸縮常用操作導航。