我们怎样才能设置kubernetes在推送新容器时自动更改容器?

时间:2016-11-16 10:15:59

标签: kubernetes google-cloud-platform

我正在使用谷歌云存储我的 Docker 图像&托管我的 kubernetes 群集。我想知道如何在每次按下新的 kubernetes 时拉下具有最新标签的容器。

我认为 imagePullPolicy 是可行的方法,但它似乎没有完成这项工作(我可能会遗漏一些东西)。这是我的容器规格:

"name": "blah",
"image": "gcr.io/project-id/container-name:latest",
"imagePullPolicy": "Always",
"env": [...]

目前,当我上传新的泊坞窗图片时,我不得不删除并重新创建部署。

2 个答案:

答案 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