首页 > 代码库 > docker深入2-存储驱动之使用devicemapper(direct-lvm)模式
docker深入2-存储驱动之使用devicemapper(direct-lvm)模式
docker深入2-存储驱动之使用devicemapper(direct-lvm)模式
2016/12/9
一、现状 1、默认使用的是 devicemapper(loop-lvm) [root@n33 lib]# docker info (略) Server Version: 1.12.3 Storage Driver: devicemapper Pool Name: docker-253:3-33517-pool Pool Blocksize: 65.54 kB Base Device Size: 10.74 GB Backing Filesystem: xfs Data file: /dev/loop0 Metadata file: /dev/loop1 Data Space Used: 11.8 MB Data Space Total: 107.4 GB Data Space Available: 7.433 GB Metadata Space Used: 581.6 kB Metadata Space Total: 2.147 GB Metadata Space Available: 2.147 GB Thin Pool Minimum Free Space: 10.74 GB Udev Sync Supported: true Deferred Removal Enabled: false Deferred Deletion Enabled: false Deferred Deleted Device Count: 0 Data loop file: /var/lib/docker/devicemapper/devicemapper/data WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device. Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata (略) Docker Root Dir: /var/lib/docker (略) 2、对应的设备 [root@n33 lib]# lsblk -I 7 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 100G 0 loop └─docker-253:3-33517-pool 252:0 0 100G 0 dm loop1 7:1 0 2G 0 loop └─docker-253:3-33517-pool 252:0 0 100G 0 dm 二、调整为 devicemapper(direct-lvm) 1、准备工作 安装 lvm2 [root@n33 ~]# yum install lvm2 增加一块磁盘 [root@n33 ~]# ls /dev/vdb /dev/vdb 停止 docker 服务 [root@n33 ~]# systemctl stop docker 2、配置设备 1)pv [root@n33 ~]# pvcreate /dev/vdb 2)创建一个名称为 docker 的 vg [root@n33 ~]# vgcreate docker /dev/vdb 3)创建2个 lv,分别对应 data 和 metadata 设备 [root@n33 ~]# lvcreate --wipesignatures y -n thinpool docker -l 95%VG [root@n33 ~]# lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG 4)转换 pool 为 thinpool 格式 [root@n33 ~]# lvconvert -y --zero n -c 512K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta 5)调整 lvm 配置 The value should be the percentage of space used before lvm attempts to autoextend the available space (100 = disabled). 定义一个百分比的阈值,表明触发 lvm 自动扩容前,已用空间占比。 thin_pool_autoextend_threshold = 80 The value’s setting is the percentage of space to increase the thin pool (100 = disabled) 每次扩容 thin pool 空间的比例 thin_pool_autoextend_percent = 20 [root@n33 ~]# cat /etc/lvm/profile/docker-thinpool.profile activation { thin_pool_autoextend_threshold=80 thin_pool_autoextend_percent=20 } 6)lvchange 应用配置 [root@n33 ~]# lvchange --metadataprofile docker-thinpool docker/thinpool 7)lvs 查看卷的信息,验证 monitor 的状态 [root@n33 ~]# lvs -o+seg_monitor LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Monitor thinpool docker twi-a-t--- 190.00g 0.00 0.01 monitored 3、调整 docker 存储 1)备份 [root@n33 ~]# mkdir /var/lib/docker.bk [root@n33 ~]# mv /var/lib/docker/* /var/lib/docker.bk 如果这个 docker engine 上已经有部分 images 在使用,且需要保存,请先提前推送到自己的 registry 中保存。 2)调整服务配置 a、第一种方式 [root@n33 ~]# vim /lib/systemd/system/docker.service 增加参数: --storage-driver=devicemapper --storage-opt=dm.thinpooldev=/dev/mapper/docker-thinpool --storage-opt=dm.use_deferred_removal=true --storage-opt=dm.use_deferred_deletion=true 或者: [root@n33 ~]# sed -i ‘/^ExecStart=/c\ExecStart=/usr/bin/dockerd --storage-driver=devicemapper --storage-opt=dm.thinpooldev=/dev/mapper/docker-thinpool --storage-opt=dm.use_deferred_removal=true --storage-opt=dm.use_deferred_deletion=true‘ /lib/systemd/system/docker.service b、第2种方式 调整 daemon.json 的配置: [root@n33 ~]# cat /etc/docker/daemon.json { "storage-driver": "devicemapper", "storage-opts": [ "dm.thinpooldev=/dev/mapper/docker-thinpool", "dm.use_deferred_removal=true", "dm.use_deferred_deletion=true" ] } c、注意事项 Note: Always set both dm.use_deferred_removal=true and dm.use_deferred_deletion=true to prevent unintentionally leaking mount points. 启用上述2个参数来阻止可能意外产生的挂载点泄漏问题 3)重启服务 [root@n33 ~]# systemctl daemon-reload [root@n33 ~]# systemctl start docker 4)验证 [root@n33 lib]# docker info (略) Storage Driver: devicemapper Pool Name: docker-thinpool Pool Blocksize: 524.3 kB Base Device Size: 10.74 GB Backing Filesystem: xfs Data file: Metadata file: Data Space Used: 20.45 MB Data Space Total: 204 GB Data Space Available: 204 GB Metadata Space Used: 266.2 kB Metadata Space Total: 2.143 GB Metadata Space Available: 2.143 GB Thin Pool Minimum Free Space: 20.4 GB Udev Sync Supported: true Deferred Removal Enabled: true Deferred Deletion Enabled: true Deferred Deleted Device Count: 0 Library Version: 1.02.107-RHEL7 (2016-06-09) (略) 5)可以通过 lvs, lvdisplay, vgs 等指令来查看 lvm 卷的状态 6)可以查看日志,了解 thin pool 在自动扩容触及阈值时的状态 [root@n33 ~]# journalctl -fu dm-event.service 7)对应的设备 [root@n33 ~]# lsblk -I ‘253‘ |grep -v vda NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vdb 253:16 0 200G 0 disk ├─docker-thinpool_tmeta 252:0 0 2G 0 lvm │ └─docker-thinpool 252:2 0 190G 0 lvm └─docker-thinpool_tdata 252:1 0 190G 0 lvm └─docker-thinpool 252:2 0 190G 0 lvm 8)确认无误后,可以清理旧的数据 [root@n33 ~]# rm /var/lib/docker.bk -fr 4、整合到一个小脚本中来配置direct-lvm的存储 [root@n33 ~]# cat docker_direct_lvm_setup.sh #!/bin/bash # #2016/12/8 #v1.0.5 @PC ## 分配一块独立的磁盘供docker使用,本例使用的是 /dev/vdb dev_name=‘/dev/vdb‘ yum -y -q install lvm2 echo ‘+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++‘ pvcreate ${dev_name} vgcreate docker ${dev_name} lvcreate --wipesignatures y -n thinpool docker -l 95%VG lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG lvconvert -y --zero n -c 512K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta cat <<‘_EOF‘ >/etc/lvm/profile/docker-thinpool.profile activation { thin_pool_autoextend_threshold=80 thin_pool_autoextend_percent=20 } _EOF lvchange --metadataprofile docker-thinpool docker/thinpool echo ‘+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++‘ lvs -o+seg_monitor echo ‘+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++‘ cat <<‘_EOF‘ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 接下来的操作步骤示例: [1] 如果 docker 有旧的数据,先推送到registry中再移除; # mkdir /var/lib/docker.bk # mv /var/lib/docker/* /var/lib/docker.bk [2] 更新docker服务的配置: (方式一: 调整 docker.service 的配置参数) # sed -i ‘/^ExecStart=/c\ExecStart=/usr/bin/dockerd --storage-driver=devicemapper --storage-opt=dm.thinpooldev=/dev/mapper/docker-thinpool --storage-opt=dm.use_deferred_removal=true --storage-opt=dm.use_deferred_deletion=true‘ /lib/systemd/system/docker.service (方式二: 在 daemon.json 中配置参数) # cat /etc/docker/daemon.json { "storage-driver": "devicemapper", "storage-opts": [ "dm.thinpooldev=/dev/mapper/docker-thinpool", "dm.use_deferred_removal=true", "dm.use_deferred_deletion=true" ] } [3] 重启服务 # systemctl daemon-reload && systemctl start docker [4] 验证是否调整完毕 # docker info +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ _EOF ZYXW、参考 1、docs https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#/configure-direct-lvm-mode-for-production 2、Docker Device Mapper 使用 direct-lvm http://www.cnblogs.com/SZLLQ2000/p/5486834.html 3、daemon.json https://docs.docker.com/engine/reference/commandline/dockerd/
docker深入2-存储驱动之使用devicemapper(direct-lvm)模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。