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


    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的意思是如果没有获得锁,则不进行操作。当然,设定为每天执行的话,由于周期较长,可以不用加文件锁。

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

  • 相关阅读:
    $(document).ready(function() {。。。。。})里面的所有的代码都不执行(不执行初始化脚本)
    checkbox使用示例
    js中数组元素的添加和删除
    maven构建项目里classpath的位置
    Docker相关释义
    linux的systemctl服务及其使用
    RabbitMQ中客户端的Channel类里各方法释义
    java四种内部类详解
    生成随机字符串(三种方式)
    RabbitMQ在java中基础使用
  • 原文地址:https://www.cnblogs.com/00986014w/p/12482591.html
Copyright © 2020-2023  润新知