如何查看底层的文件系统路径

本文档介绍如何获取 Kubernetes POD 的底层文件系统路径,包括 Overlay 文件系统的结构和排查方法。


获取 POD 的 Overlay 信息

步骤一:获取 Container ID

使用 K9S 直接查看 POD,获取里面的 Container ID:

image.png


步骤二:获取 POD 挂载信息

在 POD 运行的主机上使用 crictl inspect 命令查看容器详情:

crictl inspect 5bb99898f6a2495592ede5a98d2430558f42a1028575f28642e2a4bdd7a1efd4

查看挂载路径

在输出结果中查看 mounts 部分的 hostPath,这就是在磁盘上的实际路径。

image.png


步骤三:获取 POD Overlay 文件系统信息

在已知 containerd 的 container-id 的情况下,使用 mount 命令查看对应的挂载:

mount | grep e0e9262e30bed225c554475f5b6bbfb534c874a34306773978b3e93e4df9a21d

image.png

输出示例:

overlay on /run/containerd/io.containerd.runtime.v2.task/k8s.io/e0e9262e30bed225c554475f5b6bbfb534c874a34306773978b3e93e4df9a21d/rootfs type overlay (rw,relatime,lowerdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22040/fs:/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22039/fs:/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22038/fs:/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22037/fs,upperdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/56817/fs,workdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/56817/work)

upperdir 的作用

upperdir 就是这个容器最上层的文件系统。错 readonly 时,可以到这个目录查看是否有问题。


Overlay 文件系统说明

OverlayFS 概述

OverlayFS 是一种联合文件系统,通过多层结构提供统一的文件系统视图。

核心概念

目录类型说明读写权限
lowerdir底层只读层,可以有多个,按冒号分隔堆叠只读
upperdir可写层,挂载在 lowerdir 顶部读写
workdir内部工作目录,用于 copy-on-write 机制内部使用

详细说明

lowerdir(底层只读层)

  • 指向底层只读层的一个或多个目录
  • 多个 lowerdir 按冒号分隔,最左边是最低层,最右边是最高层
  • 通常对应容器镜像的各个层(snapshots)
  • 这些层是只读的

upperdir(可写层)

  • 挂载在 lowerdir 顶部的可写层
  • 对文件系统的所有写操作都发生在这个目录
  • 包含容器运行时对文件系统所做的任何更改

workdir(工作目录)

  • OverlayFS 用于内部操作的工作目录
  • 用于实现 copy-on-write(写时复制)机制
  • 当需要修改文件时,会在此目录创建临时文件,然后复制到 upperdir
  • 对用户通常不可见

读写机制

┌─────────────────────────────────────┐
│           统一视图 (merged)          │
├─────────────────────────────────────┤
│         upperdir (可写层)            │  ← 写操作发生在这里
├─────────────────────────────────────┤
│         lowerdir N (只读)            │
├─────────────────────────────────────┤
│         lowerdir N-1 (只读)          │
├─────────────────────────────────────┤
│         ...                         │
├─────────────────────────────────────┤
│         lowerdir 1 (只读)            │  ← 镜像基础层
└─────────────────────────────────────┘

读写规则

  • 读取文件:如果 upperdir 中存在该文件,则从 upperdir 读werdir 读取
  • 写入文件:使用 copy-on-write 机制,在 upperdir 中创建文件副本,lowerdir 中的原始文件保持不变
  • 优势:可以有自己的 upperdir,同时共享底层的 lowerdir,实现高效的存储和资源管理

参考信息

推荐阅读

重学容器 Overlay - 详细介绍 Overlay 文件系统原理


其他信息

查看 snapshot 目录内容示例:

root@master-one:/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22037/fs

image.png


相关链接


返回: Kubernetes