前提條件
已創建集群,具體操作請參見 用戶指南 > 集群 > 新建集群 章節。若已有集群,無需重復操作。
集群已安裝cube-cluster-autoscaler插件且版本高于1.0.5,可參考 用戶指南 > 插件 章節。
創建節點池時開啟彈性伸縮,若用已有節點池,編輯開啟彈性伸縮
包周期節點池不支持自定義節點彈性伸縮策略
創建/編輯節點彈性伸縮策略
登陸CCE控制臺, 點擊左側導航欄中的“集群”,進入集群列表頁。
在集群列表中點擊需要創建策略的集群,進入集群管理頁面。
點擊左側導航欄的“節點池”,進入到節點池列表頁
在節點池列表頁選擇需要創建策略的節點池,點擊操作欄的“更多”,點擊“彈性伸縮”按鈕
在伸縮規則的管理頁中點擊“+”按鈕,添加指標、周期、告警類型的規則
刪除節點彈性伸縮策略
登陸CCE控制臺, 點擊左側導航欄中的“集群”,進入集群列表頁。
在集群列表中點擊需要創建策略的集群,進入集群管理頁面。
點擊左側導航欄的“節點池”,進入到節點池列表頁
在節點池列表頁選擇需要創建策略的節點池,點擊操作欄的“更多”,點擊“彈性伸縮”按鈕
點擊“刪除”按鈕,刪除對應的規則
彈性伸縮策略配置說明
自定義規則
| 規則類型 | 參數設置 |
|---|---|
| 指標觸發 |
|
| 定時觸發 |
|
| 告警觸發 |
|
冷卻時間
冷卻時間為節點池級別的配置,當上一次觸發擴縮之后在冷卻時間內即使彈性伸縮條件滿足,也不會觸發彈性伸縮
YAML樣式
kind: HorizontalNodeAutoscaler
apiVersion: autoscaler.ccse.daliqc.cn/v1
metadata:
name: {節點池名稱}-{集群Id} // default-a2f1e09a01da444d989f7861a55c1c5e
spec:
disable: false //禁用狀態,false表示開啟
rules:
- action:
type: ScaleUp //ScaleDown表示縮容,ScaleUp表示擴容
unit: Node //當前僅支持Node
value: 1 //擴縮節點的數量
cronTrigger: //當type為Cron時,傳cronTrigger;type為Metric時傳metricTrigger;type為Alarm時傳alarmTrigger
schedule: 8 17 * * * //定時的cron表達式
disable: false
ruleName: rule04130 //每一個rule的ruleName唯一即可,
type: Cron //策略類型,包括Cron(定時)、Metric(監控)、Alarm(告警)
- action:
type: ScaleUp
unit: Node
value: 1
disable: false //禁用狀態
metricTrigger: //type為Metric時傳metricTrigger
metricName: cpu_util //指標名稱,支持cpu_util、mem_util
metricOperation: gt //gt大于,lt:小于
metricValue: '80' //閾值
ruleName: rule09974
type: Metric
- action:
type: ScaleUp
unit: Node
value: 1
disable: false
alarmTrigger:
evaluationCount: 2 //1-99 ,連續出現n次
fun: avg //avg(平均值)、max(最大值)、min(最小值)
metric: cpu_util //disk_read_bytes_rate(磁盤讀速率)、disk_write_bytes_rate(磁盤寫速率)、mem_util(內存使用率)、disk_read_requests_rate(磁盤讀請求速率)、disk_write_requests_rate(磁盤寫請求速率)、net_out_bytes_rate(網絡流出速率)、net_in_bytes_rate(網絡流入速率)
operator: ge //取值范圍:eq:等于。gt:大于。ge:大于等于。lt:小于。le:小于等于
value: '80' //閾值
period: 5m //監控周期
ruleName: rule42857
type: Alarm
targetNodepools:
- default //節點池的名稱
coolDown: 3 //冷卻時間,單位為min關鍵參數說明
參數 | 參數類型 | 是否必填 | 描述 |
|---|---|---|---|
| spec.coolDown | Integer | 必填 | 冷卻時間,單位為min |
spec.disable | Bool | 是 | 伸縮策略開關,會對策略中的所有規則生效 |
spec.rules | Array | 否 | 伸縮策略中的所有規則 |
spec.rules[x].action.type | String | 當spec.rules不為空時必填 | 規則操作類型,當前支持“ScaleUp”、“ScaleDown” |
spec.rules[x].action.unit | String | 當spec.rules不為空時必填 | 規則操作單位,當前僅支持“Node” |
spec.rules[x].action.value | Integer | 當spec.rules不為空時必填 | 規則操作數值 |
spec.rules[x].alarmTrigger | / | 否 | 可選,僅在告警規則中有效 |
| spec.rules[x].alarmTrigger.evaluationCount | Integer | 當spec.rules[x].alarmTrigger不為空時必填 | 告警規則的連續持續n次,防止抖動,最小為1 |
| spec.rules[x].alarmTrigger.fun | String | 當spec.rules[x].alarmTrigger不為空時必填 | avg(平均值)、max(最大值)、min(最小值) |
spec.rules[x].alarmTrigger.metric | String | 當spec.rules[x].alarmTrigger不為空時必填 | 告警規則對應的指標,當前支持 disk_read_bytes_rate(磁盤讀速率)、disk_write_bytes_rate(磁盤寫速率)、mem_util(內存使用率)、disk_read_requests_rate(磁盤讀請求速率)、disk_write_requests_rate(磁盤寫請求速率)、net_out_bytes_rate(網絡流出速率)、net_in_bytes_rate(網絡流入速率) |
spec.rules[x].alarmTrigger.operator | String | 當spec.rules[x].alarmTrigger不為空時必填 | 告警規則的比較符,取值范圍:eq:等于。gt:大于。ge:大于等于。lt:小于。le:小于等于 |
| spec.rules[x].alarmTrigger.period | String | 當spec.rules[x].alarmTrigger不為空時必填 | 告警規則的監控周期,支持5m、20m、1h、4h、12h、24h |
spec.rules[x].alarmTrigger.value | String | 當spec.rules[x].alarmTrigger不為空時必填 | 告警規則的閾值,支持1-100之間的所有整數,需以字符串表示; |
spec.rules[x].cronTrigger | / | 否 | 可選,僅在周期規則中有效 |
spec.rules[x].cronTrigger.schedule | String | 當spec.rules[x].cronTrigger不為空時必填 | 周期規則的cron表達式 |
spec.rules[x].disable | Bool | 當spec.rules不為空時必填 | 規則開關,當前僅支持“false” |
spec.rules[x].metricTrigger | / | 否 | 可選,僅在指標規則中有效 |
spec.rules[x].metricTrigger.metricName | String | 當spec.rules[x].metricTrigger不為空時必填 | 指標規則對應的指標,當前支持“Cpu”和“Memory”兩種類型 |
spec.rules[x].metricTrigger.metricOperation | String | 當spec.rules[x].metricTrigger不為空時必填 | 指標規則的比較符,當前僅支持“gt”、“lt” |
spec.rules[x].metricTrigger.metricValue | String | 當spec.rules[x].metricTrigger不為空時必填 | 指標規則的閾值,支持1-100之間的所有整數,需以字符串表示; |
spec.rules[x].ruleName | String | 當spec.rules不為空時必填 | 規則名稱,單個策略中唯一 |
spec.rules[x].type | String | 當spec.rules不為空時必填 | 規則類型,當前支持“Cron”、“Metric”、"Alarm"兩種類型 |
spec.targetNodepools | Array | 必填 | 伸縮策略關聯的節點池 |
spec.targetNodepools[x] | String | 必填 | 伸縮策略關聯節點池名稱 |
注意事項
單一規格的ECS庫存容量波動較大,建議在伸縮組中配置庫存充裕的實例規格,提高節點伸縮成功率。
由于節點標簽和污點配置映射到伸縮組Tag后自動伸縮才可識別,并且伸縮組Tag有數目上限限制,開啟自動伸縮的節點池配置的ECS標簽、污點和節點標簽的總數需要控制在一定數量之內。
自動伸縮的節點池避免手動干預,經過彈性伸縮的ECS在移出節點池后,但在伸縮組中還存在,縮容時也會縮該節點。
常見問題
為什么節點自動伸縮組件無法彈出節點?
請檢查是否存在如下幾種場景:
1、配置伸縮組的實例規格無法滿足Pod的資源申請(Request)。或者實例規則是已售罄的規格,實際運行時請考慮以下資源預留。
在創建實例的過程中因為虛擬化、OS占用掉一部分。
需要占用一定的節點資源來運行相關組件(例如kubelet、kube-proxy、calico、Container Runtime等)。
默認節點會安裝系統組件,Pod的申請資源要小于實例的規格。
2、開啟自動伸縮的節點池中出現如下異常情況。
實例未加入到集群且超時。
節點未ready且超時。
為保證后續擴縮準確性,彈性插件以阻塞方式處理異常情況,在處理完異常情況節點前,不進行擴縮容。
為什么節點自動伸縮組件無法縮容節點?
請檢查是否存在如下幾種場景:
節點Pod的資源申請(Request)閾值高于設置的縮容閾值。
節點上運行kube-system命名空間的Pod。
節點上的Pod包含強制的調度策略,導致其他節點無法運行此Pod。
節點上的Pod擁有PodDisruptionBudget,且到達了PodDisruptionBudget的最小值。
多個伸縮組在彈性伸縮的時候是如何被選擇的?
在Pod處在無法調度時,會觸發彈性伸縮組件的模擬調度邏輯,會根據伸縮組配置的標簽和污點以及實例規格等信息進行判斷。當配置的伸縮組可以模擬調度Pod的時候,就會被選擇進行節點彈出。當同時有多個伸縮組滿足模擬調度條件的時候,根據配置的策略選擇。默認采用的是最少浪費原則,即根據模擬彈出后節點上剩余的資源最小為原則進行抉擇。