docker使用lvm卷存储镜像

    xiaoxiao2021-03-25  109

    centos上安装的docker使用的后端存储为device-mapper(docker1.13为overlay),默认使用loopback的文件设备作为存储,在生产环节不推荐此种用法,需使用lvm卷作为docker后端存储,用以存放镜像及容器(容器与镜像的关系理解不同说法不同,作者这里为方便理解分开描述)的数据和元数据。下面是典型的docker存储示意图。

    docker官方手册里明确提到用lvm块设备存储时推荐使用thinpool设备:

    To  make  the  best  use of Docker with the devicemapper backend, you must have a recent version of LVM.  Use lvm to create a thin pool.

    关于thinpool设备的介绍可参考http://man7.org/linux/man-pages/man7/lvmthin.7.html

    要使用lvm卷来作为docker存储,这需要在环境上用lvm创建一个thin pool,操作如下:

    lvcreate -n pool0 -L 100G vgdocker 用于存储数据

    lvcreate-n pool0meta -L 5G vgdocker 用于存储元数据

    vgdocker为单独创建的卷组,也可以使用已有的卷组,但要保证有足够空间

    lvconvert --type thin-pool --poolmetadatavgdocker/pool0meta vgdocker/pool0 创建thin-pool(将两个lvm卷合并为thinpool,名字为第一个lvm卷的名字)

    创建完的thin-pool会隐藏数据和元数据的存储卷,thin-pool的名字为数据卷的名字

    [root@centos-78 ~]# lvs

    LV    VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log

     root   cl      -wi-ao----  46.99g                                                   

     swap  cl       -wi-ao----   2.00g                                                   

      pool0 vgdocker  twi-a-tz-- 100.00g             0.00   0.03 

    使用lvs -a能看到隐藏的卷:

    [root@centos-78 ~]# lvs -a

      LV              VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log root             cl      -wi-ao----  46.99g                                                   

     swap            cl       -wi-ao----   2.00g                                                    

     [lvol0_pmspare]  vgdocker   ewi-------  2.00g                                                   

     pool0           vgdocker  twi-a-tz--   100.00g             0.00   0.03                           

     [pool0_tdata]    vgdocker  Twi-ao----   100.00g                                                   

      [pool0_tmeta]    vgdocker ewi-ao----   2.00g

    配置docker使用thin-pool

    1.systemctl stop docker

    2.rm -rf /var/lib/docker/ 会删除docker镜像,需提前备份

    3.vi /usr/lib/systemd/system/docker.service

     ExecStart=/usr/bin/dockerd --storage-optdm.thinpooldev=/dev/mapper/vgdocker-pool0

    4.systemctl daemon-reload

    5.systemctl restart docker

    6.docker info查看是否使用thin pool

    [root@centos-78 ~]# docker info

    Containers: 0

     Running: 0

     Paused: 0

     Stopped: 0

    Images: 2

    Server Version: 1.12.6

    Storage Driver: devicemapper

    Pool Name: vgdocker-pool0

    扩容

    1.      手动扩容:

    vgdocker空间充足的情况下(可以先扩vg:vgextend),直接执行如下命令进行扩容:

    lvextend -L 102G /dev/mapper/vgdocker-pool0

    lvextend -L 5G/dev/mapper/vgdocker-pool0_tmeta

    然后重启下docker服务即可,还有一种自动扩容的配置,需要配置一些动作及扩容阈值等,

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

    感兴趣可以查下相关资料。

    转载请注明原文地址: https://ju.6miu.com/read-13379.html

    最新回复(0)