docker-compose
我们有一个当前用于部署容器的系统(有效docker-compose pull && docker-compose up
),并且正在将系统转换为 Kubernetes。
我们有 CI/CD,可根据推送到 git 存储库的 git 标签自动部署到生产环境。对于暂存,我们不断推进分支。docker 镜像是使用 git 生产标签或 git 暂存分支名称构建和标记的。
在部署时,docker-compose
如果图像实际上相同,则足够智能地不重新启动容器,即两个生产标签指向同一个图像。
我正在寻找一种在 Kubernetes 中执行相同操作的方法 - 如果在部署时用于 Pod 容器的实际映像与已在运行的映像相同(基于映像校验和,而不仅仅是映像标签),则不必重新启动 Pod。这可能吗?
谢谢
答案1
正如我在评论中提到的,它应该可以开箱即用imagePullPolicy:Always
。
根据文档
容器镜像
当 kubelet 尝试拉取指定镜像时,imagePullPolicy 和镜像的标签会起作用。
图像拉取策略:总是:每次 kubelet 启动容器时,kubelet 都会查询容器镜像注册表,将名称解析为镜像摘要。如果 kubelet 本地缓存了具有该精确摘要的容器镜像,则 kubelet 会使用其缓存的镜像;否则,kubelet 会下载(拉取)具有已解析摘要的镜像,并使用该镜像启动容器。
注意:为确保容器始终使用同一版本的镜像,您可以指定其摘要;将 : 替换为 @(例如,image@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2)。摘要唯一地标识了镜像的特定版本,因此除非您更改摘要值,否则 Kubernetes 永远不会更新它。
还有一个名为意象,值得一看。Imago 检查正在运行的 pod sha256 并重新启动需要使用较新图像的资源。