Terraform GCP:无需用户停机即可更新 Cloud Run 服务

Posted

技术标签:

【中文标题】Terraform GCP:无需用户停机即可更新 Cloud Run 服务【英文标题】:Terraform GCP: Updating Cloud Run service without user downtime 【发布时间】:2022-01-24 00:08:08 【问题描述】:

我能否在不破坏和重新创建服务的情况下更新现有资源“google_cloud_run_service”的 Docker 映像?当我需要更新 Docker 映像时,如何避免 Cloud Run 服务的用户停机?

我创建了几个 Terraform (TF) 文件以用于我的 CircleCI 构建。在我的 TF 文件中,我正在构建 REST API、测试、构建 Docker 映像,并使用 TF 将该映像部署到 Google Cloud Provider 以作为 Cloud Run 服务运行。为了让这个 TF apply 正常工作,我需要先销毁 Cloud Run 资源,然后使用上一步中构建的最新 Docker 映像重新创建它。我可以让它在开发/测试环境中工作,但我的方法在生产环境中不起作用,因为会有停机时间。

我正在寻求有关在不让用户遇到服务停机的情况下更新我的资源的方法的建议。

【问题讨论】:

【参考方案1】:

您可能希望了解实施金丝雀部署策略。这个想法是您创建两项服务并从一项服务推广到另一项服务。它实际上涉及使用您的新图像创建一个新服务,并在拆除旧服务之前逐渐减少流量。

通过这样做并观察新服务的失败率,您可以在新服务有机会损害您的客户体验之前对它充满信心。

这里有一些资源可能会有所帮助:

CloudRun Automated Canary Testing

Cloud Run and Gradual Rollouts

Cloud Run Service Traffic Split

【讨论】:

感谢您发送这些链接以开始使用。我花了一些时间阅读它们,自己进行实验,并参加了 TF + GCP 的在线课程。我所看到的是 GCP 的 Cloud Run 服务会将用户流量从当前版本迁移到新版本,而无需用户停机。我编写了一些脚本,每 500 毫秒从网站请求一个状态码。我访问了有 20 多个用户以及 JMeter 的站点,我没有看到任何 HTTP 400 错误,只有状态码 200。我对更新服务没有停机感觉很好。我将使用您在生产中链接的概念。

以上是关于Terraform GCP:无需用户停机即可更新 Cloud Run 服务的主要内容,如果未能解决你的问题,请参考以下文章

无需停机即可配置谷歌云负载均衡器和托管 SSL

在 Terraform for GCP 中允许帐户和角色时出错

GCP 为每个项目和 Terraform 预定义 IAM 角色

sh Laravel Forge无需停机即可部署脚本

使用Redis无需停机即可丢失数据

使用 Terraformer\Terraform 克隆 GCP 项目