本文介绍如何通过在目标区域中重新创建托管环境和容器应用,将 Azure 容器应用工作负荷重新定位到另一个 Azure 区域。 此过程包括导出应用程序配置、重新部署资源、验证部署以及清理源区域中的资源。
Important
Azure 容器应用不支持就地迁移。 在目标区域中 重新创建 资源 - 不会移动现有资源。 本文介绍如何重新定位容器应用配置和基础结构。 它不包括复制应用程序数据、数据库或其他有状态依赖项。
先决条件
在开始之前,请验证是否满足以下要求:
- Azure 容器应用 在目标区域中可用。
- 目标区域支持在源区域中使用的相同容器应用功能、工作负荷配置文件和网络选项。
- 您在目标区域中有足够的配额来部署计划中的资源。
- 在源订阅和目标订阅中具有以下权限:
- 资源组的所有者或参与者。
- Azure 容器应用贡献者 (建议)。
- 容器映像位于可从目标区域(例如 Azure 容器注册表或受支持的外部注册表)访问的注册表中。
- 依赖的 Azure 资源(例如 密钥保管库、存储帐户、数据库、虚拟网络和消息传送服务)已在目标区域中可用,或者已重新部署计划。
Tip
如果使用 Azure 容器注册表(ACR),请考虑启用 异地复制 ,使映像在目标区域中可用,而无需重新部署注册表。
az acr replication create --registry <REGISTRY_NAME> --location <TARGET_REGION>
了解停机时间要求
Azure 容器应用不支持实时区域迁移。 停机时间主要是由于在切换期间 DNS 传播和流量路由更改引起的。 尽量减少影响:
- 首先在目标区域中部署和验证容器应用。
- 提前降低 DNS TTL 值(例如,到 60 秒),以便路由更改快速传播。
- 仅在验证完成后,才会将生产流量重定向到新终结点。
- 在确认目标部署正常之前,使源容器应用保持运行状态。
Prepare
若要准备重定位,请导出源配置并查看所有特定于区域的设置。
标识依赖项
在直接转换之前,目标区域中必须存在以下依赖资源:
- Azure 密钥保管库
- 存储帐户
- 数据库和消息传送服务(如 Azure 服务总线、Azure Cosmos DB)
- 虚拟网络、子网和专用终结点
- 网络安全组(NSG)和用户定义的路由(UDR)
- 专用 DNS 区域
- Log Analytics工作区
- Dapr 组件和服务连接器(如果使用)
Important
导出的模板 中不会保留 机密、证书、自定义域和安全配置值。 必须在目标区域中从其原始源手动重新创建这些资源。
规划托管标识更改
托管标识处理取决于标识类型:
系统分配的标识:重新创建容器应用时,Azure 会生成新的主体 ID。 必须将所有 RBAC 角色、密钥保管库 访问策略和下游服务权限重新分配给新标识。
用户分配的标识:用户分配的托管标识是区域资源,不能跨区域移动。 在目标区域中创建新的用户分配标识,并在部署之前分配所需的权限。
导出源配置
- Azure 门户
- Azure CLI
使用 Azure 门户导出容器应用托管环境和单个容器应用的 ARM 模板。
- 登录到 Azure 门户。
- 导航到容器应用托管环境或容器应用资源。
- 从左侧菜单中选择“ 自动化>导出”模板。
- 选择 “下载 ”并将
.zip文件解压缩到本地文件夹。
提取的文件包括:
| File | 说明 |
|---|---|
template.json |
资源配置定义 |
| 参数文件 | 部署参数值 |
| 部署脚本 | 用于模板执行的脚本 |
注释
导出的模板是了解配置的起点。 它们可能包含需要删除的只读属性,并且 不包含机密 或证书值。 在使用导出的输出进行重新部署之前,请仔细查看导出的输出。
修改托管环境模板
在重新部署托管环境之前,请更新导出的配置:
-
更新位置:将
location属性设置为目标 Azure 区域。 - 验证资源名称:确保托管环境名称在目标资源组和区域中是唯一的。
- 查看 Log Analytics 配置:如果工作区特定于区域,请更新 Log Analytics 工作区引用。 可能需要在目标区域中创建新工作区。
-
删除只读属性:如果从门户导出,请删除导致部署失败的属性,例如
id、typesystemData、和其他只读字段。
修改容器应用模板
导出容器应用配置后,进行以下更改:
更新托管环境参考:将
managedEnvironmentId替换为目标区域中新托管环境的资源 ID。 托管环境是区域绑定的,不能跨区域重复使用。验证容器映像引用:确认映像引用指向可从目标区域访问的容器注册表。 如果启用了 ACR 异地复制,则现有引用可能无法更改。
查看入口配置:重新部署后,应用程序完全限定的域名(FQDN)会更改。 计划在割接期间更新自定义 DNS 记录和流量路由。
重新配置机密和应用设置:使用 Azure 密钥保管库 引用或应用程序配置重新创建机密。 不要依赖于敏感设置的导出值。
更新 Dapr 组件:如果使用 Dapr,请验证 Dapr 组件配置是否引用目标区域中可用的资源(例如状态存储、发布/子代理、机密存储)。
更新服务连接器:如果使用服务连接器,请重新创建它们以指向依赖服务的目标区域实例。
更新诊断和监视:验证 Log Analytics 工作区引用并根据需要重新配置诊断设置。
重新部署
Azure 容器应用托管环境是区域绑定的。 在重新部署任何容器应用之前,请在目标区域中创建托管环境。
部署托管环境
- Azure 门户
- Azure CLI
- 在 Azure 门户中,转到目标资源组。
- 选择“ 部署自定义模板”。
- 在 编辑器中选择“生成自己的模板 ”,并上传修改后的 ARM 模板。
- 查看部署设置,然后选择 “查看 + 创建 ”以启动部署。
验证容器注册表访问权限
在部署容器应用之前,请确认容器应用使用的标识(系统分配的或用户分配的托管标识)在目标 Azure 容器注册表上分配了 AcrPull 角色。
az role assignment create \
--assignee <IDENTITY_PRINCIPAL_ID> \
--role AcrPull \
--scope <ACR_RESOURCE_ID>
注释
如果容器应用引用不同订阅或区域中的 ACR,请事先验证是否已配置所需的权限,以防止部署期间映像拉取失败。
部署容器应用
配置网络
部署后,重新配置网络以匹配源配置:
配置入口:根据应用程序的曝光模型设置公共或专用入口。
重新应用 VNet 集成:如果容器应用使用专用网络,请在目标区域中配置 VNet、子网、专用终结点和专用 DNS 区域。
更新 NSG 和 UDR:根据需要重新创建网络安全组和用户定义的路由。
更新 IP 允许列表:如果下游服务使用基于 IP 的允许列表,请使用目标区域环境的新出站 IP 地址更新它们。
配置自定义域和证书:重定位期间不会传输自定义域和 TLS 证书。 在新容器应用上重新配置它们并更新 DNS 记录。
直接转换流量
验证后,将流量重定向到目标区域部署:
如果之前降低了 DNS TTL,请更新 DNS 记录以指向新的容器应用 FQDN。
如果使用 Azure Front Door 或 Azure 流量管理器,请更新后端池或终结点以包含目标区域容器应用并删除源区域终结点。
监视流量以确认请求正在到达新部署。
Tip
使源容器应用在回滚窗口中保持运行。 如果出现问题,请将 DNS 或流量路由还原到源终结点,直到解决问题。
验证
流量切换后,请核查以下内容:
- 应用程序可用性和响应时间。
- 在预期负载和峰值负载下缩放行为。
- 与依赖服务(如数据库、密钥保管库、存储和消息传送)的连接。
- 托管身份对下游资源的访问.
- Dapr 组件和服务连接器功能(如果使用)。
- 流向 Azure Monitor 和 Log Analytics 的日志和指标。
使用 CLI 进行验证:
# Confirm the container app is running
az containerapp show \
--name <APP_NAME> \
--resource-group <TARGET_RESOURCE_GROUP> \
--query "{status:properties.runningStatus, fqdn:properties.configuration.ingress.fqdn}" \
--output table
# Test the application endpoint
curl -s -o /dev/null -w "%{http_code}" https://<APP_FQDN>/health
Important
使源容器应用保持运行状态,直到验证完成,并确认目标部署正常。 在清理源资源之前定义回滚窗口,例如 24 到 48 小时。
清理源资源
成功验证和流量切换后:
- 删除源容器应用。
- 如果不再需要源托管环境,请将其删除。
- 删除未使用的容器映像、网络资源和标识分配,以避免不必要的费用。
- 更新引用源资源的任何监视仪表板或警报规则。
局限性
- Azure 容器应用不支持就地或实时区域重定位。
- 必须重新创建机密、证书和自定义域。
- 在目标部署中,修订历史不会被保留。
- 在切换期间需要停机。
- 系统分配的托管标识主体 ID 会更改,因此必须重新创建所有 RBAC 分配。
- 用户分配的托管标识是区域标识,必须在目标区域中重新创建。
- 出站 IP 地址更改,这可能会影响下游服务允许列表。