docker ctr crictl 清理日志,设置文件系统
来源:原创
时间:2020-12-02
作者:脚本小站
分类:云原生
清理日志:
如下目录是docker的日志文件:有时会很大达到几十个G。
cd /var/lib/docker/containers 06f1bdf54fbad730ed5ea8401a2137f52f0b1029875525233e2b0aeae22a22e1-json.log
清理即可:如果容器在运行期间不可直接删除,而只能清空文件。
cat /dev/null > 06f1bdf54fbad730ed5ea8401a2137f52f0b1029875525233e2b0aeae22a22e1-json.log
自动清理脚本:
find /var/lib/docker/containers/*/*.log -type f -exec sh -c 'cat /dev/null > "{}"' \;
方法2:
#!/bin/bash set -x export LOGPATH=/var/lib/docker/containers for var in `ls $LOGPATH` do size=`du -sm $LOGPATH/$var | awk '{print $1}'` if [ $size -gt 1024 ]; then du -sh $LOGPATH/$var/$var-json.log cat /dev/null > $LOGPATH/$var/$var-json.log fi done
限制docker日志文件大小:
max-file: "3",意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json
max-size: "1g",滚动前日志的最大大小。一个正整数加上一个代表测量单位(k,m 或 g)的修饰符。默认为 -1(无限制)。
vim /etc/docker/daemon.json { "log-driver":"json-file", "log-opts": {"max-size":"20m", "max-file":"3"} }
重启docker:
systemctl daemon-reload systemctl restart docker
清理其他空间:
查看docker占用的磁盘空间:
$docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 33 33 6.363GB 669.6MB (10%) Containers 74 49 -74B -25B Local Volumes 7 0 12.68kB 12.68kB (100%) Build Cache 0B 0B $docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 33 18 6.363GB 3.821GB (60%) Containers 49 49 -49B 0B Local Volumes 7 0 12.68kB 12.68kB (100%) Build Cache 0B 0B
清理:
docker system prune docker system prune -a # 暂时关闭的容器镜像也会删除
参考:
blog.fundebug.com/2018/01/10/how-to-clean-docker-disk/
定时任务清理:
#!/bin/bash export DIR=/var/lib/docker/containers export BIG_DIR_LIST=`du -sh $DIR/* | grep G| awk '{print $2}'` for var in $BIG_DIR_LIST do log_dir_name=`basename $var` big_log_file=$DIR/$log_dir_name/$log_dir_name'-json.log' if [ -f $big_log_file ]; then cat /dev/null > $big_log_file echo "cat /dev/null > $big_log_file" >> /tmp/clear.log fi done
设置文件系统类型:
vim /etc/docker/daemon.json { "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] }
指定数据目录:存放docker镜像等数据。
{ "data-root": "/data/docker" }
清理aws eks节点中不使用的镜像
启动docker:docker主要用来拉取pause镜像,清理镜像时会把pause镜像一起清除,因为ctr工具无法登陆aws,需要使用docker登陆并下载pause镜像
systemctl status docker systemctl start docker systemctl status docker
登陆镜像仓库:
aws ecr get-login-password --region us-west-1 | docker login --username AWS --password-stdin 602401143452.dkr.ecr.us-west-1.amazonaws.com docker pull 602401143452.dkr.ecr.us-west-1.amazonaws.com/eks/pause:3.5 docker save -o pause:3.5.tar.gz 602401143452.dkr.ecr.us-west-1.amazonaws.com/eks/pause:3.5
导出镜像:
ctr -n k8s.io image export pause:3.7.tar vke-cn-shanghai.cr.volces.com/vke/pause:3.7
停止docker服务:
systemctl stop docker.socket
保存下载的pause镜像:
ctr -n k8s.io import pause:3.5.tar.gz
安装crictl工具,用来清除镜像
curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.22.0/crictl-v1.22.0-linux-amd64.tar.gz | tar -C /usr/local/bin -zxvf -
清理不用的镜像:
crictl rmi --prune # pause镜像也会被清理,所以要手动导入 ctr -n k8s.io images import pause\:3.5.tar.gz ctr -n k8s.io images ls | grep pause