【发布时间】:2021-12-22 19:06:01
【问题描述】:
我有一个 docker 容器,我像gcloud builds submit --tag gcr.io/<project-id>/<name> 一样将它推送到 GCR,当我在 GCE 实例上部署它时,每次部署它都会创建一个新实例,我必须手动删除旧实例。问题是,有没有办法部署容器并强制 GCE 实例获取新容器?我需要 GCE,而不是 Google Cloud Run 或其他,因为它不是 HTTP 服务。
【问题讨论】:
-
部署应该是原子的。更新当前 VM 以使用新映像并不是一个好的做法。相反,您应该使用托管实例组通过更新实例模板将旧虚拟机替换为新虚拟机。
-
您必须创建一个新的 VM 并删除另一个。您可以编写一个 Cloudbuild.yaml 文件,在每次 CI/CD 管道运行时为您执行此操作
-
您需要在 GCE 上编写一个小型应用程序,以订阅 Cloud Build 创建的 Pub/Sub 通知。然后,您可以拉取新容器或启动新实例。你的问题不清楚你想做什么。 cloud.google.com/build/docs/subscribe-build-notifications
-
@JohnHanley,我正在尝试做类似 CI\CD 部署的事情。在 Gitlab 中,我习惯于通过 ssh 告诉我的服务器构建一个新图像并开始运行它。在这里,我想要类似的东西,推送新图像,并使实例构建它,然后运行。在我们的例子中,镜像已经构建好了,所以我们只需要运行它,但是它运行在一个新的实例中......
-
您可以创建一个 Cloud Build 步骤,使用 gcloud compute ssh --tunnel-through-iap 连接到 Compute Engine 实例,然后运行命令。您需要为 cloudbuild 服务帐户授予必要的角色(roles/compute.instanceAdmin.v1、roles/compute.viewer、roles/iam.serviceAccountUser、roles/iap.tunnelResourceAccessor)。这将适用于拉一个新容器。我不确定是否要从 Cloud Build 创建新的 VM 实例、配置实例并拉取新容器。我不知道你为什么要拉一个新容器然后创建一个新实例。
标签: docker google-cloud-platform google-container-registry