HPA是針對Pod級別的,但是如果集群的資源不夠了,那就需要對節點進行擴容了。是Kubernetes提供的集群節點彈性伸縮組件,可根據Pod調度狀態及資源使用情況對集群的節點進行自動擴容縮容。
CCE的集群節點彈性伸縮請參見創建節點伸縮策略。
Cluster Autoscaler工作原理
Cluster Autoscaler(簡稱CA)的主要流程包括兩部分:
- ScaleUp流程: CA會每隔15s檢查一次所有不可調度的Pod,根據用戶設置的策略,選擇出一個符合要求的節點組進行擴容。
- ScaleDown流程:CA每隔10s會掃描一次所有的Node,如果該Node上所有的Pod Requests少于用戶定義的縮容百分比時,CA會模擬將該節點上的Pod是否能遷移到其他節點,如果可以的話,當滿足不被需要的時間窗以后,該節點就會被移除。
如上所述,當集群節點處于一段時間空閑狀態時(默認10min),會觸發集群縮容操作。
當節點存在以下幾種狀態的pod時,不可縮容:
1. 節點上的pod有設置PodDisruptionBudget,當移除pod不滿足對應條件時,節點不會縮容。
2. 節點上的pod設置本地存儲時,節點不會縮容。
3. 節點上的pod由于一些限制,如親和、反親和或者taints等,無法調度到其他節點,節點不會縮容。
4. 節點上的pod擁有"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"這個annotations時,節點不縮容。
5. 節點上存在kube-system namespace下的Pod(除kube-system daemonset創建的Pod),節點不縮容。
6. 節點上有非controller(deployment/replica set/job/stateful set)創建的Pod,節點不縮容。
Cluster AutoScaler架構
Cluster AutoScaler架構如下圖所示,主要由以下幾個核心模塊組成:

說明如下:
- Estimator: 負責擴容場景下,評估滿足當前不可調度Pod時,每個節點池需要擴容的節點數量。
- Simulator: 負責縮容場景下,找到滿足縮容條件的節點。
- Expander: 負責在擴容場景下,根據用戶設置的不同的策略來,從Estimator選出的節點池中,選出一個最佳的選擇。當前Expander有多種策略:
? Random: 隨機選擇一個節點池,如果用戶沒有設置的話,默認是Random。
? most-Pods: 選擇此次擴容后能滿足調度最多Pod的節點池,如果有相同的,再隨機選擇一個。
? least-waste: 選擇此次擴容完成后,具有最小浪費的CPU或者Mem資源的節點池。
? price: 選擇此次擴容所需節點金額最小的節點池。
? priority: 根據用戶自定義的權重,選擇權重最高的節點池。
當前CCE提供除Price以外的所有的策略,當前CCE插件默認使用least-waste策略。