谷歌云平台用Kubernetes创建了一个管道,并替换了相同的容器



我正在努力用谷歌云平台上我的容器注册中的容器替换现有容器。

这是我的cloudbuild.yaml文件。

步骤:

# This steps clone the repository into GCP
- name: gcr.io/cloud-builders/git
args: ['clone', 'https:///user/:password@github.com/PatrickVibild/scrappercontroller']
# This step runs the unit tests on the src
- name: 'docker.io/library/python:3.7'
id: Test
entrypoint: /bin/sh
args:
- -c
- 'pip install -r requirements.txt && python -m pytest src/tests/**'
#This step creates a container and leave it on CloudBuilds repository.
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/abiding-robot-255320/scrappercontroller', '.']
#Adds the container to Google container registry as an artefact
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/abiding-robot-255320/scrappercontroller']
#Uses the container and replaces the existing one in Kubernetes
- name: 'gcr.io/cloud-builders/kubectl'
args: ['set', 'image', 'deployment/scrappercontroller', 'scrappercontroller-sha256=gcr.io/abiding-robot-255320/scrappercontroller:latest']
env:
- 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'
- 'CLOUDSDK_CONTAINER_CLUSTER=scrapper-admin'

我在构建我的项目时没有遇到任何问题,所有步骤都是绿色的,我可能在最后一步中遗漏了,但我找不到用新版本的代码替换集群中的容器的方法。

我可以使用GUI在现有集群中手动创建一个新的工作负载,并从容器注册表中选择一个容器,但从那里用云中的新版本替换该工作负载容器的步骤失败了。

这是一个常见的陷阱。根据文件:

注意:如果且仅当部署的Pod模板(即.spec.template(发生更改时,例如,如果模板的标签或容器映像发生更新,则会触发部署的推出。其他更新(如缩放展开(不会触发卷展栏。

您的问题来自映像的标签,但不会改变::latest已部署,您要求部署:latest。没有图像名称更改,没有卷展栏。

为了改变这一点,我建议您使用替换变量,尤其是COMMIT_SHASHORT_SHA。您不能在文档中这样做:

仅适用于触发的构建

这意味着只有在自动触发而非手动触发生成时才会填充此变量。

对于手动运行,您必须指定自己的变量,如

gcloud builds submit --substitutions=COMMIT_SHA=<what you want>

并像这样更新您的构建脚本:

# This steps clone the repository into GCP
- name: gcr.io/cloud-builders/git
args: ['clone', 'https:///user/:password@github.com/PatrickVibild/scrappercontroller']
# This step runs the unit tests on the src
- name: 'docker.io/library/python:3.7'
id: Test
entrypoint: /bin/sh
args:
- -c
- 'pip install -r requirements.txt && python -m pytest src/tests/**'
#This step creates a container and leave it on CloudBuilds repository.
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/abiding-robot-255320/scrappercontroller:$COMMIT_SHA', '.']
#Adds the container to Google container registry as an artefact
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/abiding-robot-255320/scrappercontroller:$COMMIT_SHA']
#Uses the container and replaces the existing one in Kubernetes
- name: 'gcr.io/cloud-builders/kubectl'
args: ['set', 'image', 'deployment/scrappercontroller', 'scrappercontroller-sha256=gcr.io/abiding-robot-255320/scrappercontroller:COMMIT_SHA']
env:
- 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'
- 'CLOUDSDK_CONTAINER_CLUSTER=scrapper-admin'

在部署过程中,您应该看到以下行:

Step #2: Running: kubectl set image deployment.apps/test-deploy go111=gcr.io/<projectID>/postip:<what you want>
Step #2: deployment.apps/test-deploy image updated

如果你没有看到,这意味着你的推出没有考虑到它。

最新更新