

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 工作負載擴展
<a name="workload-scaling"></a>

Kubernetes 中的工作負載擴展對於在動態環境中維護應用程式效能和資源效率至關重要。擴展有助於確保應用程式可以處理各種工作負載，而不會降低效能。Kubernetes 可讓您根據即時指標自動擴展或縮減資源，讓組織快速回應流量的變化。這種彈性不僅改善了使用者體驗，還最佳化了資源使用率，有助於最大限度地降低與使用不足或過度佈建資源相關的成本。

此外，有效的工作負載擴展支援高可用性，確保應用程式即使在尖峰需求期間也能保持回應。Kubernetes 中的工作負載擴展透過動態調整容量以滿足目前需求，讓組織能夠更好地利用雲端資源。

本節討論下列類型的工作負載擴展：
+ [水平 Pod Autoscaler](#hpa) 
+ [叢集比例自動擴展器](#cpa)
+ [Kubernetes 型事件驅動自動擴展器](#keda)

## Horizontal Pod Autoscaler
<a name="hpa"></a>

[Horizontal Pod Autoscaler ](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)(HPA) 是一種 Kubernetes 功能，可根據觀察到的 CPU 使用率或其他選取指標，自動調整部署、複寫控制器或狀態集中的 Pod 複本數量。HPA 可確保應用程式可以管理波動的流量和工作負載層級，而不需要手動介入。HPA 提供保留最佳效能的方法，同時有效利用可用資源。

在使用者需求可能隨時間大幅波動的情況下，例如 Web 應用程式、微服務和 APIs，HPA 特別有用。

Horizontal Pod Autoscaler 提供下列主要功能：
+ **自動擴展** – HPA 會自動增加或減少 Pod 複本數量，以回應即時指標，確保應用程式可以擴展以滿足使用者需求。
+ **指標型決策** – 根據預設，HPA 會根據 CPU 使用率進行擴展。不過，它也可以使用自訂指標，例如記憶體用量或應用程式特定的指標，允許更量身打造的擴展策略。
+ **可設定的參數** – 您可以選擇最小和最大複本計數，以及所需的使用率百分比，讓您了解擴展的嚴重性。
+ **與 Kubernetes 整合** – 為了監控和修改資源，HPA 可與 Kubernetes 生態系統的其他元素一起運作，包括指標伺服器、Kubernetes API 和自訂指標轉接器。
+ **更好的資源使用率** – HPA 透過動態修改 Pod 數量，協助確保有效使用資源、降低成本並改善效能。

## 叢集比例自動擴展器
<a name="cpa"></a>

Cluster [proportional Autoscaler](https://github.com/kubernetes-sigs/cluster-proportional-autoscaler) (CPA) 是一種 Kubernetes 元件，旨在根據可用的節點數量自動調整叢集中的 Pod 複本數量。與根據資源使用率指標 （例如 CPU 和記憶體） 擴展的傳統自動擴展器不同，CPA 會根據叢集本身的大小按比例擴展工作負載。

此方法對於需要維持與叢集大小相關的特定備援或可用性層級的應用程式特別有用，例如 CoreDNS 和其他基礎設施服務。CPA 的一些主要使用案例包括下列項目：
+ 過度佈建
+ 橫向擴展核心平台服務
+ 橫向擴展工作負載，因為 CPA 不需要指標伺服器或 Prometheus Adapter

透過自動化擴展程序，CPA 可協助企業維護平衡的工作負載分佈、提高資源效率，並確保應用程式可適當佈建以滿足使用者需求。

Cluster proportional Autoscaler 提供下列主要功能：
+ **節點型擴展** – CPA 會根據可排程的叢集節點數量來擴展複本，讓應用程式能夠根據叢集的大小按比例擴展或收縮。
+ **比例調整** – 為確保應用程式可以根據叢集大小的變更進行擴展，自動擴展器會在節點數量與複本數量之間建立比例關係。此關係用於計算工作負載所需的複本數量。
+ **與 Kubernetes 元件整合** – CPA 可與 Horizontal Pod Autoscaler (HPA) 等標準 Kubernetes 元件搭配使用，但特別著重於節點計數，而非資源使用率指標。此整合允許更全面的擴展策略。
+ **Golang API 用戶端** – 為了監控節點數量及其可用核心，CPA 會使用在 Pod 內執行的 Golang API 用戶端，並與 Kubernetes API 伺服器通訊。
+ **可設定的參數** – 使用者可以使用 `ConfigMap`設定閾值和擴展參數，讓 CPA 用來修改其行為，並確保其遵循預期的擴展計畫。

## Kubernetes 型事件驅動自動擴展器
<a name="keda"></a>

Kubernetes 型事件驅動自動擴展器 ([KEDA](https://keda.sh/)) 是一種開放原始碼專案，可讓 Kubernetes 工作負載根據需要處理的事件數量進行擴展。KEDA 透過允許應用程式動態回應各種工作負載來增強應用程式的可擴展性，尤其是事件驅動的工作負載。

透過根據事件自動化擴展程序，KEDA 可協助組織最佳化資源使用率、改善應用程式效能，並減少與過度佈建相關的成本。這種方法對於遇到不同流量模式的應用程式特別有用，例如微型服務、無伺服器函數和即時資料處理系統。

KEDA 提供下列主要功能：
+ **事件驅動擴展** – KEDA 可讓您根據外部事件來源定義擴展規則，例如訊息佇列、HTTP 請求或自訂指標。此功能有助於確保應用程式因應即時需求進行擴展。
+ **輕量型元件** – KEDA 是一種單一用途的輕量型元件，不需要大量設定或額外負荷即可輕鬆整合至現有的 Kubernetes 叢集。
+ **與 Kubernetes 整合** – KEDA 擴展了 Kubernetes 原生元件的功能，例如 Horizontal Pod Autoscaler (HPA)。KEDA 會將事件驅動的擴展功能新增至這些元件，增強而不是取代它們。
+ **支援多個事件來源** – KEDA 與各種事件來源相容，包括熱門的訊息平台，例如 RabbitMQ、Apache Kafka 等。由於這種適應性，您可以自訂擴展以符合您的唯一事件驅動型架構。
+ **自訂擴展器** – 使用自訂擴展器，您可以指定 KEDA 可用來啟動擴展動作的特定指標，以回應特定商業邏輯或需求。
+ **宣告式組態** – 根據 Kubernetes 原則，您可以使用 KEDA 透過使用 Kubernetes 自訂資源來定義應如何進行擴展，以宣告方式描述擴展行為。