AutoScaling - Introduction
什麼是 AutoScaling?
AutoScaling(自動擴展)是 Kubernetes 提供的一種機制,用於根據工作負載的需求自動調整計算資源的數量。 這有助於確保應用程式在高負載時獲得足夠的資源,並在低負載時釋放不必要的資源,以提高資源利用率並降低成本。
AutoScaling 的種類
Kubernetes 提供了多種 AutoScaling 機制,包括:
- Cluster Autoscaler(叢集自動擴展)
- Cluster Autoscaler 會根據叢集中未滿足的資源需求,自動增加或減少節點(Nodes)的數量。 當有 Pod 因資源不足而無法排程時,Cluster Autoscaler 會擴展節點數量; 反之,當某些節點上的 Pod 都被重新調度到其他節點後,該節點可能會被移除,以節省資源。
- Horizontal Pod Autoscaler (HPA)(水平 Pod 自動擴展)
- HPA 透過監測 Pod 的 CPU、記憶體使用率或其他自訂指標,根據負載動態調整 Pod 的數量。 例如,當 CPU 使用率超過閾值時,HPA 會增加 Pod 來分散負載;當負載降低時,HPA 會減少 Pod,以降低資源消耗。
- Vertical Pod Autoscaler (VPA)(垂直 Pod 自動擴展)
- VPA 主要用來動態調整單個 Pod 的資源限制(CPU、記憶體),而不是 Pod 數量。 當應用程式的資源需求增加時,VPA 會建議或自動調整 Pod 的 requests 和 limits,使其獲得足夠的資源,而不需要手動修改配置。
- Multidimensional Pod Autoscaler (MPA)(多維度 Pod 自動擴展)
- MPA 是 HPA 和 VPA 的結合體,允許根據多種指標(如 CPU、記憶體、I/O、網路吞吐量等)同時調整 Pod 的數量與資源配置。 這種方式提供了更細緻的資源管理,以滿足應用程式的不同需求。
- Custom Pod Autoscaler (CPA)(自訂 Pod 自動擴展)
- CPA 允許使用者根據自訂邏輯來決定何時擴展或縮減 Pod,例如基於業務指標(如佇列長度、請求數量等)來動態調整資源配置。 可搭配 Kubernetes Event-driven Autoscaling (KEDA),透過事件驅動的方式(如 Kafka、RabbitMQ)觸發擴展, 或使用 Prometheus Adapter,根據 Prometheus 收集的指標(如請求率、記憶體使用率)來調整 Pod 數量,使擴展策略更靈活且符合應用需求。
1. Cluster Autoscaler
Cluster Autoscaler 主要負責根據 Pod 的需求自動調整節點(Node)的數量,當資源不足時會新增節點,當某些節點上的 Pod 可以被重新調度時,會自動縮減節點數量,並可與 Node Pool 搭配,根據不同類型的節點來動態調整資源以適應應用需求。
主要功能
- Scale-up(擴展):當 Pod 處於 Unschedulable 狀態時,Cluster Autoscaler 會在約 10 秒內判斷是否需要擴展,並觸發新增節點的動作,但實際上新節點啟動並變為可用狀態可能需要數分鐘到十多分鐘。
- Scale-down(縮減):Cluster Autoscaler 會定期(預設每 10 秒)檢查整體 CPU 和記憶體使用量是否低於閾值,並確保沒有受調度限制的 Pod 或 Node,然後再進行節點縮減。
- 與雲端供應商整合:支援 AWS、GCP、Azure 等雲端平台的自動擴展。
適用場景
- 動態變化的工作負載,例如 AI 訓練、CI/CD 工作流等。
- 避免為應對高峰期而長時間維持過多閒置資源。