关于overlay2及清理
docker默认存储路径/var/lib/docker/overlay2下占用空间很大,达到了80%以上,需要清理,不然k8s节点将驱逐pod,后果很可怕。
进入/var/lib/docker/overlay2目录,可以看到很多md5编码的id文件,这个文件是什么?
上图的md5编码文件是什么?或者说docker的overlay2中存的都是什么?
在/var/lib/docker/overlay2目录下的文件都是docker使用的存储,overlay2是docker使用的文件存储驱动。也就是这些md5文件里面存储的都是我们的镜像文件和容器内的文件,所以如果一个容器里面的文件不单独挂出来,那么容器产生的文件默认都在这目录下面。
-
排序看一下文件大小:
du -sh * |sort -h
这些文件也不敢轻易清理,因为有可能是在用的镜像,清理了文件和镜像后容器就有问题,那么就需要确定这些md5文件和哪个容器挂钩。
-
确定md5文件是哪个容器的存储目录:
docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}'|grep 58db5ae65d5632546965 # 如果运行结果是没有在运行的容器使用,那么有可能容器早就被清理,这个容器存储目录也毫无意义。 清理镜像脚本: [root@node1 overlay2]# vim docker.sh for i in `ls /data/docker/overlay2`; do docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}'|grep $i if [ $? -eq 0 ]; then echo "该镜像不能清理,正在使用" else rm -rf $i fi done 在K8S中,在docker inspect的时候可以看见pod的名称,可以重启一下pod,来释放临时文件!
直接删除:
rm -rf 66c0a274589e4dcab123bc7a6093bb692efd60babf02df7ade98070b96644aa6
或者先备份在删除:
cp -a 66c0a274589e4dcab123bc7a6093bb692efd60babf02df7ade98070b96644aa6 /data/overlay2/
rm -rf 66c0a274589e4dcab123bc7a6093bb692efd60babf02df7ade98070b96644aa6
查看docker磁盘使用情况
moa-k8s-function-02:/var/lib/docker/overlay2# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 412 74 19.09GB 17.33GB (90%)
Containers 143 140 342.6kB 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)
docker system prune
清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了…所以使用之前一定要想清楚.
docker system prune -a
所以docker安装的时候尽量不要默认安装目录/var/lib/docker,要安装到对应的数据盘挂载目录下,不然docker需要迁移。