【问题标题】:How to clean-up old unused Kubernetes images/tags?如何清理旧的未使用的 Kubernetes 镜像/标签?
【发布时间】:2016-07-24 10:04:28
【问题描述】:

为了简化部署和短期回滚,为每个新版本使用新的 Docker 映像标记以在 Kubernetes 上部署很有用。如果不进行清理,这意味着旧的 images:tags 将永远保留。

我如何列出 Kubernetes 容器使用的所有 image:tag 以便我可以找到所有旧的并且不用于从 中自动删除它们的旧 image:tag Docker 注册表

我的理想目标是让 Google Container Engine (GKE) 在 Google Container Registry 中删除未使用的图像。

【问题讨论】:

标签: kubernetes docker-registry google-kubernetes-engine


【解决方案1】:

作为一种替代方法,您可以考虑让 Kubernetes 为您处理旧镜像的回收。

目前,ImageManager 处理候选图像的回收。见:Garbage Collection

垃圾收集是 kubelet 的一个有用功能,它可以清理 未引用的图像和未使用的容器。 kubelet 将执行 每分钟对容器进行垃圾收集和垃圾收集 每五分钟生成一次图像。

通过这两个kublet cli parameters控制配置:

  --image-gc-high-threshold=90: The percent of disk usage after which image garbage collection is always run. Default: 90%
  --image-gc-low-threshold=80: The percent of disk usage before which image garbage collection is never run. Lowest disk usage to garbage collect to. Default: 80%

可以调整高/低阈值以在适合您的时间间隔强制收集。

【讨论】:

  • 不是只针对集群节点上的本地镜像,不针对Docker Registry中的镜像吗?
  • 对不起,我错过了在我的问题中正确指定它。更新了问题。
【解决方案2】:

对于最新版本的 kubelet,请使用以下选项,因为 --image-gc-high-threshold--image-gc-low-threshold 已被弃用:

--eviction-hard
--eviction-soft

更多详情请点击此处:

【讨论】:

    【解决方案3】:

    您可以使用在 DaemonSet 中运行的 docker-cleanup 容器。这将清除集群中每个节点上所有未使用的图像。

    【讨论】:

      【解决方案4】:

      要获取 Kubernetes 集群使用的所有镜像列表,可以运行 shell 脚本:

      for image in $(kubectl get pods --all-namespaces --output=jsonpath='{..image}')
      do
          echo $image
      done
      

      但是,目前似乎没有办法简单地从 Google Container Registry 中删除图像(请参阅 How to remove a pushed image in Google Container Registry

      【讨论】:

      • 如果您需要知道集群仍然引用了哪些镜像,并且假设您使用 Deployments 而不是直接创建 Pod,您可以通过将“pods”替换为“rs”来查看 ReplicaSets 而不是 Pods " 在你的命令中。
      • 上面的排序列表中出现次数(kubernetes.io/docs/tasks/access-application-cluster/…):kubectl get pods --all-namespaces -o jsonpath='{..image}' | tr -s '[[:space:]]' '\n' |排序 | uniq -c
      【解决方案5】:

      我不确定是否有记录在案的方法来进行此类维护。然而,Openshift Origin 确实尝试通过修剪 docker 映像并与注册表交互来删除旧的 blob 来解决问题

      我们已经在原点上下文中实现了它。 github上的source code

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-11
        • 2020-05-23
        • 1970-01-01
        • 2015-12-19
        • 1970-01-01
        • 2018-12-25
        • 2012-04-30
        • 2010-11-05
        相关资源
        最近更新 更多