你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Functions 中的 Linux 容器支持
规划并开发单个函数以在 Azure Functions 中运行时,通常侧重于代码本身。 借助 Azure Functions,只需将代码项目部署到 Azure 中的函数应用即可。 将代码项目部署到 Linux 上运行的函数应用时,该项目将在自动创建的容器中运行。 此容器由 Functions 管理。
Functions 还支持容器化函数应用部署。 在容器化部署中,从受支持的映像在本地 Docker 容器中创建自己的函数应用实例。 然后,可以将此“容器化”函数应用部署到 Azure 中的托管环境。 创建自己的函数应用容器可以自定义或控制函数代码的即时运行时环境。
重要
创建自己的容器时,需要将容器的基础映像更新为受支持的最新基础映像。 Azure Functions 支持的基映像特定于语言,可在 Azure Functions 基础映像存储库中找到。
Functions 团队致力于发布这些基础映像的每月更新。 定期更新包括 Functions 运行时和语言的最新次要版本更新和安全修补程序。 你应该定期从最新的基础映像更新容器,并重新部署更新后的容器版本。
容器托管选项
在 Azure 中托管容器化函数应用有多种选项:
托管选项 | 好处 |
---|---|
Azure Container Apps | Azure Functions 提供集成的支持用于在 Azure 容器应用上开发、部署和管理容器化函数应用。 这样,便可以使用 Azure 门户中的相同 Functions 工具和页面来管理应用。 需要在与其他微服务、API、网站、工作流或任何容器托管程序相同的环境中运行 Azure 中事件驱动的函数时,可以使用 Azure 容器应用托管函数应用容器。 使用容器应用托管,可以在为开源监视、mTLS、Dapr 和 KEDA 提供内置支持的基于 Kubernetes 的受管环境中运行函数。 支持缩放到零,并提供无服务即用即付托管模型。 还可以使用工作负载配置文件请求专用硬件,甚至 GPU。 在 Azure 上运行容器化函数应用的推荐托管选项。 |
已启用 Azure Arc 的 Kubernetes 群集(预览版) | 可以将已启用 Azure Arc 的 Kubernetes 群集上的函数应用托管为仅“代码部署”,也可以在自定义 Linux 容器中托管函数应用。 使用 Azure Arc 可以附加 Kubernetes 群集,以便在 Azure 中管理和配置它们。 在已启用 Azure Arc 的 Kubernetes 群集上托管 Azure Functions 容器目前为预览版。 |
Azure Functions | 可以通过在“弹性高级计划”或“专用计划”中运行容器来托管 Azure Functions 中的容器化函数应用。 高级计划托管提供动态缩放的优势。 你可能想要使用专用计划托管来利用现有的未使用的应用服务计划资源。 |
Kubernetes | 由于 Azure Functions 运行时在托管位置和方式方面具有灵活性,因此可以直接在 Kubernetes 群集中托管和管理函数应用容器。 KEDA (Kubernetes-based Event Driven Autoscaling) 与 Azure Functions 运行时和工具无缝结合,以提供 Kubernetes 中的事件驱动缩放。 请记住,在 Kubernetes 上运行容器化函数应用(通过使用 KEDA 或直接部署)是一项开源工作,你可以免费使用,贡献者和社区会尽最大努力提供支持。 你负责在群集中维护自己的函数应用容器,即使部署到 Azure Kubernetes 服务 (AKS)。 |
功能支持比较
在容器中运行函数应用时,支持 Azure Functions 的各种功能和行为的程度取决于所选的容器托管选项。
功能/行为 | 容器应用(集成) | 容器应用(直接) | 高级计划 | 专用计划 | Kubernetes |
---|---|---|---|---|---|
产品支持 | 是 | No | 是 | 是 | 否 |
Functions 门户集成 | 是 | 无 | 是 | 是 | 无 |
事件驱动的缩放 | 是5 | 是(缩放规则) | 是 | 否 | 否 |
最大缩放(实例) | 10001 | 10001 | 1002 | 10-303 | 因群集而异 |
缩放到零实例 | 是 | 是 | 否 | 否 | KEDA |
执行时间限制 | 无限制6 | 无限制6 | 无限制7 | 无限制8 | 无 |
Core Tools 部署 | func azurecontainerapps |
否 | No | 否 | func kubernetes |
修订 | 无 | 是 | 无 | 无 | 无 |
部署槽位 | 无 | 无 | 是 | 是 | 无 |
流式处理日志 | 是 | 是 | 是 | 是 | 无 |
控制台访问 | 目前不可用4 | 是 | 是(使用 Kudu) | 是(使用 Kudu) | 是(在 pod 中使用 kubectl ) |
冷启动缓解 | 最小副本数 | 缩放规则 | 始终就绪/预热实例 | 不适用 | 不适用 |
应用服务身份验证 | 目前不可用4 | 是 | 是 | 是 | 无 |
自定义域名 | 目前不可用4 | 是 | 是 | 是 | 无 |
私钥证书 | 目前不可用4 | 是 | 是 | 是 | 无 |
虚拟网络 | 是 | 是 | 是 | 是 | 是 |
可用性区域 | 是 | 是 | 是 | 是 | 是 |
诊断 | 目前不可用4 | 是 | 是 | 是 | 无 |
专用硬件 | 是(工作负载配置文件) | 是(工作负载配置文件) | 无 | 是 | 是 |
专用 GPU | 是(工作负载配置文件) | 是(工作负载配置文件) | 无 | 否 | 是 |
可配置内存/CPU 计数 | 是 | 是 | 否 | 无 | 是 |
“免费授予”选项 | 是 | 是 | 否 | No | 否 |
定价详细信息 | 容器应用计费 | 容器应用计费 | 高级计划计费 | 专用计划计费 | AKS 定价 |
服务名称要求 | 2-32 个字符:限制为小写字母、数字和连字符。 必须以字母开头且以字母数字字符结尾。 | 2-32 个字符:限制为小写字母、数字和连字符。 必须以字母开头且以字母数字字符结尾。 | 少于 64 个字符:限制为字母数字字符和连字符。 不能以连字符开头或结尾。 | 少于 64 个字符:限制为字母数字字符和连字符。 不能以连字符开头或结尾。 | 少于 253 个字符:限制为字母数字字符和连字符。 必须以字母数字字符开头和结尾。 |
- 在容器应用上,默认设置为 10 个实例,但你可以设置最多副本数,这样,最多可以设置 1000 个实例。 只要有足够多的可用核心配额,就会遵守此设置。 从 Azure 门户创建函数应用时,实例数量限制为 300 个。
- 在某些区域中,高级计划中的 Linux 应用可以缩放到 100 个实例。 有关详细信息,请参阅高级计划文章。
- 有关各种应用服务计划选项的特定限制,请参阅应用服务计划限制。
- 功能奇偶校验是 Azure 容器应用上集成托管的目标。
- 需要 KEDA;大多数触发器都支持。 若要了解哪些触发器支持事件驱动的缩放,请参阅托管容器应用的注意事项。
- 当最小副本数设置为零时,默认超时取决于应用中使用的特定触发器。
- 不强制实施最大执行超时期限。 不过,为函数执行提供的宽限期在横向缩减期间为 60 分钟,在平台更新期间提供宽限期为 10 分钟。
- 要求将应用服务计划设置为 Always On。 在平台更新期间提供 10 分钟的宽限期。
入门
使用以下链接开始使用 Linux 容器中的 Azure Functions:
我想… | 请参阅文章: |
---|---|
创建第一个容器化函数 | 在本地 Linux 容器中创建函数应用 |
创建函数并将其部署到 Azure 容器应用 | 在 Azure 容器应用上创建第一个容器化函数 |
创建容器化函数并将其部署到 Azure Functions | 创建第一个容器化 Azure Functions |
创建函数并将其部署到已启用 Azure Arc 的 Kubernetes | 在 Azure Arc 上创建第一个容器化 Azure Functions(预览版) |