使用 Azure CLI 安裝 Kubernetes 事件驅動自動調整 (KEDA) 附加元件

重要

AKS 的 KEDA 附加元件目前不支援修改 計量伺服器 或 操作員 的 CPU 要求或限制和其他 Helm 值。 使用附加元件時請記住這項限制。 如果您有任何問題,請隨意 在這裡聯繫。

本文說明如何使用 Azure CLI 將 Kubernetes 事件驅動自動調整 (KEDA) 附加元件安裝至 Azure Kubernetes Service (AKS)。

重要

您的叢集 Kubernetes 版本會決定 AKS 叢集上將安裝的 KEDA 版本。 若要查看哪些 KEDA 版本對應至每個 AKS 版本,請參閱 Kubernetes 元件版本資料表的 [AKS 受控附加元件] 資料行。

針對正式發行 Kubernetes 版本,AKS 會完整支援資料表中對應的 KEDA 次要版本。 客戶支援部門將盡力而為,對 Kubernetes 預覽版本和最新 KEDA 修補程式提供部分支援。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:

注意

KEDA 版本 2.15+ 導入重大變更,會移除 Pod 身分識別支援。 如果您使用 Pod 身分識別,我們建議您移至 Workload 身分識別來進行驗證。 雖然 KEDA 受控附加元件目前未執行 KEDA 2.15 版+,但它將會開始在 AKS 預覽 1.31 版中執行。

如需有關如何使用工作負載身分識別安全地調整應用程式的詳細資訊,請閱讀我們的教學課程。 若要檢視 KEDA 的重大變更/廢止政策,請閱讀其官方文件。

開始之前

注意

如果您使用 Microsoft Entra 工作負載 ID,且在 Workload ID 之前啟用 KEDA,您需要重新啟動 KEDA Operator Pod,以便系統插入正確的環境變數:

  1. 執行 kubectl rollout restart deployment keda-operator -n kube-system 來重新啟動 pod。

  2. 使用 kubectl get pod -n kube-system 來取得 KEDA 運算子 Pod,並找出開頭為 keda-operator 的 Pod。

  3. 執行 kubectl describe pod <keda-operator-pod> -n kube-system,以確認成功插入環境變數。 在 Environment 下方,您應該會看到 AZURE_TENANT_ID、AZURE_FEDERATED_TOKEN_FILE 和 AZURE_AUTHORITY_HOST 的值。

使用 Azure CLI 安裝 KEDA 附加元件

若要安裝 KEDA 附加元件,請在建立或更新叢集時使用 --enable-keda。

啟用 AKS 叢集上的 KEDA 附加元件

注意

雖然 KEDA 提供各種自訂選項,但 KEDA 附加元件目前提供基本的一般組態。

如果您需要自訂組態,您可以手動編輯 KEDA YAML 檔案來自訂安裝。 Azure 不提供自訂組態的支援。

建立啟用 KEDA 附加元件的新 AKS 叢集

  1. 使用 az group create 命令建立資源群組。

    az group create --name myResourceGroup --location eastus
    
  2. 使用 az aks create 命令建立新的 AKS 叢集,並使用 --enable-keda 旗標啟用 KEDA 附加元件。

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --enable-keda \
        --generate-ssh-keys
    

為現有 AKS 叢集啟用 KEDA 附加元件

  • 使用 az aks update 命令更新現有叢集,並使用 --enable-keda 旗標啟用 KEDA 附加元件。

    az aks update \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --enable-keda 
    

取得叢集的認證

  • 使用 az aks get-credentials 命令取得 AKS 叢集的認證。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

驗證叢集上已安裝 KEDA 附加元件

  • 驗證您的叢集是否已安裝 KEDA 附加元件,使用 az aks show 命令,並將 --query 參數設定為 workloadAutoScalerProfile.keda.enabled。

    az aks show --resource-group myResourceGroup --name myAKSCluster --query "workloadAutoScalerProfile.keda.enabled" 
    

    下列範例輸出顯示已在叢集上安裝 KEDA 附加元件:

    true
    

