K8S环境中Containerd运行时占用文件定位清理

目录

[1. 目录结构](#1. 目录结构)

[2. 核心概念与工作原理](#2. 核心概念与工作原理)

[3. 日常管理与排查](#3. 日常管理与排查)

[3.1 定位大文件目录](#3.1 定位大文件目录)

[3.2 关联快照与容器](#3.2 关联快照与容器)

[3.3 安全清理](#3.3 安全清理)

[4. 与Docker的主要区别](#4. 与Docker的主要区别)


/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs是 containerd 使用 OverlayFS ​ 作为存储驱动时,用于管理容器和镜像文件系统快照​ 的核心位置。

1. 目录结构

下面这个表格汇总了该目录下关键组件的作用,可快速建立整体概念。

组件/目录 作用描述
snapshots/目录 核心目录,存储所有快照层 。每个数字子目录(如 1/, 2/) 代表一个具体的快照层。
**snapshots/<id>/fs**​ 快照的实际数据目录。对于镜像层(Committed状态),存放只读文件;对于容器层(Active状态),存放容器写入的新数据。
**snapshots/<id>/work**​ OverlayFS 的工作目录 ,用于在联合挂载时保证文件操作的原子性(如文件重命名)。切勿手动修改
metadata.db文件 存储所有快照的元数据(如父子关系、创建时间),通常基于 BoltDB。

2. 核心概念与工作原理

了解了目录结构后,我们来看看 containerd 是如何利用这些组件工作的。

  • 快照与分层 :containerd 中的 快照 ​ 代表了文件系统在某个时间点的状态。每个镜像层都会对应一个 committed ​ 状态的只读快照。当创建一个容器时,会基于最上层的镜像快照生成一个 active​ 状态的可读写快照,容器内所有修改都发生在这个可读写层。

  • 联合挂载 :当容器启动时,OverlayFS 驱动会将多个只读的镜像层(对应 lowerdir)和容器唯一的可读写层(对应 upperdir)联合挂载到一个统一的视图(merged目录),容器进程看到的文件系统就是这个联合后的结果。

3. 日常管理与排查

掌握上述知识能帮助你解决实际问题,比如定位大文件或关联路径与容器。

3.1 定位大文件目录

当磁盘空间紧张时,可以查看 snapshots目录下各子目录的大小,找出占用空间大的快照。

复制代码
sudo du -h -d 1 /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots | sort -hr

或crictl stats 命令查看

复制代码
#查看所有容器
crictl stats 
#或查看指定容器
crictl stats <container-id-1> <container-id-2>

3.2 关联快照与容器

找到占用大的数字目录(如 247)后,可以通过 mount命令查找其挂载信息,从而关联到具体的容器。

复制代码
mount | grep /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/247/

命令输出会显示包含容器ID的挂载点路径(通常在 /run/containerd/io.containerd.runtime.v2.task/... ),然后可以使用 crictlctr命令通过该容器ID查看容器详情,即可找到对应的服务模块容器名称。

复制代码
 crictl   ps   |   grep   容器ID前几位

或者

复制代码
 crictl   ps  -v  |   grep   -A10  <完整容器ID或前几位>

3.3 安全清理

切勿直接手动删除 snapshots目录下的子目录或文件,这可能导致数据不一致。正确的清理方式是使用容器运行时工具:

复制代码
# 使用 ctr 删除不需要的容器和镜像
ctr containers list
ctr containers rm <container_id>
ctr images rm <image_name>

# 或者使用 crictl (适用于 Kubernetes 环境)
crictl rmi <image_id>

删除不再使用的容器和镜像后,其关联的未被引用的快照层通常可以被垃圾回收机制清理。

4. 与Docker的主要区别

简单来说,Docker 的 overlay2和 containerd 的 io.containerd.snapshotter.v1.overlayfs都使用 OverlayFS,但 containerd 的快照管理抽象更清晰,与运行时的耦合度更低

相关推荐
一嘴一个橘子16 分钟前
spring-aop 的 基础使用 - 4 - 环绕通知 @Around
java
小毅&Nora32 分钟前
【Java线程安全实战】⑨ CompletableFuture的高级用法:从基础到高阶,结合虚拟线程
java·线程安全·虚拟线程
冰冰菜的扣jio33 分钟前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
Joren的学习记录36 分钟前
【Linux运维大神系列】Kubernetes详解3(kubeadm部署k8s1.23高可用集群)
linux·运维·kubernetes
小璐猪头1 小时前
专为 Spring Boot 设计的 Elasticsearch 日志收集 Starter
java
hanyi_qwe1 小时前
发布策略 【K8S (三)】
docker·容器·kubernetes
ps酷教程1 小时前
HttpPostRequestDecoder源码浅析
java·http·netty
闲人编程1 小时前
消息通知系统实现:构建高可用、可扩展的企业级通知服务
java·服务器·网络·python·消息队列·异步处理·分发器
栈与堆1 小时前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust
OC溥哥9992 小时前
Paper MinecraftV3.0重大更新(下界更新)我的世界C++2D版本隆重推出,拷贝即玩!
java·c++·算法