Azure 容器实例的最佳做法和注意事项

Azure 容器实例 (ACI) 允许打包、部署和管理云应用程序,而无需管理底层基础结构。 在 ACI 上运行的常见方案包括突发工作负载、任务自动化和生成作业。 可以通过定义每个容器组所需的资源(包括 vCPU 和内存)来使用 ACI。 ACI 是一款出色的解决方案,适用于可在独立容器中运行的任何方案。 ACI 提供快速启动时间、虚拟机监控程序级别安全性、自定义容器大小等。 以下信息可帮助你确定 Azure 容器实例是否最适合你的方案。

注意事项

通过命令行界面 (CLI) 传递的用户凭据以纯文本形式存储在后端。 以纯文本形式存储凭证存在安全风险;Azure 建议客户将用户凭据存储在 CLI 环境变量中,以确保它们在存储在后端时进行加密/转换。

有一些默认限制可能需要增加配额。 有关更多详细信息,请参阅:ACI 的资源可用性和配额限制 - Azure 容器实例 | Azure Learn

容器映像不能大于 15 GB,超出此大小的任何映像都可能导致意外行为:容器映像可以有多大?

如果容器映像大于 15 GB,可以装载 Azure 文件共享来存储映像。

如果容器组重启,容器组的 IP 可能会更改。 对于你的情况,建议不要使用硬编码的 IP 地址。 如果需要静态公共 IP 地址,请使用应用程序网关:容器组的静态 IP 地址 - Azure 容器实例 | Azure Learn。 若要确保即使重新创建容器组,也仍可通过其域名访问容器组,则可使用 Init 容器:使用初始化容器部署 Azure 容器实例 | Azure Learn

有些端口为服务功能而预留。 建议不要使用这些端口,因为这会导致意外行为:ACI 服务是否为服务功能预留端口?

由于平台维护事件,容器组可能会重启。 这些维护事件是为了确保底层基础结构的持续改进:容器已独立重启,且没有显式用户输入

ACI 不允许特权容器操作。 对于你的情况,建议不要依赖于使用根目录。

最佳做法

建议在多个区域中运行容器组,以便当一个区域出现问题时,工作负载可以继续运行。

对于你的情况,建议不要使用硬编码 IP 地址,因为无法保证容器组的 IP 地址。 若要缓解连接问题,建议配置网关。 如果容器位于公共 IP 地址后面,并且需要静态公共 IP 地址,请使用应用程序网关。 如果容器位于虚拟网络后面,并且需要静态 IP 地址,建议使用 NAT 网关

其他 Azure 容器选项

Azure Container Apps

Azure Container Apps 使你能够基于容器构建无服务器微服务。 Azure Container Apps 不提供对基础 Kubernetes API 的直接访问。 如果需要访问 Kubernetes API 和控制平面,应使用 Azure Kubernetes 服务。 但是,如果要构建 Kubernetes 风格的应用程序,并且不需要直接访问所有原生 Kubernetes API 和群集管理,则 Container Apps 可提供基于最佳做法的完全托管体验。 由于这些原因,许多团队可能更愿意使用 Azure Container Apps 来开始构建容器微服务。

Azure 应用服务

Azure 应用服务为 Web 应用程序(包括网站和 Web API)提供完全托管的托管平台。 可以使用代码或容器来部署这些 Web 应用程序。 Azure 应用服务针对 Web 应用程序进行了优化。 Azure 应用服务已与其他 Azure 服务(包括 Azure Container Apps 和 Azure Functions)集成。 如果你打算构建 Web 应用,Azure 应用服务是理想的选择。

Azure 容器实例

Azure 容器实例 (ACI) 按需提供 Hyper-v 隔离容器的单个 Pod。 与 Container Apps 相比,可以将其视为较低级别的“构建基块”选项。 缩放、负载均衡和证书等概念不随 ACI 容器一起提供。 例如,要扩展到五个容器实例,可以创建五个不同的容器实例。 Azure Container Apps 提供许多基于容器的、特定于应用程序的概念,包括证书、修订版、扩展和环境。 用户经常通过其他服务与 Azure 容器实例交互。 例如,Azure Kubernetes 服务可以通过虚拟节点,将业务流程分层,并基于 ACI 进行扩展。 如果你需要较不“固定的”构建基块,并且该构建基块不符合 Azure Container Apps 针对其进行了优化的方案,则 Azure 容器实例是理想的选择。

Azure Kubernetes 服务

Azure Kubernetes 服务 (AKS) 在 Azure 中提供完全托管的 Kubernetes 选项。 它支持直接访问 Kubernetes API,并且能够运行任何 Kubernetes 工作负载。 整个群集位于你的订阅中,群集配置和操作都由你控制和负责。 如果团队正在 Azure 中寻找 Kubernetes 的完全托管版本,则 Azure Kubernetes 服务是理想的选择。

Azure Functions

Azure Functions 是一种无服务器函数即服务 (FaaS) 解决方案。 它针对使用函数编程模型运行事件驱动型应用程序进行了优化。 在扩展以及与事件的集成方面,它与 Azure Container Apps 具有许多相同特性,但针对部署为代码或容器的临时函数进行了优化。 Azure Functions 编程模型为希望基于事件触发函数执行并绑定到其他数据源的团队提供了生产力优势。 如果你打算构建 FaaS 样式的函数,Azure Functions 是理想的选择。 Azure Functions 编程模型可用作基础容器映像,使其可移植到其他基于容器的计算平台,从而使团队可以在环境要求改变时重用代码。

Azure Spring Apps

Azure Spring Apps 是面向 Spring 开发人员的完全托管服务。 如果要在 Azure 上运行 Spring Boot、Spring Cloud 或任何其他 Spring 应用程序,Azure Spring Apps 是一个理想的选择。 该服务管理 Spring 应用程序的基础结构,让开发人员可以专注于代码。 Azure Spring Apps 可以通过以下方法提供生命周期管理:综合性监视和诊断、配置管理、服务发现、CI/CD 集成、蓝绿部署等。

后续步骤

了解如何通过 Azure 资源管理器模板部署多容器容器组: