集群節點的彈性擴縮
彈性伸縮主要有三個維度:
- HPA,根據利用率,自動伸縮 Pod 數量
- VPA,根據歷史數據,自動設置 Pod 的 Request、Limit
- CA,根據使用率,自動伸縮 Node 數量
本篇主要討論的是節點擴縮容部分。
1. 自動擴縮容組件 autoscaler
autoscaler 是 Kubernetes 社區維護的項目。目前 autoscaler 組件已經提供有 VPA、CA 的伸縮能力。EKS、CCE、ACK、TKE 等主流廠商,都是依賴此組件進行 CA 彈性擴容。沒有找到官方數據,但和同事交流時反饋,大約都需要 2-3 分鐘完成 CA 擴容。
1.1 VPA 垂直擴縮容
與 HPA 類似,需要為 Deployment 創建一個 VPA 對象。
VPA 與 HPA 都依賴于 Metrics-server 獲取監控指標數據。autoscaler 的 VPA 內置了多種資源設置推薦器,同時對資源設置也可以進行約束。
值得注意的是 VPA 設置的資源值可能會超過命名空間下 limit ranges 的約束。
另外,VPA 與 HPA 不要同時使用。這兩種方式有沖突,Pod 數量水平擴縮容和 Pod Limit 垂直擴縮容可能被同時觸發。
1.2 CA 節點擴縮容
觸發條件:
- 擴容,節點無法滿足 Pod Request 要求而處于 Pending 狀態
- 縮容,節點低負載,并且節點上的 Pod 能移到其他節點
支持廠商:
- alicloud
- aws
- azure
- baiducloud
- gce
- huaweicloud
- linode
- tencentcloud
- ...
很多廠商都提供 Provider 給組件,autoscaler 采用定期檢測的方式,觸發廠商擴縮容的接口動作。
另外,CA 與廠商提供的 Node 垂直擴縮容不要同時使用。水平伸縮和垂直伸縮,需要找到一個平衡點,才能協同工作。
2. 云廠托管集群的彈性伸縮
EKS、CCE、ACK、TKE 無一例外都是采用 autoscaler 組件結合自身 IaaS 服務實現節點的彈性伸縮。
由于底層都是采用 autoscaler 組件,在產品層面的呈現也會有所體現。以 EKS 為例,如下圖:
EKS 集群,具有若干節點組,每個節點組構成一個彈性伸縮的單元。如下圖,節點組最少有 1 個節點,最多有 7 個節點:
EKS 的節點彈性是針對節點組的,同一個節點組下的節點具有相同的機器配置、污點、標簽、主機啟動模板。當 EKS 判斷需要進行節點擴容時,會結合節點組允許的最大節點數,進行擴容。這樣也保障擴容出來的節點已經打上正確的污點和標簽,能夠直接被 Kubernetes 調度器使用。
另外,節點組的概念,在產品和使用層面還可以包裝成超級節點。只要節點數量的上限足夠大,一個節點組就能提供超大的計算和內存資源池。
3. 節點儲備策略
根據使用云廠的程度,可以將集群分為三類:
- 完全托管,無法直接管理集群內的任一主機,只能使用
- 半托管,無法管理 master 節點,云廠維護控制面
- 非托管,基于云廠 IaaS 自己部署的集群,完全自主控制
完全托管的集群,云廠會提供擴縮容的功能。下面主要討論的是半托管和非托管的集群。
3.1 冷備
需要新節點時,再申請全新機器,初始化配置。
優勢:
- 成本低,按需申請新節點
- 適配性好,不用考慮集群版本,按需安裝依賴
- 操作簡單,使用安裝工具提供的能力,通常能夠順利完整擴容
- 不用考慮可用區、防火墻等問題
缺點:
- 速度慢,通常得 10 分鐘以上,如果依賴源慢,可能需要更長時間
- 無法標準化,維護的集群不是使用一個工具安裝的,或者需要自行封裝 Kubeadm
3.2 熱備
創建一個熱資源池,保持一定的資源數。當需要主機資源時,直接添加到集群。
優勢:
- 速度快
缺點:
- 成本高,每個集群版本都需要儲備節點,1.16、1.20、1.21 等
- 熱備池復雜,不同 IDC、不同 Region、不同 AZ 的節點,網絡、防火墻可能不通,導致熱備池復雜化
3.3 半熱備
創建一個區域化的熱備池,開啟機器,僅安裝 containerd、chrony、conntrack 等基礎依賴包,但不要安裝 Kubelet 等與集群版本相關的依賴。同時,提前放開儲備區域對資源池的防火墻,還需要一個控制器維護熱備池的主機數量。
優點:
- 成本、效率折中
缺點:
- 防火墻會比較開放,可能引入安全問題。如果考慮安全問題,成本又上升了
4. 參考
- ??https://github.com/kubernetes/autoscaler??
- ??https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/autoscaling.html??
- ??https://support.huaweicloud.com/productdesc-cce/cce_productdesc_0015.html??
- ??https://help.aliyun.com/document_detail/119099.html??
- ??https://cloud.tencent.com/document/product/457/43719??