【问题标题】:How to programmatically update traffic switching on google cloud run?如何以编程方式更新谷歌云运行上的流量切换?
【发布时间】:2020-08-24 14:47:35
【问题描述】:

我正在尝试通过 CI/CD 作业将新修订版部署到 Cloud Run,并立即开始为新修订版提供 100% 的流量。

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

目前该镜像在 gitlab ci 管道中构建并发布 gcr。下一步是gcloud run deploy 命令。该命令运行良好,我得到了一个新版本。然而,0% 的流量被提供给这个修订版,我终其一生都无法弄清楚如何以编程方式管理它。

我能找到的唯一相关信息来自常见问题解答:

但是,Cloud Run(当​​前)仅支持从您的服务的上一个健康版本开始提供流量。因此,它目前不支持基于修订的流量拆分和金丝雀部署。

但它似乎已经过时了,因为我目前可以通过 UI 在修订之间手动拆分流量。任何澄清将不胜感激。谢谢!

【问题讨论】:

    标签: google-cloud-run


    【解决方案1】:

    (您链接的 FAQ 存储库已过期,因为我坚持会更新它,谢谢提醒。)

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

    • 如果没有适当的流量拆分 (latest=100%),gcloud run deploy 将使新修订版 100%
    • 如果存在拆分,gcloud run deploy 会将新修订版设为 0%。

    为防止新版本获得流量,您可以显式使用--no-traffic

    如果您想以编程方式拆分流量,我建议您这样做:

    1. 在新部署之前将最新版本(鉴于它稳定/良好)提升到 100%:

      gcloud run services update-traffic --to-revisions=LATEST=100 [...]
      

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

    2. 部署新版本:

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

      gcloud run services  update-traffic --to-revisions=LATEST=5 [...]
      

      当你运行这个时,新版本将获得 5% 其余部分,之前的版本将获得 95%。

    注意上述方法:(@Steren 在下面的评论中提到了这一点。)如果您可能有多个部署在近距离发生(想象两个 git pushes 触发部署), LATEST 可能会无意中指向错误的修订版。 Steren 的建议是:

    改为使用gcloud run deploy [...] --revision-suffix=1234 --no-traffic,然后使用gcloud run services update-traffic --to-revisions service-1234=10

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

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

    【讨论】:

    • 如果同时发生多个部署,使用LATEST 可能会很危险gcloud run deploy [...] --revision-suffix=1234 --no-traffic,然后使用services update-traffic --to-revisions service-1234=10
    • 好主意,我会将其合并到答案中。
    • 我将如何删除现有的“流量分割”?我曾经使用过 GUI 的“管理流量”部分,现在每次部署都默认为 0% 的流量在新版本(如 OP)上。我现在将在我的部署脚本中使用update-traffic --to-revisions=LATEST=100 修复,但最好将服务的状态恢复到之前的状态。
    • 这就是你要恢复 100% 的方法。
    猜你喜欢
    • 2020-04-12
    • 1970-01-01
    • 2021-12-09
    • 2020-10-03
    • 1970-01-01
    • 2019-12-18
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多