驗證 KEDA 正在您的叢集上執行

  • 使用 kubectl get pods 命令,驗證 KEDA 附加元件正在您的叢集上執行。

    kubectl get pods -n kube-system 
    

    下列輸出範例顯示叢集上已安裝 KEDA Operator、Admissions Hook 和 Metrics API Server:

    keda-admission-webhooks-**********-2n9zl           1/1     Running   0            3d18h
    keda-admission-webhooks-**********-69dkg           1/1     Running   0            3d18h
    keda-operator-*********-4hb5n                      1/1     Running   0            3d18h
    keda-operator-*********-pckpx                      1/1     Running   0            3d18h
    keda-operator-metrics-apiserver-**********-gqg4s   1/1     Running   0            3d18h
    keda-operator-metrics-apiserver-**********-trfcb   1/1     Running   0            3d18h
    

驗證叢集上的 KEDA 版本

若要驗證 KEDA 的版本,請使用 kubectl get crd/scaledobjects.keda.sh -o yaml 。 例如:

kubectl get crd/scaledobjects.keda.sh -o yaml 

下列範例輸出顯示 app.kubernetes.io/version 標籤中的 KEDA 組態:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.9.0
    meta.helm.sh/release-name: aks-managed-keda
    meta.helm.sh/release-namespace: kube-system
  creationTimestamp: "2023-08-09T15:58:56Z"
  generation: 1
  labels:
    app.kubernetes.io/component: operator
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: keda-operator
    app.kubernetes.io/part-of: keda-operator
    app.kubernetes.io/version: 2.10.1
    helm.toolkit.fluxcd.io/name: keda-adapter-helmrelease
    helm.toolkit.fluxcd.io/namespace: 64d3b6fd3365790001260647
  name: scaledobjects.keda.sh
  resourceVersion: "1421"
  uid: 29109c8c-638a-4bf5-ac1b-c28ad9aa11fa
spec:
  conversion:
    strategy: None
  group: keda.sh
  names:
    kind: ScaledObject
    listKind: ScaledObjectList
    plural: scaledobjects
    shortNames:
    - so
    singular: scaledobject
  scope: Namespaced
  # Redacted due to length

如果您遇到 OOMKill 錯誤,請垂直調整 keda-operator

如果 keda-operator Pod 遇到 OOMKill 錯誤,您可以使用垂直 Pod 自動調整器 (VPA) 自動調整 CPU 和記憶體限制。

  1. 請使用 az aks update 命令在您的 AKS 叢集中啟用 VPA。

    az aks update \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --enable-vpa
    
  2. 建立一個名為 keda-operator-vpa.yaml 的檔案,並使用以下的 VPA 配置針對 keda-operator 部署。

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: keda-operator-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind: Deployment
        name: keda-operator
      updatePolicy:
        updateMode: "InPlaceOrRecreate"
    
  3. 用指令 kubectl apply 將 VPA 設定套用到你的叢集。

    kubectl apply -f keda-operator-vpa.yaml
    

    VPA 會根據觀察到的使用情況,自動調整 Keda 操作員 Pod 的 CPU 與記憶體請求與限制。

停用 AKS 叢集上的 KEDA 附加元件

  • 使用具有 az aks update 旗標的 --disable-keda 命令,停用叢集上的 KEDA 附加元件。

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --disable-keda 
    

下一步

本文已說明如何使用 Azure CLI 在 AKS 叢集上安裝 KEDA 附加元件。

在叢集上安裝 KEDA 附加元件之後,您可以部署應用程式範例,開始縮放應用程式。

如需 KEDA 疑難排解的相關資訊,請參閱 Kubernetes 事件驅動自動調整 (KEDA) 附加元件疑難排解。

若要深入了解,請檢視上游 KEDA 文件。