【问题标题】:How to repull image in kubernetes that is already cached?如何在 kubernetes 中拉取已经缓存的图像?
【发布时间】:2019-10-27 01:43:12
【问题描述】:

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

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

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

【问题讨论】:

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

标签: image docker kubernetes containers


【解决方案1】:

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

【讨论】:

  • 太糟糕了,这被否决了,因为它是正确的答案。要么你使用特定的版本,你总是拉,或者你得到奇怪的版本。如果你Always拉你的图片,你仍然不知道如果你需要回滚的话,你仍然不知道回滚到什么。
  • 我认为这是正确的答案,如果人们在没有给出任何理由的情况下不投反对票,这将很有用。赞成。
  • 如果我有多个前端,我希望 nginx:mainline-alpine 在部署推出时总是拉到哪里?在将应用程序安装到容器中后,图像将被标记 (foo-fe:1.2.3)。但这并不能解决问题,因为 FROM 映像将缓存在节点上,并且 Docker 不会检查公共映像的内容是否更改,直到标签相同,即使使用“imagePullPolicy: Always”也是如此。使用特定版本(FROM nginx:1.21.5-alpine)迫使我们每周检查新的镜像版本。如果你没有夜间脚本来解决这个问题,请删除缓存
【解决方案2】:

你需要在 ImagePullPolicy 中使用 Always。如果是这样,只要特定标签的提交哈希发生变化,K8S 就会再次拉取。记得也要设置 rollingUpdate。

【讨论】:

  • 将 imagePullPolicy=始终完全下载图像,即使它没有更改?
【解决方案3】:

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

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

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

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

您可以在 Kubernetes 文档中阅读有关 Container Images 的配置。

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

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

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

  • imagePullPolicy 被省略,图像标签要么为:latest,要么被省略:应用Always。

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

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

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

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

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

【讨论】:

  • ifNotPresent 策略是否检查摘要是否不同,尽管标签仍然相同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 2015-12-01
  • 1970-01-01
  • 2011-10-29
  • 2019-05-01
相关资源
最近更新 更多