該問題有如下兩種情況:
- 如果同時配置了“CPU分配率”和“內存分配率”的規則,兩種或多種規則同時滿足擴容條件時,執行擴容節點數更多的規則。
- 如果同時配置了“CPU分配率”和“周期觸發”的規則,當達到“周期觸發”的時間值時CPU也滿足擴容條件時,較早執行的A規則會將節點池狀態置為伸縮中狀態,導致B規則無法正常執行。待A規則執行完畢,節點池狀態恢復正常后,B規則也不會執行。
配置了CPU或者內存規則后,策略的檢測周期是多久?是否只要一次檢測出滿足條件就會觸發擴容節點?
周期不固定,會因autoscaler每次循環的處理邏輯而變動。只要一次檢測出滿足條件就會觸發擴容(當然還要滿足冷卻時間、節點池狀態等約束條件)。
節點伸縮和autoscaler插件的本身功能如何配合?
節點伸縮中創建的策略和autoscaler插件中的配置同時生效時,比如不可調度和指標規則同時滿足時,優先執行不可調度擴容。
- 若不可調度執行成功,跳過指標規則邏輯,進入下一次循環。
- 若不可調度執行失敗,才執行指標規則邏輯。
節點池新增了優先級等功能,彈性擴容時CCE將按照如下策略來選擇節點池進行擴容:
1. 通過預判算法判斷節點池是否能滿足讓Pending的Pod正常調度的條件,包括節點資源大于Pod的request值、nodeSelect、nodeAffinity和taints等是否滿足Pod正常調度的條件;另外還會過濾掉擴容失敗(因為資源不足等原因)還處于15min冷卻時間的節點池。
2. 有多個節點池滿足條件時,判斷節點池設置的優先級(優先級默認值為0,取值范圍為0-100,其中100為最高,0為最低),選擇優先級最高的節點池擴容。
3. 如果有多個節點池處于相同的優先級,或者都沒有配置優先級時,通過最小浪費原則,根據節點池里設置的虛擬機規格,計算剛好能滿足Pending的Pod正常調度,且浪費資源最少的節點池。
4. 如果還是有多個節點池的虛擬機規格都一樣,只是AZ不同,那么會隨機選擇其中一個節點池觸發擴容。
節點池中配置的縮容冷卻時間和autoscaler插件中配置的縮容冷卻時間是如何影響的?
彈性縮容冷卻時間:當前節點池擴容出的節點多長時間不能被縮容,作用范圍為節點池級別。
擴容后縮容冷卻時間:autoscaler觸發擴容后(不可調度、指標、周期策略)整個集群多長時間內不能被縮容,作用范圍為集群級別。
節點刪除后縮容冷卻時間:autoscaler觸發縮容后整個集群多長時間內不能繼續縮容,作用范圍為集群級別。
縮容失敗后縮容冷卻時間:autoscaler觸發縮容失敗后整個集群多長時間內不能繼續縮容,作用范圍為集群級別。
如果出現優先選擇的節點池資源不足,會不會自動選擇下一個節點池?
會。