CustomedHPA策略是自研的彈性伸縮增強能力,能夠基于指標(CPU利用率、內存利用率)或周期(每天、每周、每月或每年的具體時間點),對無狀態工作負載進行彈性擴縮容。
主要功能如下:
- 支持按照當前實例數的百分比進行擴縮容。
- 支持設置一次擴縮容的最小步長。
- 支持按照實際指標值執行不同的擴縮容動作。
前提條件
使用CustomedHPA策略必須安裝cce-hpa-controller。若cce-hpa-controller版本低于1.2.11,則必須安裝prometheus插件;若版本大于或等于1.2.11,則需要安裝能夠提供Metrics API的插件,如kube-prometheus-stack、metrics-server或Prometheus。
約束與限制
- CustomedHPA策略:僅支持1.15及以上版本的集群創建。
- 每個工作負載只能創建一個策略,即如果您創建了一個HPA策略,則不能再對其創建CustomedHPA策略或其他HPA策略,您可以刪除該HPA策略后再創建。
- 1.19.10以下版本的集群中,如果使用HPA策略對掛載了EVS卷的負載進行擴容,當新Pod被調度到另一個節點時,會導致之前Pod不能正常讀寫。
1.19.10及以上版本集群中,如果使用HPA策略對掛載了EVS卷的負載進行擴容,新Pod會因為無法掛載云硬盤導致無法成功啟動。
- cce-hpa-controller插件的資源使用量主要受集群中總容器數量和伸縮策略數量影響,通常場景下建議每5000容器配置CPU 500m, 內存1000Mi資源,每1000伸縮策略CPU 100m,內存500Mi。
- 若cce-hpa-controller插件版本低于1.2.11,不支持使用kube-prometheus-stack插件提供Metrics API來實現工作負載彈性伸縮。
操作步驟
步驟 1 在CCE控制臺,單擊集群名稱進入集群。
步驟 2 單擊左側導航欄的“負載伸縮”,選擇“CustomedHPA策略”。
- 若插件名稱后方顯示“未安裝”,請單擊插件后方的“安裝”按鈕,根據業務需求配置插件參數后單擊“安裝”,等待插件安裝完成。
- 若插件名稱后方顯示“已安裝”,則說明插件已安裝成功。
步驟 3 確認插件已安裝成功后,單擊右上角“創建CustomedHPA策略”。
步驟 4 填寫策略參數。
表 CustomedHPA策略參數配置
參數 參數說明 策略名稱 新建策略的名稱,請自定義。 命名空間 請選擇工作負載所在的命名空間。 關聯工作負載 請選擇要設置CustomedHPA策略的工作負載。 實例范圍 請輸入最小實例數和最大實例數。
策略觸發時,工作負載實例將在此范圍內伸縮。冷卻時間 請輸入冷卻時間值,單位為分鐘。
策略成功觸發后,在此冷卻時間內,不會再次觸發縮容/擴容,目的是等待伸縮動作完成后在系統穩定且集群正常的情況下進行下一次策略匹配。策略規則 單擊在彈出的窗口中設置伸縮策略參數:
規則名稱:請輸入規則名稱,可自定義。
類型:可選擇“指標觸發”或“周期觸發”。
指標觸發
觸發條件:請選擇“CPU利用率”或“內存利用率”,選擇“>”或“<”,并輸入百分比的值。如下圖中所示,則表示CPU利用率瞬時值?> 50%?時,立即執行此規則。
說明利用率 = 工作負載的實際使用量 / 申請量。
執行動作:與上述“觸發條件”相對應,達到觸發條件值后所要執行的動作,可添加多個執行動作。如下圖中所示,當CPU利用率超過50%時將伸縮至5個實例,當超過70%時伸縮至8個實例,當超過90%時在8個實例基礎上再增加10個實例。反之,按此規則執行縮容。
是否啟用:可單擊啟用或關閉該策略規則。
周期觸發觸發時間:可選擇每天、每周、每月或每年的具體時間點,如設置為下圖所示,則為每天17:00觸發。
執行動作:與上述“觸發時間”相對應,達到觸發時間值后所要執行的動作。如下圖中所示,即每天17:00時將執行減少4個實例的動作。
是否啟用:可單擊啟用或關閉該策略規則。
單擊確定后,您可以在“策略規則”列表中查看添加的規則,并可執行開啟關閉、編輯、刪除等操作。
單擊“策略規則”列表下方的“添加策略規則”,可設置多條策略。
步驟 5 設置完成后,單擊“創建”。
使用kubectl創建
CustomHPA是一種CRD資源,可按如下YAML定義。
apiVersion: autoscaling.cce.io/v1alpha1
kind: CustomedHorizontalPodAutoscaler
metadata:
name: customhpa-example
namespace: default
spec:
coolDownTime: 3m # 冷卻時間
maxReplicas: 10 # 最大實例數
minReplicas: 1 # 最小實例數
rules:
- actions: # 策略規則
- metricRange: 0,0.1 # 指標范圍,表示從0到10%
operationType: ScaleDown # 伸縮類型,ScaleDown表示減少
operationUnit: Task # 操作單位,Task表示個數
operationValue: 1 # 每次伸縮的數量
- metricRange: 0.1,0.3 # 指標范圍,表示從10%到30%
operationType: ScaleDown
operationUnit: Task
operationValue: 2
disable: false
metricTrigger:
hitThreshold: 1
metricName: CPURatioToRequest # 指標名稱,CPURatioToRequest為CPU利用率
metricOperation: < # 指標表達式操作符
metricValue: 0.3 # 指標表達式右側取值
periodSeconds: 60 #
statistic: instantaneous #
ruleName: low
ruleType: Metric
- actions:
- metricRange: 0.7,0.9
operationType: ScaleUp
operationUnit: Task
operationValue: 1
- metricRange: 0.9,+Infinity
operationType: ScaleUp
operationUnit: Task
operationValue: 2
disable: false
metricTrigger:
hitThreshold: 1
metricName: CPURatioToRequest
metricOperation: '>'
metricValue: 0.7
periodSeconds: 60
statistic: instantaneous
ruleName: high
ruleType: Metric
scaleTargetRef: # 關聯負載
apiVersion: apps/v1
kind: Deployment
name: nginx