Devicemapper的direct-lvm模式

一、简介

Devicemapper作为graphdriverdocker中,容器镜像之间架构如下

 

Devicemapper的direct-lvm模式_第1张图片

 

Devicemapper的两个不同模式loop-lvmdirect-lvm区别就在于如何创建最底层的thin-pool

 

direct-lvm模式采用了LVM来创建thin-pool

 

       LVM是 Logical VolumeManager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux2.4内核上实现,基于device mapper,目前最新版本为:稳定版1.0.5,开发版1.1.0-rc2,以及LVM2开发版。Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。

 

二、基本术语

 

  • 物理卷(Physical Volume,PV)

指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

  • 卷组(Volume Group,VG)

类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。

  • *逻辑卷(Logical Volume,LV)

类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。

类型有:cache-pool, raid1, snapshot, thin, orthin-pool、linear、striped、cache(lvmcache)、thin provisioning(lvmthin)、mirror

  • 物理块(Physical Extent,PE)

每一个物理卷PV被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。

  • 逻辑块(Logical Extent,LE)

逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

 

下图所示LVM抽象模型,展示了PV、VG、LV三者之间关系

 

Devicemapper的direct-lvm模式_第2张图片

LVM抽象模型

三、安装LVM

已有可跳过

$ yum installlvm2

四、手动创建dockerthin-pool

在此之前需要停止docker服务:

$ service docker stop

且需要删除所有镜像和容器,有重要资料,请做好备份

$ rm -rf /var/lib/docker/*

第一步:创建PV

可用空余硬盘或者硬盘中的分区进行创建PV,这些设备必须未正在被使用,创建之前先将这些设备用fdiskid改为8elvm),效果如下,此处只使用sda5来创建PV

Devicemapper的direct-lvm模式_第3张图片

 

命令:

$ pvcreate /dev/sda5

创建完成:(pvdisplay)

Devicemapper的direct-lvm模式_第4张图片

 

第二步:创建VG

命令:

$ vgcreate docker /dev/sda5

docker”为vg名,“/dev/sda5”为组成VGPV路径

创建完成:(vgdisplay

Devicemapper的direct-lvm模式_第5张图片

 

第三步:创建能够组成thin-pool的两个LV

命令:

$ lvcreate --wipesignaturesy -n thinpool docker -l 95%VG

$ lvcreate --wipesignaturesy -n thinpoolmeta docker -l 1%VG

 

 

第四步:根据上一步的两个LV创建thin-pool

命令:

$ lvconvert -y --zero n -c512K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta

 

以下步骤可选

第五步:配置thin-pool的自动扩展

 

修改lvm配置文件

$ vi/etc/lvm/profile/docker-thinpool.profile

如下:

activation{
   thin_pool_autoextend_threshold=80
   thin_pool_autoextend_percent=20
}

 

激活配置文件

$ lvchange --metadataprofiledocker-thinpool docker/thinpool

 

 

五、使用脚本创建thin-pool

 

在此之前需要停止docker服务:

$ service dockerstop

 

服务  docker-storage-setup

 

可通过service docker-storage-setup status查看执行脚本和环境变量文件

 

执行脚本:/usr/bin/docker-storage-setup

环境变量文件:/etc/sysconfig/docker-storage-setup

 

第一种做法:

提供创建POOL的设备,可以是整块硬盘或分区,即在环境变量文件中加入

DEVS="/dev/sda5"

 

执行脚本:

$ service docker-storage-setup start

 

docker启动会自动执行该脚本,所以也可直接执行

$ service docker start

 

第二种做法:

已有VG,或者自行创建VG(手动创建thin-pool中有提到),因为有些linux在安装时分区模式选用了lvm,所以会存在已有VG

 

在环境变量文件中加入

VG="docker"

docker”为已有的VG,可通过$vgdisplay查看

 

 

执行脚本:

$ service docker-storage-setup start

 

docker启动会自动执行该脚本,所以也可直接执行

$ service docker start

 

创建成功后会有:

Devicemapper的direct-lvm模式_第6张图片

 

 

 

六、direct-lvm下启动docker

 

docker启动配置文件

/etc/sysconfig/docker-storage

中添加或修改:

DOCKER_STORAGE_OPTIONS=--storage-driverdevicemapper --storage-opt dm.fs=xfs --storage-opt dm.thinpooldev=/dev/mapper/docker-thinpool--storage-opt dm.use_deferred_removal=true

 

/dev/mapper/docker-thinpool”为上述步骤中产生的thin-pool

 

修改完成后启动docker

$ service docker start

 

成功后执行

$ docker info

会有如下

Devicemapper的direct-lvm模式_第7张图片

你可能感兴趣的:(docker)