肮脏的解决方法(未经测试):您可以将 rc 缩小到 0,然后缩小到原始大小 => 它将是“pod”重新启动。或者您可以使用 2 个主动(非 0 大小)/被动(0 大小)rc,它们将包含在同一个服务中。你将放大/缩小它们。
标记它意味着一个复杂的脚本总是删除旧的标记图像(没用的人在这里有一个技巧)。
标记是一个很好的显式过程。Kubernetes 垃圾收集会自动删除你的旧镜像。希望您知道,如果您只使用最新标签,那么回滚是不可能的。我建议设置标签系统,例如:latest_stable, :latest_dev, :2nd_latest_stable, ...
.
这些标签将只是“指针”,您的 CI 将移动它们。然后您可以定义和编写一些智能注册表删除标签策略,例如所有旧的标签2nd_latest stable
都可以安全删除。您了解您的应用程序,因此您可以设置适合您的需求和发布策略的策略。
标记示例 - 起始点构建 1/2/3(构建 id、git id、构建时间,...) - 构建 1 是:production
并且:canary
,所有标签都被推送:
# 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
构建 2 将是:canary
:
# 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
测试 OK,build 2 是稳定的 - 它将是:production
:
# 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
作业:实际上构建 2 不稳定 -> 设置:production
为构建 1(回滚)和:canary
构建 3(构建 3 中的测试修复)。如果你只使用:latest
,这个回滚是不可能的
kubectl
滚动更新/回滚将使用显式:id
,您的清理脚本可以使用策略:所有旧标签:production
都可以删除。
不幸的是,我没有 Kubernetes 部署的经验。