暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

K8s Node主机根分区磁盘使用占用过多原因探究

运维笔谈 2024-04-08
119

有一台跑Elasticsearch冷节点的Node主机根分区快70%了,想了想前几天这台机器上的es容器刚自动重启过,应该是会释放下空间才对。

到服务器上查询发现这个文件占用很大。差不多占用了20多G。

    # file var/lib/docker/devicemapper/devicemapper/data
    /var/lib/docker/devicemapper/devicemapper/data: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

    那么这个文件到底是做什么的呢?

    /var/lib/docker/devicemapper/devicemapper/data 存储的是 Docker 用 Device Mapper 存储驱动时的数据。Device Mapper 是 Linux 内核提供的一个通用设备映射机制,Docker 可以利用它来实现容器镜像和容器的存储。

    该目录变得很大通常是因为以下原因

    1.容器和镜像数据

    这个目录存储了 Docker 镜像的层和容器运行时产生的数据。创建更多的容器和镜像,这个目录会占用更多的磁盘空间。

    2.未清理的数据

    有时,即使删除了容器或镜像,相关的数据可能仍然保留在 Device Mapper 的存储中。这可能是因为 Docker 的垃圾回收机制没有立即清理这些未使用的数据,或者是因为某些数据仍然被其他容器或镜像所引用。

    3.日志文件

    容器内部的应用程序可能会产生大量的日志文件,这些文件也会占用 Device Mapper 存储的空间。

    4.卷(Volumes)

    如果使用了 Docker 卷来持久化数据,这些数据也会存储在 Device Mapper 的存储中。

    要解决这个问题,我们可以尝试以下方法:

    1.清理未使用的镜像、容器和卷

    使用 docker system prune 命令可以清理掉未使用的镜像、容器、网络和卷,从而释放空间。本案例就是主机存在未及时释放掉的容器。

    2.限制容器和镜像的大小

    在创建容器或构建镜像时,尽量减小它们的大小,只包含必要的文件和依赖。

    3.配置 Docker 的存储选项

    修改 Docker 的配置,使用单独的一块盘来存储这些数据,而不是放到根分区(我是没办法,小厂为了节约成本)


    点击下面的“运维笔谈”公众号,对话回复 “阿里云k8s” 可以获取 “阿里云Kubernetes项目实战手册”


    文章转载自运维笔谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论