我正在使用谷歌云存储我的 Docker 图像&托管我的 kubernetes 群集。我想知道如何在每次按下新的 kubernetes 时拉下具有最新标签的容器。
我认为 imagePullPolicy 是可行的方法,但它似乎没有完成这项工作(我可能会遗漏一些东西)。这是我的容器规格:
"name": "blah",
"image": "gcr.io/project-id/container-name:latest",
"imagePullPolicy": "Always",
"env": [...]
目前,当我上传新的泊坞窗图片时,我不得不删除并重新创建部署。
答案 0 :(得分:3)
Kubernetes它将永远不会触发存储库中的容器映像更新。您的工具中需要某种CI / CD管道。此外,我强烈建议避免使用:latest
,因为它会随着时间的推移改变容器。在我看来,使用某种版本控制要好得多。它是image:1.4.3
基于image:<gitsha>
的语义,或者我使用image:<gitsha>-<pushid>
,其中push是每次push to repo的顺序更新值(因此即使我从同一个build重新上载,标签也会更改) )。
通过此类版本控制,如果您更改清单中的图像,部署将按预期进行滚动更新。
如果您想坚持image:latest
,可以在pod模板中添加带有版本的标签,因此如果你碰到它,它就会滚动。你也可以逐个手动杀死pod,或者(如果你能负担得起停机时间)你可以将部署扩展到0个副本并返回N
答案 1 :(得分:0)
实际上,您可以修补您的部署,以便它可以重新提取清单的规范部分(将您的部署名称放在那里)
kubectl patch deployment YOUR-DEPLOYMENT-NAME -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}"
现在,每次在容器注册表(DockerHub、ECR...)中推送新版本时,请转到 kubernetes CLI 并:
kubectl rollout restart deployment/YOUR-DEPLOYMENT-NAME