我們已了解多種管理 Pod 副本分佈來保持服務高可用的方法,若再結合 HPA (Horizontal Pod Autoscaling) 的功能,便能根據 Pod CPU / Memory 自動擴/縮容 Pod 副本,達到系統的高可用性與良好的資源利用率。
📘 HPA 的詳細使用方式可參閱官方文件或 2023/day-29-Kubernetes 介紹-Pod 水平自動伸縮 (Horizontal Pod Autoscaler)
然而,HPA 存在一些限制:
KEDA(Kubernetes Event-Driven Autoscaling)是 CNCF 的一個專案,它能增強 HPA 的功能,提供更靈活的擴/縮容能力,使 Kubernetes 能夠根據更多類型的指標進行自動調整,並實現更高效的資源管理。
KEDA 故名思義,是一個基於 Event-driven 的 自動擴/縮容組件,它允許使用多種外部服務作為事件來源,從而更靈活地控制 Pod 的擴/縮容,適用於多樣化的場景。例如:
在 Kubernetes 中,KEDA 透過以下三個主要組件與 HPA 協同合作來實現自動擴/縮容的功能。
📘 KEDA Controller 僅負責 Pod 副本數的 0 -> 1 或 1 -> 0 的擴/縮容,其餘的擴/縮容(如 1 -> n 或 n -> 1)由 HPA 利用 external metrics 處理。
Metrics Adapter : 將外部事件轉為 metrics 提供給 HPA 作為 external metrics,進行進一步擴/縮容決策。
Admission Webhooks:用於驗證 Kubernetes 資源的變更,防止配置錯誤。
簡而言之,KEDA 會監控外部服務(如 Prometheus)提供的 metrics,透過 Metrics Adapter 將這些 metrics 傳遞給 Controller 和 HPA,依據指標數據來動態調整 Workload 的副本數。
ScaledObjects:
ScaledJob:
與 ScaledObjects 相似,但管理的是 Kubernetes Job 的擴展策略。
TriggerAuthentication:
ClusterTriggerAuthentication:
這幾天我們會在本地的 kind,安裝 KEDA 並進行實驗其功能性。
helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install keda kedacore/keda --namespace keda --create-namespace
能 kubernetes 中建立了一個新的 namespace: keda
,裡面運作了三個 Deployment,分別就是 KEDA 提供服務三個主要組件
kubectl get deployments.apps -n keda
NAME READY UP-TO-DATE AVAILABLE AGE
keda-admission-webhooks 1/1 1 1 21h
keda-operator 1/1 1 1 21h
keda-operator-metrics-apiserver 1/1 1 1 21h
明天我們會介紹 KEDA 的 CRD,並使用 Prometheus 的 metrics 當作擴展策略。