openshift上使用devicemapper
? 环境:openshift v3.6.173.0.5 openshift上devicemapper与官方文档中的描述略有不同,在官方文档的描述中,容器使用的lvm文件系统挂载在/var/lib/devicemapper下,因此可以在/var/lib/devicemapper/metadata中找到容器对应的devicemapper的配置信息,在/var/lib/devicemapper/mnt中可以看到容器的文件系统,描述如下:
在openshfit中使用docker inspect查看一个容器的devicemapper信息如下,使用的块设备为?docker-253:0-101504694-13339a03e1b2fc605c83e915a439d8f87131b9e01d599750298a5eada849ae5f "GraphDriver": { Name": devicemapper,Data: { DeviceId29DeviceNamedocker-253:0-101504694-13339a03e1b2fc605c83e915a439d8f87131b9e01d599750298a5eada849ae5fDeviceSize10737418240 } }, 但在/var/lib/docker/devicemapper/mnt中该容器对应的文件挂载为空,系统mount命令也查找不到该容器对应的块设备挂载信息 # pwd /var/lib/docker/devicemapper # du -d 2|grep 13339a03e1b2fc605c83e915a439d8f87131b9e01d599750298a5eada849ae5f 0 ./mnt/13339a03e1b2fc605c83e915a439d8f87131b9e01d599750298a5eada849ae5f-init 0 ./mnt/13339a03e1b2fc605c83e915a439d8f87131b9e01d599750298a5eada849ae5f 查看该容器对应的进程,pid为19422 # docker inspect 17ba06eb4578|grep Pid Pid19422PidMode""PidsLimit0, 在/proc/19422/ns中可以看到其命名空间相关的信息,对比pid 为1的mnt ns(mnt -> mnt:[4026531840]),可以看到该容器与根进程不属于同一个mount 命名空间,因此在根进程所在的mount命名空间中无法查看到该容器的挂载信息 # ll total 0 lrwxrwxrwx. 1 1000010000 root 0 Apr 12 09:43 ipc -> ipc:[4026532228] lrwxrwxrwx. 11 19:47 mnt -> mnt:[402653252143 net -> net:[402653223147 pid -> pid:[402653252343 user -> user:[402653183747 uts -> uts:[4026532522] 使用nsenter -t 19422 -m mnt -u命令进入到进程所在的mount和uts命名空间,使用mount命令可以看到容器的块设备挂载到了该mount命名空间的根目录 /dev/mapper/docker-253:0-101504694-13339a03e1b2fc605c83e915a439d8f87131b9e01d599750298a5eada849ae5f on / type xfs (rw,relatime,context=system_u:object_r:container_file_t:s0:c2,c3",nouuid,attr2,inode64,sunit=1024,swidth=当然也可以在/proc/19422/mounts和/proc/19422/mountinfo中看到与该进程相关的mount信息,其中也包括容器的块设备挂载信息 |