隨著雲原生應用程序的不斷演進,高效且具成本效益地調整基礎設施變得越來越重要。Kubernetes 在此領域發揮了關鍵作用,提供了強大的工具來管理容器化工作負載。其中一個工具是 KEDA(Kubernetes 事件驅動的自動調整),它根據應用需求提供精細的調整控制。在這篇文章中,我們將探索 KEDA 的概念和架構,並與其他 Kubernetes 調整工具(如 Karpenter 和 HPA)進行比較,討論 KEDA 和 HPA 如何協同工作,以提供可擴展且具成本效益的解決方案。

什麼是 KEDA?

KEDA,全稱 Kubernetes Event-driven Autoscaling,是一個開源項目,它擴展了 Kubernetes 的原生水平 Pod 自動調整器(HPA),以支持基於事件的調整。在 Kubernetes 中,傳統的調整通常依賴於 CPU 和內存使用等指標。然而,在許多情況下,這些指標無法準確反映基於外部事件(如消息隊列或 HTTP 請求)進行調整的需求。

KEDA 通過允許 Kubernetes 應用程序基於事件源(如 Azure 隊列存儲、Kafka、RabbitMQ、Prometheus 指標等)進行調整,解決了這一問題。通過與這些事件源集成,KEDA 可以根據需求調整工作負載的縮放,確保應用程序保持響應性,同時優化資源使用。

KEDA 的架構

KEDA 作為 Kubernetes 集群中的輕量級組件運行,增強了原生 HPA 功能。KEDA 的核心組件包括:

  1. KEDA Operator:KEDA Operator 負責管理 KEDA ScaledObjects 和 ScaledJobs 的生命周期。它監控事件源,根據配置的閾值觸發工作負載的調整,並與 Kubernetes 控制平面集成。

  2. Scalers:Scalers 負責將 KEDA 與各種事件源連接。每個 Scaler 實現從事件源獲取指標並將其轉換為 HPA 可用的格式的邏輯。KEDA 支持廣泛的 Scaler,包括針對特定用例的自定義 Scaler。

  3. ScaledObjects:ScaledObject 是一種自定義的 Kubernetes 資源,用於定義特定工作負載的調整行為。它指定事件源、調整閾值以及其他決定工作負載何時以及如何調整的參數。

  4. ScaledJobs:與 ScaledObjects 類似,ScaledJobs 定義了基於事件驅動指標的 Kubernetes Jobs 的調整行為。

KEDA 與 Karpenter 的比較

Karpenter 是另一個 Kubernetes 中的自動調整工具,但其運行方式與 KEDA 不同。KEDA 著眼於基於外部事件調整工作負載,而 Karpenter 是一種集群自動調整器,根據集群中資源需求來配置或釋放節點。

主要差異:

  • 範圍:KEDA 根據外部事件調整 Pod,而 Karpenter 調整底層基礎設施(節點)以滿足整體資源需求。
  • 用例:KEDA 適合需要根據特定觸發器調整的事件驅動應用程序。Karpenter 更適合需要基於集群資源需求優化節點配置的動態環境。
  • 粒度:KEDA 在 Pod 級別運行,調整副本數量;而 Karpenter 在節點級別運行,調整集群中的節點數量。

KEDA 與 HPA 的比較

KEDA 通過引入基於事件的調整,擴展了 Kubernetes 的水平 Pod 自動調整器(HPA)功能。HPA 是 Kubernetes 的原生功能,基於 CPU 和內存使用等資源指標調整 Pod 副本數量。

主要差異:

  • 指標:HPA 主要使用資源指標(CPU、內存)作為調整決策依據。而 KEDA 支持更廣泛的指標,包括基於事件驅動的指標。
  • 靈活性:KEDA 提供了更大的靈活性,允許您定義自定義指標和事件源,從而更精細地控制調整行為。

KEDA 與 HPA 的協同工作

KEDA 不會取代 HPA,而是增強其功能。在 Kubernetes 集群中部署 KEDA 時,它可以從事件源生成自定義指標並將其提供給 HPA。這使得 HPA 可以基於傳統資源指標和事件驅動指標做出調整決策。

例如,如果您有一個處理 Kafka 隊列消息的應用程序,KEDA 可以監控隊列的長度,並在消息數量超過某個閾值時觸發調整。HPA 隨後使用此指標以及 CPU 和內存使用情況來調整 Pod 副本數量。

可擴展性與成本效益

KEDA 通過提供對何時以及如何調整工作負載的精細控制,增強了可擴展性。通過響應特定事件,KEDA 確保您的應用程序在需求高峰期進行擴展,在空閒時期縮減,從而減少不必要的資源消耗。

這種基於事件驅動的方法本質上是具成本效益的,因為它最大限度地減少了資源過度配置。傳統的調整方法可能會基於高 CPU 或內存使用導致資源過度配置,即使實際的應用需求很低。而 KEDA 根據實際使用模式和外部觸發器進行調整,確保僅在需要時使用必要的資源。

此外,KEDA 與各種事件源的集成使您能夠針對不同類型的工作負載(無論是突發型、長期運行型還是需要特定資源閾值的工作負載)優化基礎設施。

結論

KEDA 是一種強大的工具,它通過引入基於事件的調整增強了 Kubernetes 的原生自動調整功能。其架構設計與 HPA 無縫協作,使您能夠根據廣泛的指標(包括外部事件)調整工作負載。與 Karpenter 等工具相比,KEDA 提供了一種更精細的 Pod 調整方法,是事件驅動應用程序的理想選擇。

通過利用 KEDA,您可以實現一個可擴展且具成本效益的 Kubernetes 環境,能夠動態響應應用程序的需求。無論您處理的是微服務、批處理還是實時數據管道,KEDA 提供了優化基礎設施所需的靈活性和效率。