合并容器和无服务器方法
云原生应用程序通常利用容器和业务流程实现服务。 通常有机会将应用程序的一些服务公开为 Azure Functions。 但是,将云原生应用部署到 Kubernetes 后,如果能在这个相同的工具集中利用 Azure Functions,是一个不错的选择。 幸运的是,可以在 Docker 容器内包装 Azure Functions,然后使用与基于 Kubernetes 的其他应用相同的流程和工具部署它们。
什么时候将容器与无服务器一起使用才有意义?
Azure 函数不知道它部署在哪个平台上。 在某些情况下,你可能有特定要求,并且需要自定义运行函数代码的环境。 你需要一个支持依赖项的自定义映像,或者一个默认映像不支持的配置。 在这些情况下,将函数部署在一个自定义的 Docker 容器中是有意义的。
何时应避免使用容器和 Azure Functions?
如果要使用消耗计费,则不能运行容器中的函数。 此外,如果将函数部署到 Kubernetes 群集,将不再受益于 Azure Functions 提供的内置缩放。 你需要使用 Kubernetes 的缩放功能,如本章前面的内容所述。
如何结合使用无服务器容器和 Docker 容器
若要将 Azure 函数包装在 Docker 容器中,请安装 Azure Functions Core Tools,然后运行以下命令:
func init ProjectName --worker-runtime dotnet --docker
创建项目后,它将包括一个 Dockerfile 和配置为 dotnet
的辅助角色运行时。 现在,可以在本地创建和测试函数了。 使用 docker build
和 docker run
命令生成并运行它。 有关开始使用 Docker 支持生成 Azure Functions 的详细步骤,请参阅使用自定义映像在 Linux 上创建函数教程。
如何将无服务器和 Kubernetes 与 KEDA 结合使用
在本章中,你已了解 Azure Functions 平台会自动横向扩展以满足需求。 但是,将容器化函数部署到 AKS 时,会丢失内置的缩放功能。 基于 Kubernetes 的事件驱动 (KEDA) 可以进行补救。 它为包括容器化函数在内的启用精细自动缩放 event-driven Kubernetes workloads
。
KEDA 为 Docker 容器中的 Functions 运行时提供了事件驱动的缩放功能。 KEDA 可以根据负载,从零实例(当没有事件发生时)横向扩展到 n instances
。 它通过向 Kubernetes 自动缩放程序公开自定义指标(水平 Pod 自动缩放程序)来实现自动缩放。 将 Functions 容器与 KEDA 结合使用时,可以在任何 Kubernetes 群集中复制无服务器函数功能。
需要注意的是,KEDA 项目现在由云原生计算基金会 (CNCF) 托管。