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
安装依赖
把整块硬盘创建物理卷(PV)
创建 dockervg 卷组(VG)
划分两个逻辑卷(LV)
划分两个逻辑卷(LV),分别用于:docker_data,docker_metadata。
转换为 thin pool
配置自动扩展
划分逻辑卷(LV):docker_dir
docker_dir 主要是用于存储容器运行时产生的数据卷等文件。
应用以上配置
启用磁盘空间监控
映射相应目录
设置 Docker 启动参数
存储池扩容
假定现在新增一块 100G 的块设备 /dev/sdc
通过 pvdisplay 查看卷组与物理卷/块设备的对应关系
通过 vgextend 命令进行卷组扩容
给逻辑卷(LV)扩容
激活逻辑卷(LV)
更多详情亦可参照 Docker 官方文档:
https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/
评论