使用 Kubernetes Event-driven Autoscaling (KEDA) 加载项简化的应用程序自动缩放

Kubernetes 事件驱动的自动缩放(KEDA)是一个单一用途和轻型组件,旨在使应用程序自动缩放变得简单,并且是一个云原生计算联合(CNCF)研究生项目。

它应用事件驱动的自动缩放来缩放应用程序,以可持续且经济高效的方式满足需求,并采用缩放到零。

KEDA 附加产品通过部署托管 KEDA 安装,为你提供丰富的 Azure KEDA 缩放程序目录,可以在 Azure Kubernetes 服务 (AKS) 群集上使用这些缩放程序来扩展应用程序,从而使工作更加轻松。

注意

KEDA 版本 2.15+ 引入了一项中断性变更,可删除 Pod 标识支持。 如果你在使用 Pod 标识,建议转用工作负载标识进行身份验证。 虽然 KEDA 托管加载项当前未运行 KEDA 版本 2.15+,但它将在 AKS 预览版 1.32 中开始运行它。

有关如何使用工作负荷标识安全地缩放应用程序的详细信息,请阅读我们的 教程。 如需查看 KEDA 的重大变更/弃用政策,请阅读其 官方文档

体系结构

KEDA 提供两个主要组件:

  • KEDA 操作器 允许最终用户在支持多个 Kubernetes 部署、作业或任何定义 StatefulSets 子资源的自定义资源的情况下,将工作负载从 0 扩展到 N 个实例。
  • 指标服务器向 Kubernetes 中的 Horizontal Pod Autoscaler (HPA) 公开外部指标,用于自动缩放,例如 Kafka 主题中的消息或 Azure 事件中心的事件数。 由于上游限制,KEDA 必须是唯一安装的外部指标适配器。

此图显示了 KEDA 的体系结构及其扩展 Kubernetes 的方式。

详细了解 KEDA 在官方 KEDA 文档中的工作方式。

安装

可以通过使用 ARM 模板Azure CLI 启用 KEDA 加载项,将 KEDA 添加到 Azure Kubernetes 服务 (AKS) 群集。

KEDA 加载项提供与 AKS 集成的完全受支持的 KEDA 安装。

功能和特性

KEDA 提供以下功能和特性:

  • 使用缩放到零构建可持续且经济高效的应用程序
  • 使用丰富的 Azure KEDA 缩放程序目录缩放应用程序工作负载以满足需求
  • 使用ScaledObjects、例如部署StatefulSets或任何定义/scale子资源的自定义资源来自动缩放应用程序
  • 使用 ScaledJobs 自动缩放类似作业的工作负载
  • 通过将自动缩放身份验证与工作负载分离来使用生产级安全性
  • 自带外部缩放器,以使用定制的自动缩放决策
  • Microsoft Entra 工作负载 ID 集成以进行身份验证

注意

如果计划使用工作负载标识,请在启用 KEDA 附加产品之前启用工作负载标识附加产品

附加限制

KEDA AKS 加载项具有以下限制:

  • KEDA 的 HTTP 加载项(预览版)未随扩展一起安装 HTTP 工作负载,但可以单独部署。
  • KEDA 的用于 Azure Cosmos DB 的外部缩放程序基于 Azure Cosmos DB 更改源进行缩放,不会随扩展一起安装,但可以单独部署。
  • Kubernetes 群集中只允许使用一个外部指标服务器。 因此,KEDA 加载项应该是群集中唯一的外部指标服务器。
    • 不支持多个 KEDA 安装
  • 不建议将 KEDA 与 ScaledObject 水平 Pod 自动缩放程序(HPA)组合在一起,以缩放相同的工作负荷。 它们彼此竞争,因为 KEDA 在后台使用水平 Pod 自动缩放程序(HPA),并导致异常的缩放行为。
    • 如果先创建了 HPA,然后创建 KEDA ScaledObject,则 KEDA ScaledObject 将无法创建。
    • 首先创建 KEDA ScaledObject,然后创建 HPA,这不会阻止 HPA 的创建。

对于一般 KEDA 问题,我们建议访问常见问题解答概述

注意

如果使用 Microsoft Entra 工作负载 ID,并且在工作负载 ID 之前启用 KEDA,则需要重启 KEDA 运算符 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_IDAZURE_FEDERATED_TOKEN_FILEAZURE_AUTHORITY_HOST 的值。

支持的 Kubernetes 和 KEDA 版本

群集 Kubernetes 版本确定 AKS 群集上安装的 KEDA 版本。 若要查看哪些 KEDA 版本映射到每个 AKS 版本,请参阅 Kubernetes 组件版本表的“AKS 托管附加产品”列。

对于 GA Kubernetes 版本,AKS 提供对表中相应 KEDA 次要版本的完全支持。 客户支持部门会尽力为 Kubernetes 预览版和最新的 KEDA 修补程序提供部分支持。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

后续步骤