我在GCE上有一个Kubernetes部署,我想根据在Google Container Registry中创建的新镜像(最好通过构建触发器)自动更新。有没有办法做到这一点?

提前致谢。

-标记

最佳答案

我可以使用GCR和Cloud Builder并通过cloudbuild.yaml文件来做到这一点,如下所示。为了使其正常工作,必须通过单击项目->编辑器来为名称为xyz@cloudbuild.gserviceaccount.com之类的服务帐户分配IAM权限。这是必需的,以便Cloud Build服务可以创建SSH密钥并将其添加到GCE元数据中,以允许Cloud Builder进行SSH输入。此SSHing是有效地在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'

奖金专业提示:
  • 如果有一天您要支撑一台新服务器并想用它代替
  • ,则substitutions很不错
    使用--log-driver=gcplogs
  • 使您的Docker日志显示在Google Cloud Console的Stackdriver中,并在相应的“GCE VM实例”中进行记录。只需确保已选择“所有日志”和“任何日志级别”,因为Docker日志没有日志级别并且不是syslogactivity_log消息
  • 10-01 15:12