有没有办法根据在Google容器注册表中创建的新图像自动部署到GCE?

问题描述 投票:3回答:3

我在GCE上部署了Kubernetes,我希望根据在Google容器注册表中创建的新图像(最好是通过构建触发器)自动更新。有没有办法做到这一点?

提前致谢。

-标记

kubernetes google-kubernetes-engine google-container-registry google-container-builder
3个回答
3
投票

我能够使用GCR和Cloud Builder以及如下所示的cloudbuild.yaml文件来完成此操作。要使其工作,名为[email protected]的服务帐户必须通过单击Project - > Editor分配IAM权限。这是必需的,以便Cloud Build服务可以创建SSH密钥并将其添加到您的GCE元数据中,以允许Cloud Builder进入SSH。此SSH服务是在GCE VM服务器上有效运行任何命令的最佳解决方案。

steps:
# Build Docker image: docker build -f Dockerfile -t gcr.io/my-project/my-image:latest .
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-f', 'Dockerfile', '-t', 'gcr.io/my-project/my-image:latest', '.']

# Push to GCR: gcloud docker -- push gcr.io/my-project/my-image:latest
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/my-project/my-image:latest']

# Connect to GCE server and pull new image
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['compute', 'ssh', '$_SERVER', '--zone', '$_ZONE', '--command', 'gcloud docker -- pull gcr.io/my-project/my-image:latest']

# Connect to server and stop current container
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['compute', 'ssh', '$_SERVER', '--zone', '$_ZONE',  '--command', 'docker stop my-image']

# Connect to server and stop current container
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['compute', 'ssh', '$_SERVER', '--zone', '$_ZONE',  '--command', 'docker rm my-image']

  # Connect to server and start new container
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['compute', 'ssh', '$_SERVER', '--zone', '$_ZONE',  '--command', 'docker run  --restart always --name my-image -d -p 443:443  --log-driver=gcplogs  gcr.io/my-project/my-image:latest']


substitutions:
  _SERVER: 'my-gce-vm-server'
  _ZONE: 'us-east1-c'

奖金专业提示:

  1. substitutions很好,如果你有一天支持新服务器并想要使用它
  2. 使用--log-driver=gcplogs使您的Docker日志显示在您的Google Cloud Console的Stackdriver中,登录相应的“GCE VM实例”。请确保选择“所有日志”和“任何日志级别”,因为Docker日志没有日志级别且不是syslogactivity_log消息

2
投票

另一种选择:我们的一些用户使用kubectl build step在构建结束时触发部署。

您可以在构建步骤中调用任何kubectl命令,前提是您已设置正确的IAM权限,以便在构建过程中执行此操作。 (见README。)这个examplekubectl get pods

请注意,图像仅在完成的构建结束时自动推送,因此要构建映像并将其部署在一个构建中,您需要在部署步骤之前插入自己的docker push构建步骤。


0
投票

您可以使用Google Cloud pub / sub收听Google Container Registry中的更改。这个page概述了这个功能。您可能希望将push模型用于您的应用程序。

但请注意,这是一个alpha功能,其行为可能会在将来的版本中发生变化。

如果您不想要pub / sub提供的外部控件,那么您的构建脚本应该执行以下操作,

  1. 标记图像并上传到容器注册表
  2. 在部署脚本中更新映像版本
  3. 运行部署脚本,然后将拉出最新的映像
© www.soinside.com 2019 - 2024. All rights reserved.