一起學習Kubernetes:自動擴縮容
在 Kubernetes 中,您可以根據當前的資源需求來擴展工作負載。 這使您的集群能夠更靈活、更高效地對資源需求的變化做出反應。
縮放工作負載時,可以增加或減少由工作負載,或就地調整副本可用的資源。
第一種方法稱為水平縮放,而第二種方法稱為垂直縮放。
- 水平縮放:運行應用的多個實例
- 垂直縮放:調整分配給容器的 CPU 和內存資源的大小
有手動和自動方法可以擴展工作負載,重點是自動方法。
手動擴展工作負載
Kubernetes 支持手動擴展工作負載。可以進行水平縮放使用 kubeclt CLI。 對于垂直縮放,需要 patch 工作負載的資源定義。
自動擴展工作負載
Kubernetes 也支持工作負載的自動縮放,即自動水平縮放和自動垂直縮放。
Kubernetes 中的自動縮放是指自動更新管理一組 Pod 的對象。
水平擴展工作負載
在 Kubernetes 中,可以使用 HorizontalPodAutoscaler (HPA)自動水平縮放工作負載。
它被實現為 Kubernetes API 資源和控制器并定期調整數量副本以匹配觀察到的資源利用率,例如 CPU 或內存使用率。
HPA工作流程
HPA
垂直擴展工作負載
功能狀態: Kubernetes v1.25 [stable]
Kubernetes也支持使用 VerticalPodAutoscaler (VPA) 自動垂直縮放工作負載。但與 HPA 不同的是,VPA 默認不附帶 Kubernetes,而是一個單獨的項目:
VPA項目地址
https://github.com/kubernetes/autoscaler/tree/9f87b78df0f1d6e142234bb32e8acbd71295585a/vertical-pod-autoscaler。
安裝后,可以通過創建CustomResourceDefinitions(CRD),用于定義如何以及何時縮放托管副本的資源。
注意:需要將 Metrics Server 安裝到集群中,HPA 才能正常工作。
VPA工作流程:
VPA
目前,VPA可以在四種不同的模式下運行:
模式 | 描述 |
Auto | 當前使用Recreate,將來可能會更改為原地更新 |
Recreate | VPA 在創建 Pod 時分配資源請求,并在請求的資源與新建議有顯著差異時逐出現有Pod 來更新它們,也就是通過重建Pod方式更新資源 |
Initial | VPA 僅在創建 Pod 時分配資源請求,以后從不更改它們。 |
Off | VPA 不會自動更改 Pod 的資源要求。 |
原地調整大小的限制
功能狀態: Kubernetes v1.27 [alpha]
目前在不重新啟動的情況下就地調整Pod和容器工作負載的大小需要 Kubernetes 版本 1.27 或更高版本。
此外,還需要啟用功能門:InPlaceVerticalScaling。
基于集群大小的自動縮放
對于需要根據集群大小(例如或其他系統組件)進行擴展的工作負載,可以使用集群比例自動縮放器,Cluster Proportional Autoscaler(CPA)。
與 VPA 一樣,CPA不是 Kubernetes 核心的一部分,而是作為其在GitHub 上擁有自己的項目:
CPA項目地址
https://github.com/kubernetes-sigs/cluster-proportional-autoscaler。
Cluster Proportional Autoscaler 監視可調度的數量節點并相應地核心和縮放目標工作負載的副本數。
如果副本數應保持不變,則可以使用以下命令根據群集大小垂直擴展工作負載 Cluster Proportional Vertical Autoscaler。 該項目目前處于測試階段。
當群集比例自動縮放程序縮放工作負載的副本數時,群集比例垂直自動縮放程序根據節點或核心的數量調整工作負載(例如 Deployment 或 DaemonSet)的資源請求在群集中。
事件驅動的自動縮放
還可以根據事件擴展工作負載,例如使用 Kubernetes 事件驅動的自動縮放程序 (KEDA)。
KEDA
KEDA 是一個輕量級的開源 Kubernetes 事件驅動的自動縮放器,DevOps、SRE 和 Ops 團隊使用它來根據外部事件或觸發器水平擴展 Pod。KEDA 有助于擴展本機 Kubernetes 自動縮放解決方案的功能,這些解決方案依賴于標準資源指標,如 CPU 或內存。您可以將 KEDA 部署到 Kubernetes 集群中,并使用自定義資源定義 (CRD) 管理 Pod 的擴展。
KEDA 是 CNCF 畢業項目,能夠根據要處理的事件數數量擴展工作負載,例如隊列中的消息數。存在多種適配器可供選擇,供不同的事件源使用。
基于計劃的自動縮放
擴展工作負載的另一種策略是計劃擴展操作,例如,為了減少非高峰時段的資源消耗。
與事件驅動的自動縮放類似,這種行為可以結合使用 KEDA 和 它的 Cron 縮放控制器,允許您定義計劃,用于向內或向外擴展工作負載。
擴展群集基礎結構
如果擴展工作負載不足以滿足你的需求,您還可以擴展群集基礎結構本身。
集群縮放
擴展群集基礎結構通常意味著添加或刪除節點. 這可以使用以下兩個可用的自動縮放程序之一來完成:
- Cluster Autoscaler
- Karpenter
兩個擴展器的工作方式都是監視標記為不可調度或未充分利用的節點,然后根據需要添加或刪除節點。
總結
Kubernetes 中的自動縮放是指自動更新管理Pod的工作負載,然后工作負載最終更新Pod定義來實現自動縮放。主要有以下幾種方案:
- HPA:水平縮放,擴縮容Pod實例數量
- VPA:垂直縮放,擴縮容Pod中容器的cpu或mem資源
- CPA:比例縮放,根據集群大小按比例進行HPA
- KEDA:事件驅動縮放,根據外部事件或觸發器水平擴展 Pod
- 集群節點縮放:據需要添加或刪除集群中的worker節點