清理旧的docker镜像以释放磁盘空间和inode
项目描述
Docker镜像清理器
一个Python包(docker-image-cleaner
)和相关Docker镜像(quay.io/jupyterhub/docker-image-cleaner
),用于在磁盘inode或空间不足时清理旧Docker镜像。
该脚本最初是为了帮助清理BinderHub节点空间而开发的,否则它可能会耗尽空间,无法构建新的Docker镜像。
为什么?
容器镜像是kubernetes节点上磁盘空间和inode的最大消费者之一。Kubernetes通过垃圾回收未使用的容器镜像和容器来确保每个节点有足够的磁盘空间。调整这些参数对于binderhub安装很重要,因为许多镜像只构建和使用几次。然而,在大多数托管kubernetes安装(如GKE、EKS等)中,我们无法调整这些参数!
此脚本以可配置的方式近似Kubernetes容器镜像垃圾回收的具体部分。
要求
- 仅支持使用
docker
运行时的kubernetes节点。containerd
或cri-o
容器后端不受支持。 - 该脚本期望在 Kubernetes
DaemonSet
中运行,将节点上的/var/lib/docker
挂载到容器内部。这使得脚本能够计算出 docker 容器镜像实际使用的磁盘空间。 DaemonSet
应该附加一个具有权限与 Kubernetes API 通信和 cordon / uncordon 节点的ServiceAccount
。这确保在镜像清理过程中不会在节点上调度新的 pods,因为这可能需要一些时间。
它是如何工作的?
- 计算
/var/lib/docker
目录(由环境变量DOCKER_IMAGE_CLEANER_PATH_TO_CHECK
指定)占用的空间。 - 如果使用的磁盘空间大于垃圾收集触发阈值(由
DOCKER_IMAGE_CLEANER_THRESHOLD_HIGH
指定),则会触发垃圾收集。如果没有,则脚本将等待另外 5 分钟(由DOCKER_IMAGE_CLEANER_INTERVAL_SECONDS
设置)。 - 如果触发垃圾收集,则首先 cordon Kubernetes 节点,以防止在垃圾收集期间在其上调度任何新的 pods。
- 通过
docker container prune
移除已停止的容器。 - 通过
docker image prune
移除悬挂的镜像。 - 如果没有找到悬挂的镜像进行修剪,则修剪 所有 镜像(
docker image prune -a
)。 - 垃圾收集完成后,Kubernetes 节点也会取消 cordon。
- 完成时,我们再等待 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.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 987dad5eec22794dc4f719aecdd3c3e10c423254f1bf14d215fdfd4b4ecad8a8 |
|
MD5 | f663e5194c55e51f2ac4aae268444008 |
|
BLAKE2b-256 | 42cf43aeac8e11c41f2719c80d9542c5526b8780b4e5d2eafd1dc8a69a419087 |
关闭
docker_image_cleaner-1.0.0b3-py3-none-any.whl的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 714746d47d3393f7d17c17b3e3d6af6a7cf08325a14873a62b0a33adb77bd260 |
|
MD5 | 3333dbca7f285711dce62ae1404130b5 |
|
BLAKE2b-256 | 2762973bc20a08f364d271066d98c25727e69c0d2ab795f2a174b8c899ee5043 |