借助 Azure Kubernetes 服务 (AKS) 中的 Kubernetes 事件驱动自动缩放 (KEDA) 加载项,简化应用程序自动缩放

Important

AKS 的 KEDA 加载项目前不支持修改指标服务器操作器的 CPU 请求、限制和其他 Helm 值。 使用加载项时,请记住此限制。 如有任何问题,请随时联系这里

Kubernetes 事件驱动的自动缩放(KEDA)是一个单一用途和轻型组件,使应用程序自动缩放变得简单。 它是一个云原生计算基础(NCF)研究生项目。 KEDA 使用事件驱动的自动缩放来缩放应用程序,以可持续且经济高效的方式满足需求,且可缩放到零。

如果你使用 AKS 标准版,则可以通过托管 KEDA 加载项启用 KEDA。

注意

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

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

体系结构

KEDA 提供两个主要组件:

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

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

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

安装和启用

AKS 标准版

使用以下方法之一在 AKS Standard 上启用 KEDA:

托管的 KEDA 加载项提供受全面支持且与 AKS 集成的 KEDA 部署。

功能和特性

KEDA 提供以下功能和特性:

  • 当需求下降时,将工作负荷缩放为零。
  • 使用 AZURE KEDA 缩放程序缩放应用程序工作负荷以满足需求。
  • 通过使用 ScaledObjects(例如 Deployments、StatefulSets 或任何定义了 /scale 子资源的自定义资源),可对应用程序进行自动扩缩容。
  • 使用 ScaledJobs 对类作业工作负载进行自动缩放。
  • 通过将自动缩放身份验证与工作负载分离来使用生产级安全性。
  • 使用您自己的外部扩缩器来实现自定义自动扩缩逻辑。
  • Microsoft Entra Workload ID集成以进行身份验证。

注意

如果计划在 AKS 标准版上使用工作负荷标识,请在启用 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 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_IDAZURE_FEDERATED_TOKEN_FILEAZURE_AUTHORITY_HOST 的值。

支持的 Kubernetes 和 KEDA 版本

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

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