You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Container App修订版:如何避免滚动更新(允许短停机)

针对Azure Container Apps含破坏性变更镜像的修订版更新方案

核心需求梳理

  • 无破坏性变更镜像:通过az containerapp revision copy更新镜像即可,无需特殊处理
  • 含破坏性变更镜像:允许短时间停机,避免滚动更新(防止新旧版本同时运行引发数据库兼容问题)

替代停用操作的规范方案

方案1:创建全新修订版+全流量切换+缩容旧版本

  1. 基于当前配置创建带指定后缀的新修订版并更新镜像:
    az containerapp update --name <APP_NAME> --resource-group <RG_NAME> --image <NEW_IMAGE_TAG> --revision-suffix <NEW_REVISION_SUFFIX>
    
    用--revision-suffix可明确区分新旧修订版,避免自动命名混淆。
  2. 将所有流量100%导向新修订版:
    az containerapp traffic set --name <APP_NAME> --resource-group <RG_NAME> --revision <NEW_REVISION_NAME>=100
    
  3. 缩容旧修订版至0实例,彻底停止旧版本运行:
    az containerapp revision scale --name <APP_NAME> --resource-group <RG_NAME> --revision <OLD_REVISION_NAME> --instance-count 0
    
    该操作比停用更直接,确保旧版本完全停止,不会被后续操作意外激活。

方案2:复制修订版+强制流量切换+缩容旧版本(适合复用旧配置场景)

  1. 复制当前修订版,指定新后缀并更新镜像:
    az containerapp revision copy --name <APP_NAME> --resource-group <RG_NAME> --revision <OLD_REVISION_NAME> --new-revision-suffix <NEW_SUFFIX> --image <NEW_IMAGE_TAG>
    
  2. 立即将流量全量切换到新修订版:
    az containerapp traffic set --name <APP_NAME> --resource-group <RG_NAME> --revision <NEW_REVISION_NAME>=100
    
  3. 手动缩容旧修订版至0实例:
    az containerapp revision scale --name <APP_NAME> --resource-group <RG_NAME> --revision <OLD_REVISION_NAME> --instance-count 0
    

停用旧修订版方法失效的原因

执行az containerapp revision copy时,系统默认基于当前活跃修订版配置创建新修订版,同时会自动激活新修订版。之前停用的修订版并非“消失”,而是默认不显示在常规列表中,可通过az containerapp revision list --name <APP_NAME> --resource-group <RG_NAME> --show-all查看所有修订版(含已停用的)。但这种方式容易导致新旧版本同时活跃,不符合避免滚动更新的需求。

流水线集成建议(Jenkins/GitLab)

  • 将上述命令封装为流水线步骤,先执行数据库迁移脚本(若需),再依次完成创建新修订版、切换流量、缩容旧版本的操作
  • 提前通过az containerapp revision list获取当前活跃旧修订版名称,作为变量传入后续命令,避免硬编码修订版名称

内容的提问来源于stack exchange,提问作者honest_annie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:14:56