Docker存储驱动之Device Mapper简介(3)

   13) 如果之前Docker daemon被启动过,那么需要将之前的graph driver目录给挪走;
   移动graph driver会删除所有的镜像容器和卷。下面的命令将/var/lib/docker的内容移动到另一个目录中。

$ mkdir /var/lib/docker.bk $ mv /var/lib/docker/* /var/lib/docker.bk

   14) 使用特殊的devicemapper选项来配置Docker daemon;
   有两种方法来配置Docker daemon的devicemapper存储驱动。你可以运行daemon时加上以下参数:

--storage-driver=devicemapper \ --storage-opt=dm.thinpooldev=/dev/mapper/docker-thinpool \ --storage-opt=dm.use_deferred_removal=true \ --storage-opt=dm.use_deferred_deletion=true

   也可以在daemon配置文件中配置,如默认的配置文件/etc/docker/daemon.json中,可如下配置:

{ "storage-driver": "devicemapper", "storage-opts": [ "dm.thinpooldev=/dev/mapper/docker-thinpool", "dm.use_deferred_removal=true", "dm.use_deferred_deletion=true" ] }

   注意:总是使用dm.use_deferred_removal=true和dm.use_deferred_deletion=true选项,以防止无意地泄露映射资源信息。
   15) (可选的)如果使用了systemd,并且修改了daemon配置文件,需要重载systemd信息;

$ systemctl daemon-reload

   16) 重启Docker daemon。

$ systemctl start docker

  当你启动Docker daemon后,确保一直监控者thin池和卷组的可用空间。当卷组自动扩容时,可能会占满所有空间。可以使用lvs或lvs -a命令来监控逻辑卷,可以查看到数据和元数据的大小。另外,还可以使用vgs命令来监控卷组的可用空间。
  当到达阈值后,日志会显示thin池的自动扩容信息,可使用以下命令来查看日志:

$ journalctl -fu dm-event.service

  当你确认你的配置文件无误时,就可以删除之前的备份目录了。

$ rm -rf /var/lib/docker.bk

  你还可以使用dm.min_free_space参数。该值保证党可用空间到达或者接近最小值时,操作失败会有提示。可以。

检查devicemapper结构体

  可以通过lsblk命令查看devicemapper存储驱动创建的pool相关的设备文件。

$ sudo lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 G 0 disk └─xvda1 202:1 0 G 0 part / xvdf 202:80 0 0G 0 disk ├─vg--docker-data 253:0 0 0G 0 lvm │ └─docker-202:1-1032-pool 253:2 0 0G 0 dm └─vg--docker-metadata 253:1 0 G 0 lvm └─docker-202:1-1032-pool 253:2 0 0G 0 dm

  下图显示了上面示例的镜像信息。
  

Docker存储驱动之Device Mapper简介


  图中,pool的名称叫做Docker-202:1-1032-pool,横跨data和metadata两个设备。devicemapper的pool名称格式为:

Docker-MAJ:MIN-INO-pool

  MAJ,MIN和INFO分别表示major、minor设备号,和inode号。
  有两个主要的目录。/var/lib/docker/devicemapper/mnt目录包含镜像和容器层的映射点。/var/lib/docker/devicemapper/metadata目录为每个镜像层和容器快照都对应了一个文件,文件以JSON格式保存每个快照的元数据。

Device Mapper和Docker性能

  理解按需分配和copy-on-write可以让你对容器性能有个整体的了解。

按需分配性能影响

  devicemapper存储驱动在按需分配操作时会给容器分配一个新的块。也就是说每次应用向容器某个位置写数据时,一个或多个块就会从池里面分配,并且映射给容器。
  所有的块都是64KB大小,一个小于64KB的写请求也会导致分配64KB的块,大于64KB的写请求就要求多个64KB的块。这会影响容器的性能,尤其容器有很多小的写请求时。然而,一旦一个块分配给容器后,后续的读写都会直接操作这个新分配的块。

Copy-on-write性能影响

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5dcf65c3be6b8a0f236003372937140e.html