【问题标题】:Where does Kubernetes store cached images for use of "IfNotPresent"-CachePolicy and how to delete the cache?Kubernetes 在哪里存储缓存图像以供“IfNotPresent”-CachePolicy 使用以及如何删除缓存?
【发布时间】:2021-04-20 00:00:26
【问题描述】:

我有一个集群要管理,其中运行的 Pod 的 Image-CachePolicy 设置为“IfNotPresent”。

containers:
  - name: test-app
    image: myimages/test-app
    imagePullPolicy: "IfNotPresent"

IfNotPresentAlways 的区别我已经很熟悉了。

在我们的例子中,如果 Pod 重新生成,K8s 将由于“IfNotPresent”从某个缓存加载图像,而不是从 docker-hub 获取图像。

我们想要实现的是找到这个 kubectl 缓存图片的地方,并删除缓存,以便 K8s 在下次 Pod 重启时重新获取图片。

我们不想应用将imagePullPolicy 设置为Always 的新策略,因为这已经获取了我们还不想要的最新版本的Pod。相反,它只会在 Pod 下次重新启动时获取新的最新图像。

有没有办法做到这一点?在哪里可以找到这个缓存位置?

【问题讨论】:

    标签: docker kubernetes kubectl


    【解决方案1】:

    如果您想象 Kubernetes 正在运行 Docker,它的作用相当于:

    1. docker images
    2. 如果图片不存在,docker pull它。
    3. docker run 生成的图像。

    imagePullPolicy: Always 跳过第一步并始终拉取图像;Never 跳过拉取,如果图像不存在则将失败。)

    每个节点都有自己的图像副本;具体取决于使用的特定容器运行时。反过来,每个节点都知道如何garbage collect images not currently in use,尽管旧图像通常会一直存在,直到本地磁盘填满(或者直到集群自动缩放器等工具删除节点)。

    Kubernetes 中的一般假设是给定的registry.example.com/name/image:tag 字符串唯一地标识一个图像。您的 CI/CD 系统应该与此合作,并为每个映像构建分配一个不同的标签(可能基于提交 ID 或日期戳)。如果你这样做了,你应该不需要调整 imagePullPolicy: 的默认值或尝试手动从节点中删除图像。

    【讨论】:

      【解决方案2】:

      Kubernetes 本身不缓存图像,它是底层的 OCI 运行时进行缓存。

      如果 k8s 集群使用 docker,可以通过以下方式从节点中删除镜像:

      docker image rm <name_or_checksum>
      

      【讨论】:

        【解决方案3】:

        Welcome to stackOverflow,与缓存图像的位置有关,正如上面@David Maze@Matt 所解释的,这取决于您的OCI。

        我想多了解一下这个说法

        > 我们不想应用一个将 imagePullPolicy 设置为 Always 的新策略,因为这已经获取了最新版本的 Pod, 我们还不想要。相反,它只会获取新的最新图像 下次重新启动 pod 时。

        当您提到“我们还不想要”时,这是否意味着您当前在该标签上的图片还不是正确的。是否有可能修改您的 CI/CD,以便仅基于促销流程生成或创建图像标签(Kubernetes 清单中使用的标签)(仅表示您希望该特定标签为 Kubernetes 集群准备好时) ?这是 Kubernetes 处理图像的正常方式。

        我建议的原因是,您的 pod 也可以重新调度到其他节点(没有任何缓存和 k8s 的节点可以指示 OCI 重新获取,因为该节点可能没有此缓存)可能有多种原因任何时间点。 假设 pod 的生命周期可能会产生一些意想不到的结果。

        我建议坚持 Kubernetes 镜像政策并修改 CI/CD 流程或升级流程,以处理哪个镜像可以为哪个 Kubernetes 环境做好准备。

        如果您仍然觉得需要修改和使用图像缓存,请在实际用例中进行更多说明,可能还有其他替代方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-16
          • 1970-01-01
          • 2022-08-12
          • 1970-01-01
          • 2020-05-02
          • 2021-05-04
          • 2013-03-02
          • 2022-08-18
          相关资源
          最近更新 更多