我在 gcp 中有一个集群,还有一个用于管道配置的 azure-pipeline.yml 文件和一个用于在集群/pod 中部署的 deplyoment.yaml 文件。
所以我的问题:我在 azure-pipelines.yml 中指定了“latest”标签。到目前为止一切顺利,图像已使用正确的标签推送到 Docker 注册表。但触发deploy_dev阶段后,集群中的pod不会再次拉取新镜像。我认为那是因为图像标签已经是“最新的”。但我更新了 docker 镜像...xd
我还尝试添加一个“buildid”变量。但问题是,我无法在 deplyoment.yaml 中的图像名称后面添加变量...
有人可以帮助我吗,谢谢。
我已经在azure-pipelines.yml和deployment.yaml中使用相同的变量(buildid)进行了尝试,但这对我不起作用,因为deployment.yaml不能在图像名称后面包含该变量
我还尝试了 imagePullPolicy 标志。
Kubernetes 很聪明。或者它试图成为!话虽这么说,K8S 基于协调循环:它尝试满足与提供的 YAML 定义相同的集群状态。
在您的情况下,您提供带有最新映像标签的部署。 K8S 将检查其状态并找出要实现的任务以满足新定义。在您的情况下,最新的映像已被拉取并存在于集群上,无需再次拉取。
这是协调循环产品(也如 Terraform)中可能遇到的常见问题。事实上,您不使用最新图像,而是使用专用名称:标签、提交 SHA 或每次都会更改的任何名称。
然后,您必须更新部署文件以添加要部署的正确映像版本。最后应用您的部署。这次,您的新图像将被考虑在内。
你还有一个更“坦克”的版本:因为这是状态比较,你可以从状态中删除最新的镜像,然后再次部署。
按照这个思路,您需要从集群中删除您的部署,然后重新部署。
如果是批处理,这是一个合适的解决方案。如果它是一个网络服务,这是一个坏主意,因为你会造成服务不可用。