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

 更新时间:2026年04月29日 08:57:04   作者:岚叔运维  
容器运行时是Kubernetes最重要的组件之一,负责管理镜像和容器的生命周期,这篇文章主要介绍了K8S环境中Containerd运行时占用文件定位安全清理方法的相关资料,需要的朋友可以参考下

前言

/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 的快照管理抽象更清晰,与运行时的耦合度更低

总结

到此这篇关于K8S环境中Containerd运行时占用文件定位安全清理方法的文章就介绍到这了,更多相关K8S Containerd运行时占用文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • centos7部署k8s集群1.28.2版本完整步骤

    centos7部署k8s集群1.28.2版本完整步骤

    部署Kubernetes集群需要多台物理机或虚拟机,每个节点至少需要2个CPU、2GB内存和20GB硬盘空间,这篇文章主要给大家介绍了关于centos7部署k8s集群1.28.2版本的相关资料,需要的朋友可以参考下
    2024-01-01
  • K8S集群需要开放的端口说明介绍

    K8S集群需要开放的端口说明介绍

    这篇文章主要介绍了K8S集群需要开放的端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • K8s环境内部的服务如何注册到外部

    K8s环境内部的服务如何注册到外部

    文章主要讨论了在K8s环境外部部署服务时如何与部署在K8s内部的服务进行服务注册,提出了使用LoadBalancer、Kong和NodePort三种方式,并详细介绍了每种方式的实现步骤和注意事项
    2026-02-02
  • Kubernetes从私有镜像仓库拉取容器镜像时的身份验证方式

    Kubernetes从私有镜像仓库拉取容器镜像时的身份验证方式

    Kubernetes从私有镜像仓库拉取容器镜像时,需要使用私有仓库的凭证进行身份验证,这些凭证可以存储在`private-registry-auth`这个Secret中,然后在Pod或ServiceAccount中指定使用该Secret,这样可以确保Pod在拉取镜像时能够正确进行身份验证
    2026-01-01
  • Ansible部署K8s集群的方法

    Ansible部署K8s集群的方法

    这篇文章主要介绍了Ansible部署K8s集群,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • IPVS下CoreDNS滚动更新解析失败原理探究

    IPVS下CoreDNS滚动更新解析失败原理探究

    这篇文章主要为大家介绍了IPVS下CoreDNS滚动更新解析失败原理探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • k8s pod始终处于pending状态的解决方案

    k8s pod始终处于pending状态的解决方案

    新K8s部署后服务重启导致dashboard无法访问,所有Pod处于Pending状态,原因分析显示,因节点污点引发调度失败,删除污点后问题解决,总结Pending原因分为三类:调度问题(污点、资源不足)、镜像问题(拉取失败)、依赖性问题(卷/Secret/ConfigMap缺失)
    2025-08-08
  • K8S中设置JVM堆栈大小实现方式

    K8S中设置JVM堆栈大小实现方式

    这篇文章主要介绍了K8S中设置JVM堆栈大小实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • Kubernetes集群调度详解(节点亲和性、Pod亲和性、Taint与Toleration)

    Kubernetes集群调度详解(节点亲和性、Pod亲和性、Taint与Toleration)

    Kubernetes调度器负责将Pod分配到节点,兼顾资源合理分配、调度效率及用户策略,通过预选、优选、选择三阶段决策,支持自定义调度器、节点亲和性(软硬策略)、Taint/Toleration机制及直接指定节点,实现灵活调度与容错
    2025-09-09
  • k8s pod resources:{}设置的含义及说明

    k8s pod resources:{}设置的含义及说明

    Pod的资源请求和限制决定了其在Kubernetes集群中的优先级和调度行为,未设置资源请求和限制的Pod会被归类为BestEffort,优先级最低,资源不足时可能被驱逐,合理设置requests和limits可以避免资源争抢和意外驱逐,提高系统的稳定性和资源利用率
    2026-02-02

最新评论