从 Google Container Registry 自动将新容器部署到 Google Cloud Compute Engine

Automatically deploy new container to Google Cloud Compute Engine from Google Container Registry

我有一个 docker 容器,我像 gcloud builds submit --tag gcr.io/<project-id>/<name> 一样推送到 GCR,当我将它部署到 GCE 实例上时,每次部署它都会创建一个新实例,我必须删除手动旧实例。问题是,有没有办法部署容器并强制 GCE 实例获取新容器?我需要的正是 GCE,而不是 Google Cloud 运行 或其他,因为它不是 HTTP 服务。

我使用 Deploy to Cloud Run 按钮从 Google 控制台部署容器

我发布此 Community Wiki 是为了提高知名度。评论区已经有几个不错的解决方案了,不过最后OP想用Cloud Run.

首先我想澄清一些事情。

I have a docker container which I push to GCR like gcloud builds submit

gcloud builds submit 是使用 Google Cloud Build.

构建的命令

Cloud Build is a service that executes your builds on Google Cloud Platform infrastructure. Cloud Build can import source code from Cloud Storage, Cloud Source Repositories, GitHub, or Bitbucket, execute a build to your specifications, and produce artifacts such as Docker containers or Java archives.

在这个问题中,OP 指的是 Container Registry, however GCP recommends to use Artifact Registry,它很快将取代 Container Registry

Artifact Registry 推送和拉取图像在 Pushing and pulling images 文档中进行了说明。它可以通过 docker pushdocker pull 命令完成,之前您必须标记图像并创建 Artifact Registry.

在不同的 GCP 产品上部署

关于在 GCEGKECloud Run 上的部署,这些是 GCP 产品,与每个产品都有很大不同。

GCEIaaS,您在其中指定资源量并维护所有软件的所有安装(您需要安装 Docker、Kubernetes、编程库等)。

GKE 就像 Hybrid 一样,因为你提到了你需要的资源量,但它被定制为 运行 容器。创建后,您已经拥有 docker、kubernetes 和 运行 容器所需的其他软件。

Cloud Run 是一款无服务器 GCP 产品,无需计算所需资源的数量,安装 software/libs,它是一个完全托管的无服务器平台。

当您想从 Artifact Registry / Container Registry 部署容器应用程序时,您正在创建另一个 VM(GCE 和 GKE)或新服务(云 运行)。

如果您想在同一个 VM 上部署新应用程序:

  • 在 GCE 上,您需要使用 Docker 或 Kubernetes (Kubeadm) 拉取镜像并将其部署到该 VM 上。
  • 在 GKE 上,您需要使用类似
  • 的命令部署新的 deployment
kubectl create deployment test --image=<location>-docker.pkg.dev/<projectname>/<artifactRegistryName>/<imageName>

并删除旧的。

Cloud Run 中,您可以部署应用程序而无需担心资源或硬件,描述了哪些步骤 here. You can create revisions for specific changes in the image. However Cloud Run also allows CI/CD using GitHub, BitBucket or Cloud Source Repositories. This process is also well described in GCP documentation - Continuous deployment

可能的解决方案:

  • 编写一个 Cloudbuild.yaml 文件,在每个 CI/CD 管道中为您执行此操作 运行
  • 在 GCE 上编写一个小应用程序,订阅由 Cloud Build 创建的 Pub/Sub 通知。然后您可以拉取新容器或启动新实例。
  • Cloud RunCI/CD 结合使用。

根据 OP 的评论之一,选择的解决方案是将 Cloud RunCI/CD 一起使用。