containerd 默认使用 overlayfs 文件系统
对于每个容器, 它的 MergedDir 在
${state}/io.containerd.runtime.v2.task/${namespace}/${containerId}/rootfs
本质见 containerd 代码 runtime/v1/linux/bundle.go:47, runtime/v1/linux/runtime.go:164 下面是一些粗略分析.
这个路径看起来有很多变量 如何才能知道呢?
state参数可以看一下containerd的启动参数(也可以在配置文件里配置)
标准的containerd是有标准目录的, 一些定制的有自己的实现
containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
而runtime的type是 io.containerd.runtime.v2.task
这是固定的吗?
然后 namespace 在k8s场景下默认是k8s.io
containerId这个很容易理解了.
config.json 里有一个 root.path 属性, 一般都是 “rootfs” (硬编码的). 所以我们可以直接忽略config.json.
分析相关代码也可以看到它 mkdir 了 rootfs 目录.
另外, 通过 mount 命令也可以看到该目录是个overlay.
其他
最快复制文件的办法
vendor/github.com/containerd/continuity/fs/copy_linux.go:67
