[标签]: docker linux overlay2 overlay2目录占用磁盘 overlay2是什么 /var/lib/docker/overlay2/目录
问题详情的描述或方案目标的预期:
今天收到k8s集群的node节点磁盘告警,经过排查确定是dockers工作目录下的某个容器子目录接近50G,
/var/lib/docker/overlay2/9e07ed2704ba4c60d3694b2d12f57da8a4b5055281d250e48a8282f76362c40f,具体是里面的diff和merged差不多各25G,
这是啥?该怎么处理呢?
【解决方案】
[知识一] : /var/lib/docker/overlay2 -- 容器的层文件的实际存储目录
该目录下的merged是容器原始数据,diff是容器创建后生成的数据产生的数据层

目录名前12和容器ID一致的:/var/lib/docker/containers/ 以及 /var/lib/docker/image/overlay2/layerdb/mounts/
但此处ID和容器名无直接关联,需要用到inspect --format ''命令取得关联,容器的存储配置和此目录名相关
命令:
docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep "9e07ed2704ba4c60d3694b2d12f57da8a4b5055281d250e48a8282f76362c40f"
输出结果:
3262, 95f1cc99809501fe6c5133bbadd1a973b938425fd87a5ff98e3f4ab79970589a, /nginx-ingress, /var/lib/docker/overlay2/9e07ed2704ba4c60d3694b2d12f57da8a4b5055281d250e48a8282f7/work
其中/nginx-ingress是容器名,通过docker ps |grep nginx-ingress 或 kubectl get po -A|grep nginx-ingress 就可以定位到了
我这里确认后是k8s的Ingress入口pod这几天日志暴增,导致磁盘告警;采取的方法是使用 kubectl delete 清除这个有大量历史日志的pod,
集群会自动重建一个新pod,以此解决问题。记得日志需要的话先捞出来。
总结:了解目录、确认关联、解决思路、验证、实施。