配置定时任务清理多余的镜像和容器文件

摘要:
k8S集群已经运行了很长时间,不可避免地会生成大量无用的图像和容器文件,因此需要经常清理。这需要安排任务。如果crond程序在系统中运行,只需在/var/spool/cron目录中创建一个以用户名命名的文件,crond就可以在适当的时间自动运行它。通过上述操作,系统将自动检查冗余数据是否需要在每晚零点清理,以确保集群有足够的资源运行。

k8s集群运行久了,难免会产生大量无用的镜像和容器文件,因此需要经常进行清理。

一般而言,docker容器默认的本地数据存储路径位于/var/lib/docker路径下,通过df -h /var/lib/docker命令,可以查看其占用情况。如果高于80%,则意味着需要清理了。

一、清理命令

与清理容器多余数据相关的命令有两条,分别是:

docker image prune -af
docker system prune -f

其中,第一条命令是仅仅清除没有被容器使用的镜像文件,第二条命令是清除多余的数据,包括停止的容器、多余的镜像、未被使用的volume等等,比第一条命令包含的内容多。

以上两条命令可以通过一个脚本clean.sh统一执行:

#! /bin/bash 

need_clean() {
    used=`df -h /var/lib/docker | awk -F"[ %]+" '/dev/{print $5}'`
    if [[ $used -ge 80 ]]; then
        return 0
    fi
    
    return 1

}

if need_clean; then
    docker image prune -af
    if need_clean; then
        docker system prune -f
    fi
fi

这里通过awk获取df -h的结果中的占用比例那一栏。-F"[ %]+"的意思是指定若干个空格或%为分隔符,从而将百分数中的%剔除。

只有当占用比例大于80%时才执行清除命令。如果执行第一条命令后降到了80%以下,则不用再执行下一条命令。

二、创建定时任务

脚本写完了,但是我们希望机器能自动在合适的时间运行它。这就需要定时任务了。

linux中创建定时任务其实很简单。系统中如果运行了crond程序,则只需要在/var/spool/cron目录下创建一个以用户名命名的文件,crond即可自动在合适的时间运行它。

比如我们以root用户管理机器,就在/var/spool/cron目录下创建一个root文件:

@daily   bash /usr/local/bin/clean.sh

将脚本拷贝到/usr/local/bin目录下(当然也可以是别的目录),那么crond就会在每天的午夜零点执行这个脚本。

三、添加文件锁

有一种可能的情况是,如果将运行脚本的时间设定为每分钟执行,则有可能出现上一个命令还没执行完,下一个命令就来了。这时就会造成混乱。为了应对这种情况,需要通过flock命令,为文件添加锁。于是上面的root文件可以改写为:

@daily  flock -n /tmp/.cleanlock -c "bash /usr/local/bin/clean.sh"

其中,/tmp/.cleanlock可以随便指定。-n的意思是如果没有获得锁,则不进行操作。当然,设定为每天执行的话,由于周期较长,可以不用加文件锁。

通过以上操作,系统就会在每天的夜里零点自动检查是否需要清理多余的数据,确保集群运行的资源充足。

免责声明:文章转载自《配置定时任务清理多余的镜像和容器文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Protobuf 语言指南(proto3)python锁定焦点到指定进程窗口的参考方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Docker-PS命令解析

查看 docker 容器,必然要用到 docker ps 命令。其基本格式为: docker ps [OPTIONS] 关键在于 OPTIONS(选项): 1 常见用法 1. 最常见的用法 $ docker ps 显示当前正在运行的容器。 在 PORTS 一列,如果暴露的端口是连续的,还会被合并在一起,例如一个容器暴露了3个 TCP 端口:100,101...

Docker 部署Confluence15.2

一、数据库准备 数据库版本:5.7 这里数据库并没有采用docker镜像方式,而是选择已有数据库。至于数据库安装这里不再说明。 注:我这里安装confluence时,需要在下面配置数据库信息时,在数据库地址链接后面加上?sessionVariables=tx_isolation='READ-COMMITTED',否则会报错 1) 创建数据库并授权 cre...

docker下载镜像太慢的解决方案

参考链接:https://blog.csdn.net/weixin_43569697/article/details/89279225 docker下载镜像卡死或太慢找了网上很多方法,使用镜像中国也是下载卡死。最后一种成功了,下载速度很满意1.先再阿里云注册账号,不需要绑定什么,直接注册就可以了,有账号的直接登录就好。地址:https://cr.conso...

编译apollo实践

前面主要参考 手把手教你运行apollo,但这个文章里的apollo版本太低。后面主要看官方文档,在官方的apollo/docs目录下,通过typora去看。 sudo snap install typora 以前在别的公司可以通过sublime的插件去看,但这次安装了sublieme件,却没有效果。 准备工作 安装 Ubuntu 18.04.5 LTS...

flex自适应高度内容高度超出容器高度自动出现滚动条的问题

在容器中设置 flex-grow:2; overflow-y:auto;overflow-x:hidden;容器高度自适应。 内容高度不固定,无法出现滚动条,然后在容器中添加height:0,出现滚动条,个人猜想为设置height:0后,将默认的盒子模型高度设置为空,让flex设置的高度生效; //TODO 实验,查资料...

(十九)VMware Harbor 详细介绍

一 . 简介 Harbor是VMware公司开源的企业级DockerRegistry项目,项目地址为https://github.com/vmware/harbor。其目标是帮助用户迅速搭建一个企业级的Dockerregistry服务。它以Docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based Access...