在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

怎么配置docker使用devicemapper

123次阅读
没有评论

共计 5690 个字符,预计需要花费 15 分钟才能阅读完成。

本篇内容介绍了“怎么配置 docker 使用 devicemapper”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

devicemapper 最佳实践

docker 最先是跑在 ubuntu 和 debian 上的, 使用 aufs 存储器. 由于 docker 越来越流行, 许多公司希望在 RHEL 上使用, 但是上游内核中没有包括 aufs, 所以 rhel 不能使用 aufs. 最终开发者们开发了一个新的后端存储引擎 devicemapper, 基于已有的 Device Mapper 技术, 并且使 docker 支持可插拔, 现在全世界有很多真实案例在生产环境使用 devicemapper.

镜像层与共享

devicemapper 存储每个镜像和容器在自己的虚拟设备上, 也就是说这些设备是按需分配(copy-on-write snapshot devices),Device Mapper 技术是工作在 block 级别的而不是文件级别的.

devicemapper 创建镜像的方式是:

devicemapper 基于块设备或 loop mounted sparse files 来创建一个虚拟池.

然后在上面创建一个有文件系统的基础设备(base device).

每个镜像层就是基于这个基础设备的 COW 快照(snapshot), 也就是说这些快照初始化时是空的, 只有数据写入时才会占用池中的空间.

devicemapper 的读操作

容器中的应用请求块 0x44f, 因为容器层也是个虚拟的快照, 不存数据, 只有指针. 通过指针找到存放数据的镜像层.

根据指针找到 a005e 层的 0xf33.

devicemapper copy 其中的数据到容器内存中.

存储驱动器返回数据给请求的应用.

devicemapper 的写操作

devicemapper 写操作是通过 allocate-on-demand(按需分配)的方式. 更新数据是通过 COW 方式. 因为 devicemapper 是一种基于块的技术, 所以就算修改一个大文件, 也不会 copy 整个文件过来. 只会 copy 对应要修改的块.

写新数据

写 56k 的数据到容器中:

应用请求写 56k 的数据到容器

按需分配一个新的 64k 大小的块在容器层.(超过 64k, 则分配多个)

数据写入新分配的块中

修改数据

应用请求修改容器中数据

cow 操作定位到要更新的块

分配新的块在容器层并将数据 copy 过来

对数据进行修改

配置 docker 使用 devicemapper

基于 rhel 的分支默认使用的 devicemapper, 并且默认配置成 loop-lvm 模式运行. 这种模式使用文件来作为虚拟池 (thin pool) 构建镜像和容器的层. 但是生产环境不因该使用这种模式.

通过 docker info 命令来检查

[root@srv00 ~]# docker info 
 WARNING: Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.107-RHEL7 (2015-12-01)
 ...

Data loop file,Metadata loop file 指示了 docker 运行在 loop-lvm 模式下, 并且还有个 WARNING.

为生产环境配置 direct-lvm 模式

生产环境下因该使用 direct-lvm, 如果之前有镜像在 loop-lvm 模式下创建, 需要切换, 则因该将镜像做备份.(push 到 hub 或私有 registry)

我给虚拟机分配个 30G 磁盘

1. 停止 docker daemon

[root@srv00 ~]# systemctl stop docker

2. 创建相关的逻辑卷和 thinpool

创建 pv

[root@srv00 ~]# fdisk -l  == 检查下磁盘
Disk /dev/xvdb: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@srv00 ~]# pvcreate /dev/xvdb
 Physical volume  /dev/xvdb  successfully created

创建 vg

[root@srv00 ~]# vgcreate vgdocker /dev/xvdb
 Volume group  vgdocker  successfully created

创建一个 thin pool, 名字叫 thinpool, 先来创建逻辑卷

[root@srv00 ~]# lvcreate --wipesignatures y -n thinpool -l 95%VG vgdocker
 Logical volume  thinpool  created.
[root@srv00 ~]# lvcreate --wipesignatures y -n thinpoolmeta -l 1%VG vgdocker 
 Logical volume  thinpoolmeta  created.
[root@srv00 ~]# lvscan
 ACTIVE  /dev/centos/swap  [4.00 GiB] inherit
 ACTIVE  /dev/centos/root  [35.47 GiB] inherit
 ACTIVE  /dev/vgdocker/thinpool  [28.50 GiB] inherit
 ACTIVE  /dev/vgdocker/thinpoolmeta  [304.00 MiB] inherit

剩余的 4% 留给它们自动扩展

转换成 thin pool

[root@srv00 ~]# lvconvert -y --zero n -c 512K --thinpool vgdocker/thinpool --poolmetadata vgdocker/thinpoolmeta
 WARNING: Converting logical volume vgdocker/thinpool and vgdocker/thinpoolmeta to pool s data and metadata volumes.
 THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
 Converted vgdocker/thinpool to thin pool.

设置 thinpool 的自动扩展参数, 并应用此 profile

[root@srv00 ~]# vi /etc/lvm/profile/docker-thinpool.profile
activation {
 thin_pool_autoextend_threshold=80
 thin_pool_autoextend_percent=20
[root@srv00 ~]# lvchange --metadataprofile docker-thinpool vgdocker/thinpool
 Logical volume  thinpool  changed.

当空间大于 80% 时进行扩展. 扩展的大小是空闲空间的 20%

查看 thinpool 是否是已监视状态

[root@srv00 ~]# lvs -o+seg_monitor
 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Monitor 
 root centos -wi-ao---- 35.47g 
 swap centos -wi-ao---- 4.00g 
 thinpool vgdocker twi-a-t--- 28.50g 0.00 0.02 monitored

3. 删除 docker 存储目录

[root@srv00 ~]# rm -rf /var/lib/docker/*

注意备份重要镜像等

4. 修改启动参数并启动

我们通过 systemd 的 drop-in 方式修改, 也是官方推荐的

[root@srv00 ~]# mkdir /etc/systemd/system/docker.service.d
[root@srv00 ~]# vi /etc/systemd/system/docker.service.d/daemon.conf
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --storage-driver=devicemapper --storage-opt=dm.thinpooldev=/dev/mapper/vgdocker-thinpool --storage-opt dm.use_deferred_removal=true
[root@srv00 ~]# systemctl daemon-reload
[root@srv00 ~]# systemctl start docker

ExecStart= 第一行是空. 否则启动会报错, 并且修改 daemon 参数需要 reload

5. 检查确认

[root@srv00 docker]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.11.1
Storage Driver: devicemapper
 Pool Name: vgdocker-thinpool
 Pool Blocksize: 524.3 kB
 Base Device Size: 10.74 GB
 Backing Filesystem: xfs
 ...
 [root@srv00 docker]# lvs -a
 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
 root centos -wi-ao---- 35.47g 
 swap centos -wi-ao---- 4.00g 
 [lvol0_pmspare] vgdocker ewi------- 304.00m 
 thinpool vgdocker twi-a-t--- 28.50g 0.07 0.02 
 [thinpool_tdata] vgdocker Twi-ao---- 28.50g 
 [thinpool_tmeta] vgdocker ewi-ao---- 304.00m 
[root@srv00 docker]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 114.4M 0 rom 
xvda 202:0 0 40G 0 disk 
├─xvda1 202:1 0 500M 0 part /boot
└─xvda2 202:2 0 39.5G 0 part 
 ├─centos-root 253:0 0 35.5G 0 lvm /
 └─centos-swap 253:1 0 4G 0 lvm [SWAP]
xvdb 202:16 0 30G 0 disk 
├─vgdocker-thinpool_tmeta 253:2 0 304M 0 lvm 
│ └─vgdocker-thinpool 253:5 0 28.5G 0 lvm 
└─vgdocker-thinpool_tdata 253:3 0 28.5G 0 lvm 
 └─vgdocker-thinpool 253:5 0 28.5G 0 lvm

然后就可以正常的 docker run 了

devicemapper 的性能影响

Allocate-on-demand 性能影响

之前讲说, 如果容器中要写数据, 则会在容器层分配新的块, 每个快 64k, 如果要写的数据大于 64k, 则会分配多个块. 如果容器中有许多小文件的写操作.. 则会影响性能.

Copy-on-write 性能影响

容器中第一次更新一个已有数据时, 就会进行 cow 操作, 如果更新大文件的某一部分, 则只会 copy 相应的数据快, 这个性能提升很大. 如果更新大量小文件(=64k),devicemapper 的性能就比 AUFS 差.

其他

loop-lvm 模式的性能很差, 不推荐使用在生产环境. 生产环境使用 direct-lvm 模式, 它是直接操作 raw 设备.

使用 ssd 的话提升更明显

devicemapper 内存使用不是最有效的. 运行 n 个容器会加载 n 次相同文件到内存. 所以不是运行 pass 平台和高密度容器最好的选择.

当然容器中写操作多的话要尽量使用 data volume, 它是绕过 storage driver, 性能有保证

“怎么配置 docker 使用 devicemapper”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计5690字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: av无码精品一区二区三区四区 | 久久久高清免费视频 | 三级网站视频在线观看 | 欧美成视频无需播放器 | 娜娜麻豆国产电影 | 人妻少妇精品中文字幕av蜜桃 | 亚洲成在人线免费视频 | 粉嫩呦福利视频导航大全 | 香蕉大伊亚洲人在线观看 | 久久精品国产清高在天天线 | 国产麻豆精品传媒av国产婷婷 | a级影视| 精品人妻午夜一区二区三区四区 | 精品国产欧美一区二区 | 色婷婷六月亚洲综合香蕉 | 久久精品蜜芽亚洲国产av | 色猫咪免费人成网站在线观看 | 国产日韩一区二区 | 天天性综合 | 高清一级做a爱视频免费 | 国产乱子伦一区二区三区 | 日本尤物精品视频在线看 | 热re99久久精品国99热 | 青青青青久久久久国产 | 国产国产精品人在线观看 | 乱亲女h秽乱长久久久 | 视频在线91| 中文毛片无遮挡高潮免费 | 精品国产免费观看 | 日本一区二区三 | 国产一级毛片欧美视频 | 亚洲精品无码成人片久久不卡 | 国产人成精品 | 四虎免费入口 | 亚洲天堂伊人 | 无码人妻丰满熟妇区毛片18 | 黄色激情视频在线观看 | 亚洲欧美午夜 | 国产在线无码一区二区三区视频 | 在线观看免费国产 | 亚洲精品天堂在线观看 |