Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save on195594/b292015267fa3333fc68e97f6dea9cd4 to your computer and use it in GitHub Desktop.
Save on195594/b292015267fa3333fc68e97f6dea9cd4 to your computer and use it in GitHub Desktop.
CentOS下修改Devicemapper存储驱动为Direct-lvm模式
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