ACP雲原生容器工程師 - ACK自動伸縮

概述

彈性伸縮是ACK特點功能之一,典型的場景包括:

  • 在線業務彈性

  • 大規模計算訓練

  • 定時週期性負載變化等

彈性伸縮分爲兩個維度:

  • 彈性調度層:主要負責修改負載的調度容量變化,在已有資源條件下進行pod調度

  • 資源彈性層:主要負責擴充資源的方式調度容量的補充,對資源本社進行調度

資源層階段彈性提供

  • 阿里雲Kubernetes集羣的一個重要特性,是集羣的節點可以動態的增加或減少

  • 有了這個特性,集羣才能在計算資源不足的情況下擴充新的節點

  • 同時,也可以在資源利用率降低的時候,釋放節點以節省費用

  • 資源層擴縮容可以分爲:手動擴縮容、自動擴縮容

資源層彈性插件

  • Cluster-autoscaler: Kubernetes社區開源組件,節點水平伸縮軟件,阿里雲提供了獨有的調度、彈性優化、成本優化的功能。

  • Virtual-node: ACK開源插件,提供無服務器運行時環境,開發者無需掛心節點資源,只需針對Pod按量付費即可。

  • Virtual-kubelet-autoscaler: ACK服務組件,提供無服務彈性伸縮能力

節點自動伸縮

節點自動伸縮機制

定期檢測集羣中應用pod的狀態,如果處於pending狀態且日誌中出現調度原因不足時,會觸發cluster-autoscaler的模擬調度,會在各node中查詢哪臺機可以負載新的pod,如果有就分配;如果沒有就觸發資源調度,實現資源級別的自動伸縮。

節點自動伸縮實現原理

  • 阿里雲容器服務ACK的自動伸縮能力,是通過節點自動伸縮組件(cluster-autoscaler)實現的。

  • 可以按需彈出普通實例、GPU實例、競價付費實例、支持多可用區、多實例規格、多種伸縮模式、滿足不同的節點伸縮場景。

    • 伸縮配置:通過控制檯配置伸縮節點的規格屬性

    • 自動伸縮組件監聽:自動伸縮組件cluster-autoscaler,它以Pod的形式運行在K8S集羣中、監聽Pod狀態,在Pod因爲節點資源不足而不能被調度的狀態時,啓動自動伸縮規則

    • 伸縮規則啓動:根據伸縮配置的內容,啓動ESS彈性伸縮服務

    • ESS彈性伸縮服務創建實例:通過ESS他行設所服務按照配置創建實例後,繼續進行集羣監聽

節點自動伸縮操作

可分爲3個步驟:

  • 執行自動伸縮

  • 彈性伸縮服務ESS授權

  • 配置自動伸縮

  • 查看結果

調度層彈性伸縮

調度層彈性介紹

  • 調度層彈性組件是指所有的彈性動作都是和pod相關的,並不關心具體的資源情況。

  • 調度層彈性組件包括:容器水平伸縮(HPA),容器垂直伸縮(VPA),容器定時伸縮(CronHPA)

調度層彈性組件

  • HPA: Pod水平伸縮的組件

    • 除了社區支持的Resource Metrics和CustomMetrics,阿里雲容器服務Kuberenetes還提供了external-metrics-adapter

    • 支持雲服務的指標作爲彈性伸縮的判斷條件

    • 目前已經支持例如Ingress的QPS、RT等監控指標

  • VPA:Pod的縱向伸縮的最賤,主要面向有狀態服務的擴容和升級場景,用於大型單體應用

  • CronHPA:定時伸縮組件,主要面向的是週期性負載,通過資源畫像可以預測有規律的負載週期,並通過週期性伸縮,實現資源成本的節約

調度層彈性組件使用場景及限制

通常使用HPA+AutoScaler進行兩層擴容,HPA負載容量管理,AutoScaler負責資源池的所擴容

ACK開啓HPA

小結

  • 阿里雲容器服務ACK彈性伸縮分爲兩個維度:

    • 調度層彈性:主要負責修改負載的調度容量變化

    • 資源層調度:主要是集羣的容量規劃不能滿足集羣調度容量時,會通過擴充資源的方式進行調度容量的補充

  • 阿里雲容器服務Kubernetes彈性調度資源:

    通過調度與資源解耦的兩層彈性模型來解決的,當集羣的調度水位達到設置的閾值時會觸發資源蹭的彈性擴容,當資源彈出後,無法調度的單元會自動調度到新彈出的節點上,從而降低整個應用的負載情況

  • 阿里雲容器服務ACK集羣調度層彈性組件:

    • 容器水平伸縮(HPA)

    • 容器垂直伸縮(VPA)

    • 容器定時伸縮(CronHPA)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章