使用 KEDA 進行自動擴縮容

此功能仍處於實驗階段。

KEDA 代表 Kubernetes 事件驅動自動擴縮容(Kubernetes Event Driven Autoscaling)。 KEDA 是一個自定義控制器,允許使用者建立與 Kubernetes Horizontal Pod Autoscaler 的自定義繫結。自動擴縮容器會根據處於 queued(佇列中)或 running(執行中)狀態的任務數量來調整活躍 Celery 工作程序的數量。

helm repo add kedacore https://kedacore.github.io/charts

helm repo update

kubectl create namespace keda

helm install keda kedacore/keda \
    --namespace keda \
    --version "v2.0.0"

透過在 helm 命令中或 values.yaml 檔案中設定 workers.keda.enabled=true 來為 Airflow 例項啟用此功能。

kubectl create namespace airflow
helm repo add apache-airflow https://airflow.apache.tw
helm install airflow apache-airflow/airflow \
    --namespace airflow \
    --set executor=CeleryExecutor \
    --set workers.keda.enabled=true

將在 Airflow 名稱空間中建立一個 ScaledObject 物件和一個 hpa

KEDA 將透過查詢 Airflow 元資料資料庫來確定所需的 Celery 工作程序數量。

SELECT
    ceil(COUNT(*)::decimal / {{ .Values.config.celery.worker_concurrency }})
FROM task_instance
WHERE state='running' OR state='queued'

注意

透過 Helm 值 config.celery.worker_concurrency 來設定 Celery 工作程序併發數(即,不要透過 airflow.cfg 或環境變數設定),這樣 KEDA 觸發器才能與工作程序併發設定保持一致。

此條目有幫助嗎?