跳转到主要内容

清理旧的docker镜像以释放磁盘空间和inode

项目描述

Docker镜像清理器

GitHub Workflow Status Latest PyPI version Latest quay.io image tags

一个Python包(docker-image-cleaner)和相关Docker镜像(quay.io/jupyterhub/docker-image-cleaner),用于在磁盘inode或空间不足时清理旧Docker镜像。

该脚本最初是为了帮助清理BinderHub节点空间而开发的,否则它可能会耗尽空间,无法构建新的Docker镜像。

为什么?

容器镜像是kubernetes节点上磁盘空间和inode的最大消费者之一。Kubernetes通过垃圾回收未使用的容器镜像和容器来确保每个节点有足够的磁盘空间。调整这些参数对于binderhub安装很重要,因为许多镜像只构建和使用几次。然而,在大多数托管kubernetes安装(如GKE、EKS等)中,我们无法调整这些参数!

此脚本以可配置的方式近似Kubernetes容器镜像垃圾回收的具体部分。

要求

  1. 仅支持使用docker运行时的kubernetes节点。containerdcri-o容器后端不受支持。
  2. 该脚本期望在 Kubernetes DaemonSet 中运行,将节点上的 /var/lib/docker 挂载到容器内部。这使得脚本能够计算出 docker 容器镜像实际使用的磁盘空间。
  3. DaemonSet 应该附加一个具有权限与 Kubernetes API 通信和 cordon / uncordon 节点的 ServiceAccount。这确保在镜像清理过程中不会在节点上调度新的 pods,因为这可能需要一些时间。

它是如何工作的?

  1. 计算 /var/lib/docker 目录(由环境变量 DOCKER_IMAGE_CLEANER_PATH_TO_CHECK 指定)占用的空间。
  2. 如果使用的磁盘空间大于垃圾收集触发阈值(由 DOCKER_IMAGE_CLEANER_THRESHOLD_HIGH 指定),则会触发垃圾收集。如果没有,则脚本将等待另外 5 分钟(由 DOCKER_IMAGE_CLEANER_INTERVAL_SECONDS 设置)。
  3. 如果触发垃圾收集,则首先 cordon Kubernetes 节点,以防止在垃圾收集期间在其上调度任何新的 pods。
  4. 通过 docker container prune 移除已停止的容器。
  5. 通过 docker image prune 移除悬挂的镜像。
  6. 如果没有找到悬挂的镜像进行修剪,则修剪 所有 镜像(docker image prune -a)。
  7. 垃圾收集完成后,Kubernetes 节点也会取消 cordon。
  8. 完成时,我们再等待 5 分钟(由 DOCKER_IMAGE_CLEANER_INTERVAL_SECONDS 设置),然后重复整个过程。

配置选项

目前,使用环境变量来设置配置。

环境变量 描述 默认
DOCKER_IMAGE_CLEANER_NODE_NAME 运行 docker 镜像清理器的 k8s 节点,以便可以通过 k8s API 进行 cordon
DOCKER_IMAGE_CLEANER_PATH_TO_CHECK docker 守护进程使用的 /var/lib/docker 目录的路径 /var/lib/docker
DOCKER_IMAGE_CLEANER_INTERVAL_SECONDS 检查是否需要触发 GC 之间的时间间隔(以秒为单位) 300
DOCKER_IMAGE_CLEANER_DELAY_SECONDS 删除容器镜像之间的时间间隔(以秒为单位),以避免 DOS docker API 1
DOCKER_IMAGE_CLEANER_THRESHOLD_TYPE 确定是否基于相对或绝对磁盘使用情况触发 GC 相对
DOCKER_IMAGE_CLEANER_THRESHOLD_HIGH 开始删除容器镜像时,可用的磁盘空间百分比或绝对磁盘空间(基于 DOCKER_IMAGE_CLEANER_THRESHOLD_TYPE 80
DOCKER_IMAGE_CLEANER_TIMEOUT_SECONDS docker API 请求的超时时间(以秒为单位)。修剪镜像通常需要几分钟。默认:300(5分钟)

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

docker-image-cleaner-1.0.0b3.tar.gz (7.5 kB 查看哈希值

上传时间

构建分布

docker_image_cleaner-1.0.0b3-py3-none-any.whl (8.0 kB 查看散列值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面