Kubernetes 上使用 KEDA 的 Azure Functions

Azure Functions 运行时可在托管位置和所需方式方面提供灵活性。 KEDA (Kubernetes-based Event Driven Autoscaling) 与 Azure Functions 运行时和工具无缝结合,以提供 Kubernetes 中的事件驱动缩放。

重要

使用 KEDA 或直接部署在 Kubernetes 上运行容器化函数应用是一项开源工作,可以使用免费。 最佳做法支持由参与者和社区提供,途径是在 Azure Functions 存储库中使用 GitHub 问题。 请使用这些问题报告 bug 并提出功能请求。

基于 Kubernetes 的函数的工作原理

Azure Functions 服务由两个关键组件组成:运行时和缩放控制器。 Functions 运行时会运行并执行代码。 运行时包括有关如何触发、记录和管理函数执行的逻辑。 Azure Functions 运行时可以在任意位置运行。 另一个组件是缩放控制器。 缩放控制器监视以函数为目标的事件的速率,并主动缩放运行应用的实例数。 若要了解更多信息,请参阅 Azure Functions 的缩放和托管

基于 Kubernetes 的 Functions 在 Docker 容器中提供 Functions 运行时,通过 KEDA 进行事件驱动缩放。 KEDA 可以横向缩减到零个实例(没有事件发生时),以及横向扩展到 n 个实例。 它通过为 Kubernetes 自动缩放程序(水平 Pod 自动缩放程序)公开自定义指标来实现此功能。 将 Functions 容器与 KEDA 结合使用时,可以在任何 Kubernetes 群集中复制无服务器函数功能。 对于无服务器基础结构,还可以使用 Azure Kubernetes 服务 (AKS) 虚拟节点功能部署这些函数。

在 Kubernetes 中管理 KEDA 和函数

若要在 Kubernetes 群集上运行函数,必须安装 KEDA 组件。 可通过以下方式之一安装此组件:

将函数应用部署到 Kubernetes

可以将任何函数应用部署到运行 KEDA 的 Kubernetes 群集。 由于函数在 Docker 容器中运行,因此项目需要 Dockerfile。 在调用 func init 创建项目时,可使用 --docker 选项来创建 Dockerfile。 如果忘记创建 Dockerfile,则始终可以从代码项目的根目录再次调用 func init

  1. (可选)如果需要创建 Dockerfile,请使用带有 --docker-only 选项的 func init 命令:

    func init --docker-only
    

    若要详细了解 Dockerfile 生成,请查看 func init 参考。

  2. 使用 func kubernetes deploy 命令生成映像并将容器化函数应用部署到 Kubernetes:

    func kubernetes deploy --name <name-of-function-deployment> --registry <container-registry-username>
    

    在本例中,将 <name-of-function-deployment> 替换为函数应用名称。 部署命令执行以下任务:

    • 先前创建的 Dockerfile 用于生成适用于容器化函数应用的本地映像。
    • 本地映像被标记并推送到用户登录的容器注册表。
    • 创建清单并将其应用于定义 Kubernetes Deployment 资源、ScaledObject 资源和 Secrets(包括从 local.settings.json 文件导入的环境变量)的群集。

从专用注册表部署函数应用

以前的部署步骤也适用于专用注册表。 如果要从专用注册表拉取容器映像,请在运行 func kubernetes deploy 时包含引用 Kubernetes 机密(其中保存专用注册表凭据)的 --pull-secret 标志。

将函数应用从 Kubernetes 中删除

部署之后,可以通过删除创建的关联 DeploymentScaledObjectSecrets 来删除函数。

kubectl delete deploy <name-of-function-deployment>
kubectl delete ScaledObject <name-of-function-deployment>
kubectl delete secret <name-of-function-deployment>

从 Kubernetes 卸载 KEDA

可通过以下方式之一从群集中删除 KEDA:

KEDA 中支持的触发器

KEDA 支持以下 Azure 函数触发器:

HTTP 触发器支持

可以使用公开 HTTP 触发器的 Azure Functions,但 KEDA 不会直接管理它们。 你可以使用 KEDA prometheus 触发器将 HTTP Azure Functions 从 1 个扩展到 n 个实例

后续步骤

有关详细信息,请参阅以下资源: