Created
January 28, 2018 12:17
-
-
Save on195594/b292015267fa3333fc68e97f6dea9cd4 to your computer and use it in GitHub Desktop.
CentOS下修改Devicemapper存储驱动为Direct-lvm模式
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Device Mapper是基于内核的框架,支持Linux上的许多高级卷管理技术。Docker的devicemapper存储驱动程序利用此框架的精简配置和快照功能进行映像和容器管理。本文将Device Mapper存储驱动程序称为devicemapper,并将内核框架称为Device Mapper。 | |
对于支持它的系统,Linux内核中包含支持。但是,Docker需要使用特定的配置。例如,在RHEL或CentOS操作系统中,Docker将默认为overlay,overlay官方不建议在生产中使用。 | |
该devicemapper驱动程序使用专用于Docker的块设备,并在块级而非文件级进行操作。这些设备可以通过将物理存储添加到Docker主机来扩展,并且比在操作系统级别使用文件系统性能更好。 | |
配置用于生产的direct-lvm驱动模式 | |
CentOS安装好Docker后,默认Storage Driver为devicemapper的loop-lvm模式,这种模式从性能和稳定性上都不可靠,此模式仅适用于测试环境。 | |
配置direct-lvm模式 | |
生产环境使用devicemapper存储驱动程序的主机必须使用direct-lvm模式。此模式使用块设备来创建精简池。这比使用loop-lvm设备更快,更有效地使用系统资源,并且块设备可以根据需要扩增。 | |
在Docker 17.06及更高版本中,Docker可以为您管理块设备,简化direct-lvm模式的配置。这仅适用于新的Docker设置,并且只能使用一个块设备。 | |
注:如果您需要使用多个块设备,需要手动配置direct-lvm模式。 | |
编辑daemon.json文件并设置适当的选项,然后重新启动Docker以使更改生效。以下daemon.json设置了上表中的所有选项。 | |
手动配置DIRECT-LVM模式 | |
假定有一块100G空闲块设备 /dev/sdb 。设备标识符和音量大小在您的环境中可能不同,您应该在整个过程中替换您自己的值。 | |
停止docker | |
sudo systemctl stop docker | |
安装依赖 | |
RHEL / CentOS的:device-mapper-persistent-data,lvm2,和所有的依赖 | |
把整块硬盘创建物理卷(PV) | |
sudo pvcreate /dev/sdb | |
创建dockervg卷组(VG) | |
sudo vgcreate dockervg /dev/sdb | |
划分两个逻辑卷(LV) | |
划分两个逻辑卷(LV),分别用于:docker_data,docker_metadata。 | |
sudo lvcreate --wipesignatures y -n data dockervg -L 35G | |
sudo lvcreate --wipesignatures y -n metadata dockervg -L 1G | |
转换为thin pool | |
sudo lvconvert -y --zero n -c 512K --thinpool dockervg/data --poolmetadata dockervg/metadata | |
配置自动扩展 | |
cat>>/etc/lvm/profile/dockervg-data.profile<<EOF | |
activation { | |
thin_pool_autoextend_threshold=80 | |
thin_pool_autoextend_percent=20 | |
} | |
EOF | |
划分逻辑卷(LV):docker_dir | |
docker_dir主要是用于存储容器运行时产生的数据卷等文件。 | |
sudo lvcreate --wipesignatures y -n dockerdir dockervg -l+100%FREE | |
应用以上配置 | |
lvchange --metadataprofile dockervg-data dockervg/data | |
启用磁盘空间监控 | |
lvs -o+seg_monitor | |
映射相应目录 | |
mkfs -t xfs /dev/dockervg/dockerdir | |
mkdir /var/lib/docker | |
mount/dev/dockervg/dockerdir/var/lib/docker | |
cat>> /etc/fstab <<EOF | |
/dev/dockervg/dockerdir /var/lib/docker xfs defaults 0 0 | |
EOF | |
设置Docker启动参数 | |
存储池扩容 | |
假定现在新增一块100G的块设备 /dev/sdc | |
通过pvdisplay查看卷组与物理卷/块设备的对应关系 | |
sudo pvdisplay |grep docker | |
PV Name /dev/sdb | |
VG Name docker | |
通过vgextend命令进行卷组扩容 | |
sudo vgextend docker /dev/sdc | |
info: Physical volume "/dev/sdc" successfully created. | |
info: Volume group "docker" successfully extended | |
给逻辑卷(LV)扩容 | |
sudo lvextend -l+100%FREE -n docker/docker | |
resize2fs /dev/docker/docker | |
-l+100%FREE: 表示使用全部空闲空间,改为-L 10G指定扩展大小; | |
-n docker/thinpool: 指定逻辑卷名(卷组/逻辑卷名) | |
激活逻辑卷(LV) | |
# LV扩容重启后,可能会出现“Non existing device" 的提示,需要对LV卷进行激活操作: | |
sudo lvchange -ay docker/thinpool |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment