繁体   English   中英

如何在 kubernetes 中提取已经缓存的图像?

[英]How to repull image in kubernetes that is already cached?

我正在使用具有 20 个工作节点的 kubernetes 集群。 我已将图像拉取策略设置为 IfNotPresent 以减少创建时间。 图像托管在 dockerhub 上。

当我在 dockerhub 中更新图像时,我需要清除所有 20 个工作节点的缓存。 目前我正在做 docker 拉所有 20 个工作节点以更新最新图像。

是否有任何 kubernetes 原生解决方案或任何其他最佳行业解决方案来更新所有节点上的图像?

最好的行业解决方案是为每个部署的图像使用一个唯一的标签。 更改图像标签,k8s 将为您处理升级。 你只有这个问题,因为你想使用相同的标签,即使图像发生变化。 无论您认为不值得明确对图像进行版本控制的原因是什么,您都错了:P。 显式版本很好地指定了它们

你需要在 ImagePullPolicy 中使用 Always。 如果是这样,只要提交 hash 有特定标签的更改,K8S 就会再次拉取。 记得也要设置 rollingUpdate。

这取决于您是否在 Docker Hub 上对映像进行版本控制。

出于几个原因,强烈建议您对图像进行版本控制。

  • 出现问题时回滚更快,因为您只需将版本号更改为以前的版本

  • 您所有的 pod 都将使用相同版本的图像

您可以在 Kubernetes 文档中阅读有关容器镜像配置的信息。

imagePullPolicy和镜像的标签会影响kubelet尝试拉取指定镜像的时间。

  • imagePullPolicy: IfNotPresent :仅当图像在本地不存在时才被拉取。

  • imagePullPolicy: Always :每次启动 Pod 时都会拉取镜像。

  • imagePullPolicy被省略并且图像标签是:latest或者被省略: Always应用。

  • imagePullPolicy被省略并且图像标签存在但不存在:latest : IfNotPresent被应用。

  • imagePullPolicy: Never :假设图像存在于本地。 没有尝试拉取图像。

注意:为确保容器始终使用相同版本的映像,您可以指定其摘要,例如sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 摘要唯一标识映像的特定版本,因此除非您更改摘要值,否则 Kubernetes 永远不会更新它。

注意:在生产环境中部署容器时应避免使用:latest标签,因为很难跟踪哪个版本的镜像正在运行并且更难以正确回滚。

注意:底层图像提供程序的缓存语义甚至使imagePullPolicy: Always高效。 以 Docker 为例,如果镜像已经存在,那么拉取尝试很快,因为所有镜像层都被缓存,不需要下载镜像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM