插件簡介
CCE集群彈性引擎(autoscaler)是Kubernetes中非常重要的一個Controller,它提供了微服務的彈性能力,并且和Serverless密切相關。
彈性伸縮是很好理解的一個概念,當微服務負載高(CPU/內存使用率過高)時水平擴容,增加pod的數量以降低負載,當負載降低時減少pod的數量,減少資源的消耗,通過這種方式使得微服務始終穩定在一個理想的狀態。
云容器引擎簡化了Kubernetes集群的創建、升級和手動擴縮容,而集群中應用的負載本身是會隨著時間動態變化的,為了更好的平衡資源使用率以及性能,Kubernetes引入了autoscaler插件,它可以根據部署的應用所請求的資源量自動的動態的伸縮集群,詳情請了解創建節點伸縮策略。
開源社區地址:
插件說明
autoscaler可分成擴容和縮容兩個方面:
自動擴容
集群的自動擴容有以下兩種方式實現:
- 當集群中的Pod由于工作節點資源不足而無法調度時,會觸發集群擴容,擴容節點與所在節點池資源配額一致。此時需要滿足以下條件時才會執行自動擴容:
- 節點上的資源不足。
- Pod的調度配置中不能包含節點親和的策略(即Pod若已經設置親和某個節點,則不會自動擴容節點),節點親和策略設置方法請參見調度策略(親和與反親和)。
- 當集群滿足節點伸縮策略時,也會觸發集群擴容。
說明當前該插件使用的是最小浪費策略,即若Pod創建需要3核,此時有4核、8核兩種規格,優先創建規格為4核的節點。
自動縮容
當集群節點處于一段時間空閑狀態時(默認10min),會觸發集群縮容操作(即節點會被自動刪除)。當節點存在以下幾種狀態的Pod時,不可縮容:
- Pod有設置PodDisruptionBudget,當移除Pod不滿足對應條件時,節點不會縮容。
- Pod由于一些限制,如親和、反親和等,無法調度到其他節點,節點不會縮容。
- Pod擁有cluster-autoscaler.kubernetes.io/safe-to-evict: 'false'這個annotations時,節點不縮容。
- 節點上存在kube-system命名空間下的Pod(除kube-system daemonset創建的Pod),節點不縮容。
- 節點上如果有非controller(deployment/replicaset/job/statefulset)創建的Pod,節點不縮容。
約束與限制
- 集群為1.9.7-r1及以上版本時,才支持此功能。
- 安裝時請確保有足夠的資源安裝本插件。
- 該插件功能僅支持通過按需計費方式購買的 虛擬機節點 ,不支持“包年/包月”方式購買的節點和物理機節點。
- 默認節點池不支持彈性擴縮容。
安裝插件
步驟 1 登錄CCE控制臺,單擊集群名稱進入集群,在左側導航欄中選擇“ 插件管理”,在右側找到 autoscaler ,單擊“安裝”。
步驟 2 配置插件安裝參數。
規格配置
| 參數 | 參數說明 |
|---|---|
| 插件規格 | 插件部署可選擇如下幾種規格。說明autoscaler插件高可用或自定義部署時,插件實例間存在反親和策略,會分別部署在不同的節點上,因此集群中的可用節點必須大于等于插件實例數才可保證插件高可用。 單實例:以單實例部署插件。 高可用50:50節點集群規模多實例部署,實例數為2,具有高可用能力。 高可用200:200節點集群規模多實例部署,實例數為2,具有高可用能力,每個實例使用資源比高可用50的實例更多。 自定義:根據需要自定義實例數量和實例規格。 |
參數配置
參數 說明 擴縮容配置 可以勾選自動擴縮容。
當集群下負載實例無法調度時自動擴容(從節點池)即當出現Pod處于Pending狀態無法調度時,集群會自動擴容節點。若Pod已經設置親和某個節點,則不會自動擴容節點。該功能一般與HPA策略配合使用。如不勾選,則只能通過節點伸縮策略進行擴縮容。
自動縮容節點
空置時間(min):當集群節點處于一段時間的空閑狀態時,會觸發集群縮容操作,刪除節點,默認10min。
縮容閾值:當集群節點資源(Request值)低于多少百分比時,進行集群縮容掃描(默認0.5,即50%,cpu和mem都要滿足的條件下才會縮容)。
冷卻時間:擴容執行后多久能再次判斷是否縮容,默認10min。
說明集群中如果同時存在自動擴容和自動縮容的場景,建議配置“擴容執行后多久能再次判斷是否縮容”為0min,避免由于部分節點池持續擴容或者擴容失敗重試而阻塞整體縮容節點行為,
導致非預期的節點資源浪費。節點刪除后多久能再次判斷是否縮容:刪除節點后能再次啟動縮容評估的時間間隔,默認10min。
縮容失敗后多久能再次判斷是否縮容:縮容失敗后能再次啟動縮容評估的時間間隔,默認3min。節點池中配置的縮容冷卻時間和此處配置的縮容冷卻時間之間的影響和關系請參見縮容冷卻時間說明。若節點上的Pod不需要驅逐(DaemonSet的Pod認為不需要驅逐),則認為該節點為完全空閑節點,否則認為該節點為非完全空閑。? 檢查間隔:節點被判定不可移除后能再次啟動檢查的時間間隔,默認5min。
縮容并發數:最多支持多少個空閑節點同時縮容,默認10。縮容并發數只針對完全空閑節點,完全空閑節點可實現并發縮容。非完全空閑節點則只能逐個縮容。說明節點在縮容的時候,
節點總數 集群可管理的節點數目的最大值,擴容時不會讓集群下節點數超過此值。 CPU總數(核) 集群中所有節點CPU 核數之和的最大值,擴容時不會讓集群下節點CPU核數之和超過此值。 內存總數(GB) 集群中所有節點內存之和的最大值,擴容時不會讓集群下節點內存之和超過此值。
步驟 3 配置完成后,單擊“安裝”。
縮容冷卻時間說明
節點池中配置的縮容冷卻時間和autoscaler插件中配置的縮容冷卻時間之間的影響和關系如下:
節點池配置的縮容冷卻時間
彈性縮容冷卻時間:當前節點池擴容出的節點多長時間不能被縮容,作用范圍為節點池級別。
autoscaler插件配置的縮容冷卻時間
擴容后縮容冷卻時間:autoscaler觸發擴容后(不可調度、指標、周期策略)整個集群多長時間內不能被縮容,作用范圍為集群級別。
節點刪除后縮容冷卻時間:autoscaler觸發縮容后整個集群多長時間內不能繼續縮容,作用范圍為集群級別。
縮容失敗后縮容冷卻時間:autoscaler觸發縮容失敗后整個集群多長時間內不能繼續縮容,作用范圍為集群級別。
版本記錄
CCE插件版本記錄
插件版本 支持的集群版本 社區版本(僅1.17及以上版本集群支持) 1.23.9 /v1.23.*/ 1.23.0 1.23.8 /v1.23.*/ 1.23.0 1.23.7 /v1.23.*/ 1.23.0 1.23.3 /v1.23.*/ 1.23.0 1.21.8 /v1.21.*/ 1.21.0 1.21.6 /v1.21.*/ 1.21.0 1.21.4 /v1.21.*/ 1.21.0 1.21.2 /v1.21.*/ 1.21.0 1.21.1 /v1.21.*/ 1.21.0 1.19.13 /v1.19.*/ 1.21.0 1.19.12 /v1.19.*/ 1.19.0 1.19.11 /v1.19.*/ 1.19.0 1.19.9 /v1.19.*/ 1.19.0 1.19.8 /v1.19.*/ 1.19.0 1.19.7 /v1.19.*/ 1.19.0 1.19.6 /v1.19.*/ 1.19.0 1.19.3 /v1.19.*/ 1.19.0 1.17.21 /v1.17.*/ 1.19.0 1.17.19 /v1.17.*/ 1.19.0 1.17.17 /v1.17.*/ 1.17.0 1.17.16 /v1.17.*/ 1.17.0 1.17.15 /v1.17.*/ 1.17.0 1.17.14 /v1.17.*/ 1.17.0 1.17.8 /v1.17.*/ 1.17.0 1.17.7 /v1.17.*/ 1.17.0 1.17.5 /v1.17.*/ 1.17.0 1.17.2 /v1.17.*/ 1.17.0