Docker存储驱动之Btrfs简介(2)

  btrfs存储驱动只有在/var/lib/docker被映射在一个Btrfs文件系统时才能被使用。以下步骤展示如何在Ubuntu 14.04 LTS上配置Brtfs。

准备知识

  如果你已经在你的Docker host上使用了Docker daemon,还有些镜像想保存,那么在尝试Btrfs之前,你需要先把镜像推送到Docker Hub或者你的私有仓库。
  停止Docker daemon。然后,确保你在/dev/xvdb下有空闲的块设备。
  另外,还需要确定你的OS上是否已经加载了Btrfs模块。输入以下命令确认:

$ cat /proc/filesystems | grep btrfs btrfs 在Ubuntu 14.04 LTS上配置Btrfs

  如果你的OS满足前面的要求,那么如下操作:
  1) 安装btrfs-tools包。

$ sudo apt-get install btrfs-tools Reading package lists... Done Building dependency tree <output truncated>

  2) 创建Btrfs存储池。
  通过mkfs.btrfs命令创建Btrfs存储池。给mkfs.btrfs命令传递多个设备则可以创建一个使用多个设备的存储池。这里我们演示一下创建单个设备(/dev/xvdb)的池。

$ sudo mkfs.btrfs -f /dev/xvdb WARNING! - Btrfs v3.12 IS EXPERIMENTAL WARNING! - see http://btrfs.wiki.kernel.org before using Turning ON incompat feature 'extref': increased hardlink limit per file to 65536 fs created label (null) on /dev/xvdb nodesize 16384 leafsize 16384 sectorsize 4096 size 4.00GiB Btrfs v3.12

  记得把/dev/xvdb替换为你系统中的实际设备名称。
  再次提醒:如前面提到的,Btrfs暂时来看,不建议作为产品来使用,除非你有着丰富的经验。
  3) 在本地存储创建 /var/lib/docker。

$ sudo mkdir /var/lib/docker

  4) 使Btrfs文件系统在系统重启时会自映射。
    a. 获取Btrfs文件系统的UUID。

$ sudo blkid /dev/xvdb /dev/xvdb: UUID="a0ed851e-158b-4120-8416-c9b072c8cf47" UUID_SUB="c3927a64-4454-4eef-95c2-a7d44ac0cf27" TYPE="btrfs"

    b. 在/etc/fstab中增加一行条目,使得系统启动时可以自动映射/var/lib/docker。下面两行每一行都可以生效,当然,在你实际操作中,记得替换为自己的UUID。

/dev/xvdb /var/lib/docker btrfs defaults 0 0 UUID="a0ed851e-158b-4120-8416-c9b072c8cf47" /var/lib/docker btrfs defaults 0 0

  5.映射新的文件系统,并确认操作是否成功。

$ sudo mount -a $ mount /dev/xvda1 on / type ext4 (rw,discard) <output truncated> /dev/xvdb on /var/lib/docker type btrfs (rw)

  6.然后,重启docker服务。

$ sudo service docker start docker start/running, process 2315

  当然,由于你使用的Linux发行版可能不同,启动Docker Daemon的方法可能也不同。
  这里,在启动Docker Daemon之前,你可以强行指定Daemon的存储驱动为btrfs存储驱动。可以在daemon启动命令行时传递--storage-driver=btrfs 参数,也可以在Docker配置文件中修改DOCKER_OPTS参数。
  7.通过docker info命令验证。

$ sudo docker info Containers: 0 Images: 0 Storage Driver: btrfs [...] btrfs和Docker性能

  在btrfs存储驱动下,有以下一些原因可以影响Docker的性能。

  Page caching,页缓存。Btrfs不支持页缓存共享,也就是说n个容器访问同一个文件会请求n份缓存拷贝。因此,btrfs驱动可能不是Paas或者高密集容器的最优选项。

  Small writes,小的写请求。容器执行大量写的写请求(包括Docker host启动和停止很多容器)会导致Btrfs大块只使用了很小一部分,最终会导致Docker host空间不足,停止服务。这是当前使用Btrfs的一个最重大的缺点。
  如果使用btrfs存储驱动,需要密切监视Btrfs文件系统的可用空间,可用使用btrfs filesys shwo来观察。不用相信常规的Unix命令(如df)的输出。

  Sequential writes,顺序写。Btrfs通过日志技术写数据到磁盘,这回导致顺序写的性能减半。

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

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