首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Kubernetes很好地检索更新的图像?

如何让Kubernetes很好地检索更新的图像?
EN

Stack Overflow用户
提问于 2016-02-21 05:53:32
回答 2查看 6.5K关注 0票数 7

我有一个新的Docker镜像,理想情况下,我希望对其进行平滑升级,或者忘记以前部署的版本,或者只保留以前的版本,而不是所有以前部署的版本。

Kubernetes Pod将在重启时检索标记为:latestimagePullPolicy: Always的最新镜像。

但是,除非镜像标签改变,否则执行kubectl applykubectl replace不会重启Pod,因此不会触发拉取最新镜像。标记它意味着一个复杂的脚本来总是删除旧的标记图像(无用有人在这里有一个技巧)。

如果每个pod只有一个容器,则可以执行kubectl rolling-update ... --image ...

删除名称空间并重新创建所有pod/rc/services...

即使每个Pod有多个容器,我如何让Kubernetes很好地使用我的新镜像?

EN

回答 2

Stack Overflow用户

发布于 2016-02-21 06:08:00

肮脏的解决办法(未测试):您可以将rc缩小到0,然后将其放大到原始大小的=>,它将是"pod“重启。或者,您可以使用2个活动(非0大小)/passive(大小为0) rc,它们将包含在同一服务中。你将会放大/缩小它们。

标记它意味着一个复杂的脚本,总是要删除旧的标记图像(无用,有人在这里有一个技巧)。

标记是一个很好的显式过程。Kubernetes Garbage collection将自动删除您的旧图像。希望你知道,如果你只使用最新的标签,那么回滚是不可能的。我建议设置标签系统,例如:latest_stable, :latest_dev, :2nd_latest_stable, ...

这些标签将只是“指针”,您的配置项将移动它们。然后,您可以定义并编写一些智能注册表删除标记策略,例如,可以安全地删除所有早于2nd_latest stable的标记。您了解您的应用程序,因此您可以设置策略,这将满足您的需求和发布策略。

标签示例-开始点构建1/2/3 (build id,git id,build time,...) - build 1是:production:canary,所有标签都被推送:

代码语言:javascript
复制
# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
image                                       3                   a21348af4283        37 seconds ago      125.1 MB
image                                       2                   7dda7c549d2d        50 seconds ago      125.1 MB
image                                       production          e53856d910b8        58 seconds ago      125.1 MB
image                                       canary              e53856d910b8        58 seconds ago      125.1 MB
image                                       1                   e53856d910b8        58 seconds ago      125.1 MB

Build 2将是:canary

代码语言:javascript
复制
# docker tag -f image:2 image:canary
# docker push image:canary
# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
image                                       3                   a21348af4283        6 minutes ago       125.1 MB
image                                       canary              7dda7c549d2d        6 minutes ago       125.1 MB
image                                       2                   7dda7c549d2d        6 minutes ago       125.1 MB
image                                       production          e53856d910b8        7 minutes ago       125.1 MB
image                                       1                   e53856d910b8        7 minutes ago       125.1 MB

测试正常,build 2是稳定的-它将是:production

代码语言:javascript
复制
# docker tag -f image:2 image:production
# docker push image:production
# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
image                                       3                   a21348af4283        9 minutes ago       125.1 MB
image                                       2                   7dda7c549d2d        9 minutes ago       125.1 MB
image                                       canary              7dda7c549d2d        9 minutes ago       125.1 MB
image                                       production          7dda7c549d2d        9 minutes ago       125.1 MB
image                                       1                   e53856d910b8        10 minutes ago      125.1 MB

家庭作业:实际上build 2并不稳定,将:production设置为build 1(回滚),将:canary设置为build 3( build 3中的测试修复)。如果仅使用:latest,则不可能进行此回滚

kubectl滚动更新/回档将使用显式:id,您的清理脚本可以使用策略:可以删除所有早于:production的标签。

不幸的是,我没有Kubernetes部署的经验。

票数 5
EN

Stack Overflow用户

发布于 2018-07-25 03:16:45

如何使用标签标记部署,标签的值可以是时间戳或提交散列,然后像往常一样使用kubectl apply。在模板中更改标签应该会触发再次拉取镜像(如果设置了imagePullPolicy: Always )和滚动升级(取决于配置)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35529515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档