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

如何将Google Cloud Run配置为单例应用服务?新版本就绪即终止旧版本

解决方案

针对你的Cloud Run后台服务部署时新旧实例共存的问题,可以通过调整旧修订版的最小实例数+分步部署的方式解决,既保证新版本就绪后立刻终止旧实例,又保留旧修订版用于回滚:

核心思路

旧修订版之所以持续运行,是因为你设置了最小实例数=1,即便流量切换到新版本,旧实例仍会保持运行。通过将旧修订版的最小实例数临时设为0,可触发Cloud Run立即终止旧实例,且旧修订版本身不会被删除,随时可以回滚。

具体步骤(使用gcloud CLI)

  1. 无流量部署新版本
    先部署新版本但不分配流量,确保它完全就绪后再进行后续操作:

    gcloud run deploy YOUR_SERVICE_NAME \
      --image YOUR_NEW_IMAGE_URL \
      --no-traffic \
      --min-instances 1 \
      --max-instances 1 \
      --cpu-always-allocated
    
  2. 确认新版本就绪
    获取新版本的名称,并验证其状态为就绪:

    # 获取最新部署的修订版名称
    NEW_REVISION=$(gcloud run revisions list --service YOUR_SERVICE_NAME --sort-by="metadata.creationTimestamp" --format="value(metadata.name)" | tail -n 1)
    # 检查是否就绪
    gcloud run revisions describe $NEW_REVISION --service YOUR_SERVICE_NAME | grep "Ready: True"
    
  3. 调整旧修订版的最小实例数为0
    获取旧修订版名称(即当前运行的版本),将其最小实例设为0,触发立即终止:

    # 获取旧修订版名称(排除刚部署的新版本)
    OLD_REVISION=$(gcloud run revisions list --service YOUR_SERVICE_NAME --sort-by="metadata.creationTimestamp" --format="value(metadata.name)" | head -n 1)
    # 设置旧版本最小实例为0
    gcloud run revisions update $OLD_REVISION --service YOUR_SERVICE_NAME --min-instances 0
    
  4. 将全量流量切换到新版本
    完成实例切换后,把流量全部分配给新版本(即便你的后台服务不依赖HTTP流量,这一步可确保路由规则正确):

    gcloud run services update-traffic YOUR_SERVICE_NAME --to-revisions $NEW_REVISION=100
    

回滚操作(若新版本出现问题)

如果新版本有bug,只需将旧修订版的最小实例改回1,并切换流量即可:

# 恢复旧版本最小实例
gcloud run revisions update $OLD_REVISION --service YOUR_SERVICE_NAME --min-instances 1
# 切回旧版本流量
gcloud run services update-traffic YOUR_SERVICE_NAME --to-revisions $OLD_REVISION=100

自动化建议

可以把上述步骤封装成Shell脚本,或者使用Cloud Build来自动化部署流程,确保每一步按顺序执行,避免手动操作的失误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:27:38