当前位置: 首页 > news >正文

openshift上使用devicemapper

 

环境:openshift v3.6.173.0.5

openshift上devicemapper与官方文档中的描述略有不同,在官方文档的描述中,容器使用的lvm文件系统挂载在/var/lib/devicemapper下,因此可以在/var/lib/devicemapper/metadata中找到容器对应的devicemapper的配置信息,在/var/lib/devicemapper/mnt中可以看到容器的文件系统,描述如下:

The /var/lib/docker/devicemapper/metadata/ directory contains metadata about the Devicemapper configuration itself and about each image and container layer that exist. The devicemapper storage driver uses snapshots, and this metadata include information about those snapshots. These files are in JSON format.

The /var/lib/devicemapper/mnt/ directory contains a mount point for each image and container layer that exists. Image layer mount points are empty, but a container’s mount point shows the container’s filesystem as it appears from within the container.

在openshfit中使用docker inspect查看一个容器的devicemapper信息如下,使用的块设备为 docker-253:0-101504694-13339a03e1b2fc605c83e915a439d8f87131b9e01d599750298a5eada849ae5f

"GraphDriver": {
    "Name": "devicemapper",
    "Data": {
        "DeviceId": "29",
        "DeviceName": "docker-253:0-101504694-13339a03e1b2fc605c83e915a439d8f87131b9e01d599750298a5eada849ae5f",
        "DeviceSize": "10737418240"
    }
},

但在/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
  "Pid": 19422,
  "PidMode": "",
  "PidsLimit": 0,

在/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. 1 1000010000 root 0 Apr 11 19:47 mnt -> mnt:[4026532521]
lrwxrwxrwx. 1 1000010000 root 0 Apr 12 09:43 net -> net:[4026532231]
lrwxrwxrwx. 1 1000010000 root 0 Apr 11 19:47 pid -> pid:[4026532523]
lrwxrwxrwx. 1 1000010000 root 0 Apr 12 09:43 user -> user:[4026531837]
lrwxrwxrwx. 1 1000010000 root 0 Apr 11 19:47 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=1024,noquota)

当然也可以在/proc/19422/mounts和/proc/19422/mountinfo中看到与该进程相关的mount信息,其中也包括容器的块设备挂载信息

使用lsns可以看系统中的命名空间与进程的对应关系,下面列出了pid为19422的相关命名空间,NPROCS表示该命名空间下面的进程数目,PID表示该命名空间下的最小PID值。可以看出19422与根进程属于同一个user命名空间。其中mnt命名空间中有2个进程,一个是19422,另一个是19422的父进程(此处为java)。因此在容器异常退出后,可以通过进入未退出进程的命名空间定位问题。

[root@lab-node1 proc]# lsns -p 19422
        NS TYPE  NPROCS   PID USER       COMMAND
4026531837 user     338     1 root       /usr/lib/systemd/systemd --switched-root --system --deserialize 21
4026532228 ipc        3 18413 1001       /usr/bin/pod
4026532231 net        3 18413 1001       /usr/bin/pod
4026532521 mnt        2 19422 1000010000 /bin/sh /opt/eap/bin/standalone.sh -Djavax.net.ssl.keyStore=/opt/hawkular/auth/hawkular-metrics.keystore -Djavax.net.ssl.tru
4026532522 uts        2 19422 1000010000 /bin/sh /opt/eap/bin/standalone.sh -Djavax.net.ssl.keyStore=/opt/hawkular/auth/hawkular-metrics.keystore -Djavax.net.ssl.tru
4026532523 pid        2 19422 1000010000 /bin/sh /opt/eap/bin/standalone.sh -Djavax.net.ssl.keyStore=/opt/hawkular/auth/hawkular-metrics.keystore -Djavax.net.ssl.tru

 

参考:

https://xuxinkun.github.io/2019/04/02/deviemapper-docker/

https://docs.docker.com/engine/reference/commandline/dockerd/

转载于:https://www.cnblogs.com/charlieroro/p/10695133.html

相关文章:

  • POJ-1195-Mobile phones
  • 2019 全球智博会即将开幕,五大惊喜抢先看!| 智博会
  • 5G重新定义汽车工业:它是汽车智能化的关键技术吗?| 2019 上海车展
  • linux目录结构特点
  • 基于StarlingX的边缘计算机器学习优化
  • Mysql查询语句的运行流程
  • 跑步书籍推荐 --- 跑步指南
  • 2019阿里云企业服务器配置选择教程!【 可供新手小白参考】
  • CSS文本超出2行就隐藏并且显示省略号
  • “打开潜意识 拥抱心灵智慧” 51CTO心理师线下沙龙课北京站
  • 生成树协议(STP)
  • Robust PCA via Outlier Pursuit
  • JavaScript 设计模式之策略模式
  • SpringSocial相关的知识点
  • 移动端长按事件
  • 10个最佳ES6特性 ES7与ES8的特性
  • const let
  • ES2017异步函数现已正式可用
  • Linux各目录及每个目录的详细介绍
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • tab.js分享及浏览器兼容性问题汇总
  • vue数据传递--我有特殊的实现技巧
  • 初探 Vue 生命周期和钩子函数
  • 大型网站性能监测、分析与优化常见问题QA
  • 分类模型——Logistics Regression
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 前端学习笔记之观察者模式
  • 前端之Sass/Scss实战笔记
  • 因为阿里,他们成了“杭漂”
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • # Apache SeaTunnel 究竟是什么?
  • # centos7下FFmpeg环境部署记录
  • #AngularJS#$sce.trustAsResourceUrl
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #pragma 指令
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (小白学Java)Java简介和基本配置
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转)四层和七层负载均衡的区别
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ... 是什么 ?... 有什么用处?
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .gitignore
  • .gitignore文件—git忽略文件
  • .net 后台导出excel ,word