Kubernetes不会在重新部署时更新Docker映像

时间:2020-05-13 09:47:39

标签: kubernetes

Automation使用微服务构建Docker映像,并将该映像推送到以分支名称registry/service-name:branch标记的JFrog Artifactory注册表中。下一步,它将应用Kubernetes yaml清单文件,并在适当的Kubernetes节点上拉取映像后启动应用程序。 问题出在后面-当我将微服务源代码中的更改推送到存储库中时,自动化开始了:

  • 重建项目,并将更新的docker映像推送到具有相同标签(分支)的注册表中
  • 在Kubernetes中重新部署微服务
  • 已重新部署微服务,但具有旧映像

我猜是因为Kubernetes yaml清单文件的“ Deployment”部分没有更改,并且Kubernetes不会从JFrog注册表中提取更新的映像,所以发生了。解决方法是,在每次重新部署时,我都将时间戳注释插入模板部分:

  "template": {
      "metadata": {
          "labels": {
              "app": "service-name"
          },
          "annotations": {
              "timestamp": "1588246422"

但是奇迹并没有发生-仅当我删除Kubernetes部署并重新部署应用程序时才更新映像(可能在这种情况下,它只是从另一个节点开始,并且需要docker pull)。

是否可以设置Kubernetes或配置清单文件,如何在每次重新部署时强制Kubernetes提取映像?

1 个答案:

答案 0 :(得分:1)

我建议以registry/service-name:branch-git-sharegistry/service-name:git-sha的样式标记图像,这将自动拉出图像。

或者,作为解决方法,您可以保留当前的图像标签系统,并在模板中添加一个环境变量,该变量将设置为时间戳记

更改环境变量将始终导致容器和配置imagePullPolicy: Always一起重启。