管道运行后如何告诉 gcp 集群拉取最新的镜像

问题描述 投票:0回答:1

我在 gcp 中有一个集群,还有一个用于管道配置的 azure-pipeline.yml 文件和一个用于在集群/pod 中部署的 deplyoment.yaml 文件。

所以我的问题:我在 azure-pipelines.yml 中指定了“latest”标签。到目前为止一切顺利,图像已使用正确的标签推送到 Docker 注册表。但触发deploy_dev阶段后,集群中的pod不会再次拉取新镜像。我认为那是因为图像标签已经是“最新的”。但我更新了 docker 镜像...xd

我还尝试添加一个“buildid”变量。但问题是,我无法在 deplyoment.yaml 中的图像名称后面添加变量...

有人可以帮助我吗,谢谢。

my deployment.yaml

my azure-pipelines.yml

我已经在azure-pipelines.yml和deployment.yaml中使用相同的变量(buildid)进行了尝试,但这对我不起作用,因为deployment.yaml不能在图像名称后面包含该变量

我还尝试了 imagePullPolicy 标志。

google-cloud-platform deployment azure-pipelines-yaml docker-image docker-tag
1个回答
0
投票

Kubernetes 很聪明。或者它试图成为!话虽这么说,K8S 基于协调循环:它尝试满足与提供的 YAML 定义相同的集群状态。

在您的情况下,您提供带有最新映像标签的部署。 K8S 将检查其状态并找出要实现的任务以满足新定义。在您的情况下,最新的映像已被拉取并存在于集群上,无需再次拉取。

这是协调循环产品(也如 Terraform)中可能遇到的常见问题。事实上,您不使用最新图像,而是使用专用名称:标签、提交 SHA 或每次都会更改的任何名称。

然后,您必须更新部署文件以添加要部署的正确映像版本。最后应用您的部署。这次,您的新图像将被考虑在内。


你还有一个更“坦克”的版本:因为这是状态比较,你可以从状态中删除最新的镜像,然后再次部署。

按照这个思路,您需要从集群中删除您的部署,然后重新部署。

如果是批处理,这是一个合适的解决方案。如果它是一个网络服务,这是一个坏主意,因为你会造成服务不可用。

© www.soinside.com 2019 - 2024. All rights reserved.