肮脏的解决方法(未经测试):您可以将 rc 缩小到 0,然后再放大到原始大小 => 这将是“pod”重新启动。或者您可以使用 2 个主动(非 0 尺寸)/被动(0 尺寸)rc,它们将包含在同一个服务中。您将放大/缩小它们。
标记它意味着总是删除旧标记的复杂脚本
图片(没用的人在这里有技巧)。
标记是一个很好的显式过程。 Kubernetes Garbage collection 将自动删除您的旧图像。希望您知道,如果您只使用最新标签,那么回滚是不可能的。我建议设置标签系统,例如: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
Build 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
测试正常,构建 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 部署经验。