你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 容器应用中的蓝绿部署体验

注意

基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告

标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用

本文适用于:✅基本计划/标准计划 ✅ 企业计划

本文介绍 Azure 容器应用中的蓝绿部署。

你可以通过组合容器应用修订流量权重以及修订标签,在 Azure 容器应用中启用蓝绿部署。

创建或更新启用了多个活动修订的容器应用

若要新建启用了多个活动修订的容器应用,请使用以下命令:

az containerapp create \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_NAME> \
    --environment <APP_ENVIRONMENT_NAME> \
    --image mcr.microsoft.com/k8se/samples/test-app:<BLUE_COMMIT_ID> \
    --revision-suffix <BLUE_SUFFIX> \
    --ingress external \
    --target-port 80 \
    --revisions-mode multiple

或者,可以使用以下命令更新现有应用以启用多个修订:

az containerapp revision set-mode \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_NAME> \
    --mode multiple

部署新的修订版并分配标签

若要部署新修订,请使用以下命令:

az containerapp update \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_NAME> \
    --image mcr.microsoft.com/k8se/samples/test-app:<GREEN_COMMIT_ID> \
    --revision-suffix <GREEN_SUFFIX>

你可以将标签添加到特定修订,如以下示例所示:

az containerapp revision label add \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_NAME> \
    --label blue \
    --revision <APP_NAME>--<BLUE_SUFFIX>

az containerapp revision label add \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_NAME> \
    --label green \
    --revision <APP_NAME>--<GREEN_SUFFIX>

开始时,蓝色 commitId 修订版占用 100% 的生产流量,而新部署的绿色 commitId 修订版不占用任何生产流量。

在 Azure Spring Apps 中,最多可以部署一个应用的两个修订版:将其中一个设置为“生产”,另一个则设置为“过渡”。 但是,Azure 容器应用支持为单个应用部署多个修订版。

测试新的修订版

Azure 容器应用中的每个修订版都有自己的 URL,使你能够针对特定 URL 测试和验证部署。 使用以下命令通过特定域测试绿色修订版,即使所有生产流量都定向到蓝色修订版:

export GREEN_DOMAIN=$(az containerapp revision show \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_NAME> \
    --revision <GREEN_REVISION_NAME> \
    --query "properties.fqdn" \
    --output tsv \
    | tr -d '\r\n')

curl -s http://$GREEN_DOMAIN

使用以下命令通过特定于标签的完全限定域名 (FQDN) 进行测试:

# Get the containerapp environment default ___domain
export APP_DOMAIN=$(az containerapp env show \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_ENVIRONMENT_NAME> \
    --query "properties.defaultDomain" \
    --output tsv \
    | tr -d '\r\n')

# Test the production FQDN
curl -s https://$APP_NAME.$APP_DOMAIN

# Test the blue label FQDN
curl -s https://$APP_NAME---blue.$APP_DOMAIN

# Test the green label FQDN
curl -s https://$APP_NAME---green.$APP_DOMAIN

将生产流量发送到绿色修订版

若要将生产流量切换到绿色修订版,请使用以下命令:

# switch based on revision name
az containerapp ingress traffic set \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_NAME> \
    --revision-weight <BLUE_REVISION_NAME>=0 <GREEN_REVISION_NAME>=100

# switch based on label
az containerapp ingress traffic set \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_NAME> \
    --label-weight blue=0 green=100

确保标签总权重不超过 100。

Azure 容器应用不仅使你能够在蓝绿部署之间切换流量,还可以在多个修订版之间切换流量。 你也可以将特定数量的生产流量重定向到绿色部署。

有关 Azure 容器应用中蓝绿部署的详细信息,请参阅 Azure 容器应用中的蓝绿部署

限制

Eureka 服务器并不适合蓝绿部署,因为应用的所有修订版都会注册到 Eureka 服务器上,这使得无法有效地进行流量拆分。

若要在使用 Spring Cloud Gateway 时启用流量拆分,你需要在网关配置的 URI 字段中设置应用程序 URL。 你可以使用以下命令获取应用程序 URL:

az containerapp show \
    --resource-group <RESOURCE_GROUP> \
    --name <APP_NAME> \
    --query "properties.configuration.ingress.fqdn" \
    --output tsv \
    | tr -d '\r\n'