Azure Functions运行时提供灵活性,让您可以自由选择托管的位置和方式。 KEDA(基于 Kubernetes 的事件驱动自动缩放)与 Azure Functions 运行时和工具无缝协同工作,以在 Kubernetes 中提供事件驱动的扩展性。
重要
使用 KEDA 或直接部署在 Kubernetes 上运行容器化函数应用是一个开源项目,可以免费使用。 通过使用Azure Functions存储库中的GitHub问题,参与者和社区提供了尽力而为的支持。 请使用这些条目来报告漏洞并提出功能请求。
基于 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 组件。 可通过以下方式之一安装此组件:
Azure Functions Core Tools:使用
func kubernetes install命令。Helm:可通过多种方式在任何 Kubernetes 群集中安装 KEDA,包括 Helm。 KEDA 站点上提供了部署选项。
将函数应用部署到 Kubernetes
可以将任何函数应用部署到运行 KEDA 的 Kubernetes 群集。 由于函数在 Docker 容器中运行,因此项目需要 Dockerfile。 在调用 func init。
(可选)如果需要创建 Dockerfile,请使用带有
func init选项的--docker-only命令:func init --docker-only若要详细了解 Dockerfile 生成,请参阅
func init文档。使用
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 中删除
部署之后,可以通过删除创建的关联 Deployment、ScaledObject 和 Secrets 来删除函数。
kubectl delete deploy <name-of-function-deployment>
kubectl delete ScaledObject <name-of-function-deployment>
kubectl delete secret <name-of-function-deployment>
从 Kubernetes 卸载 KEDA
可通过以下方式之一从群集中删除 KEDA:
Azure Functions Core Tools:使用
func kubernetes remove命令。Helm:请参阅 KEDA 站点上的卸载步骤。
KEDA 中支持的触发器
KEDA 支持以下Azure函数触发器:
HTTP 触发器支持
可以使用公开 HTTP 触发器的Azure Functions,但 KEDA 不会直接管理它们。 可以使用 KEDA Prometheus 触发器将 HTTP Azure Functions 从一个实例缩放至n个实例。
后续步骤
有关详细信息,请参阅以下资源: