Google cloud run 如何在google cloud run上以编程方式更新流量切换?

Google cloud run 如何在google cloud run上以编程方式更新流量切换?,google-cloud-run,Google Cloud Run,我正在尝试通过CI/CD作业将新版本部署到云上运行,并立即开始为新版本提供100%的流量 此服务不面向客户,我们不需要金丝雀部署或流量拆分 目前,该映像是在gitlab ci管道中构建的,并已发布gcr。下一步是执行gcloud run deploy命令。命令运行得很好,我得到了新的修改。然而,0%的流量用于此修订版,我一辈子都不知道如何通过编程来管理它 我在这里阅读了常见问题: 我已经阅读了gcloud run deploy--help的内容 我能找到的唯一相关信息来自常见问题解答: 但是

我正在尝试通过CI/CD作业将新版本部署到云上运行,并立即开始为新版本提供100%的流量

此服务不面向客户,我们不需要金丝雀部署或流量拆分

目前,该映像是在gitlab ci管道中构建的,并已发布gcr。下一步是执行
gcloud run deploy
命令。命令运行得很好,我得到了新的修改。然而,0%的流量用于此修订版,我一辈子都不知道如何通过编程来管理它

  • 我在这里阅读了常见问题:
  • 我已经阅读了
    gcloud run deploy--help的内容
我能找到的唯一相关信息来自常见问题解答:

但是,Cloud Run(当前)仅支持服务上一次健康版本的流量。因此,它目前不支持基于修订的流量拆分和canary部署

但它似乎过时了,因为我现在可以通过UI手动在修订版之间分割流量。如有任何澄清,将不胜感激。谢谢大家!

(您链接的常见问题回复已经过期,因为我坚持我会更新它,谢谢提醒。)

Cloud Run现在提供流量拆分。简而言之,它的工作原理如下:

  • 如果没有适当的流量拆分(最新版本=100%),则新版本将100%
  • 如果存在拆分,
    gcloud run deploy
    将使新修订版为0%
为了防止新版本获得流量,可以显式使用
--no traffic

如果要以编程方式拆分流量,我建议您执行以下操作:

  • 在新部署之前,将最新版本(假定稳定/良好)升级到100%:

    (但是,如果您的最新版本不好,并且您不愿意发送100%的流量,那么您实际上需要找到版本名称并使用它,而不是
    最新版本

  • 部署新版本:

    gcloud run deploy [...] --no-traffic
    
  • 向新版本发送少量流量:

    gcloud run services  update-traffic --to-revisions=LATEST=5 [...]
    
    运行此操作时,新版本将获得5%,其余版本将获得95%

  • 对上述方法的警告:(下面的评论中@Steren提到了这一点。)如果您可能有多个部署同时发生(想象两个
    git push
    es触发部署),最新版本可能会无意中指向错误的版本。斯特伦的建议是:

    相反,要使用
    gcloud run deploy[…]--修订后缀=1234--无流量
    ,然后
    gcloud run services update traffic--要使用修订服务-1234=10

    您还可以为修订提供友好的名称(“标记”),但目前无法在它们之间分割流量。(
    #ahmetb todo
    )使用该功能,您将能够部署修订版并为其命名,如
    “候选”
    ,然后在拆分流量时引用它,而不是复杂的自动生成的修订版名称

    或者,您可以通过使用
    gcloud run services replace
    命令部署YAML清单来管理版本之间的通信量。这涉及到理解Knative API是如何工作的。以下是一些可能相关的文档:

    • (单击YAML选项卡)

    如果同时发生多个部署,则使用
    最新版本可能会很危险
    我建议改用
    gcloud run deploy[…]--revision suffix=1234--无流量
    ,然后
    服务更新流量--到revisions service-1234=10
    好主意,我会将此合并到答案中。如何删除现有的“流量拆分”?我曾经使用过GUI的“管理流量”部分,现在每个部署在新版本(如OP)上都默认为0%流量。现在我将在部署脚本中使用
    update traffic--to revisions=LATEST=100
    fix,但最好将服务的状态恢复到以前的状态。这就是恢复100%的方法。
    gcloud run services  update-traffic --to-revisions=LATEST=5 [...]