15. Docker引擎 - Docker与Btrfs实践

Btrfs是下一代写时复制文件系统, 支持很多高级存储技术, 使得它非常适合Docker, Btrfs在Linux内核主线上, 它的磁盘格式已经比较稳定, 但许多特性都处于开发阶段.
Btrfs的特性包括hin provisioning, 写时复制和快照.

Btrfs的未来

Btrfs一直被称颂为Linux文件系统的未来, 内核中全面支持Btrfs, 稳定的磁盘格式, 在稳定性上活跃的开发活动, 使其成为Linux文件系统的未来更接近现实.

在写磁盘时, devicemapper被认为更加安全和稳定, 更适用于生产环境, 你只有对Btrfs有很好的理解并且有btrfs的使用经验才可以将其用于生产环境.

使用Btrfs进行镜像分层和共享

Btrfs使用子卷和快照管理镜像和容器层的磁盘上的组件, Btrfs的子卷看起来就像一个普通的Unix文件系统, 它们可以有自己的内部目录结构.
子卷在本地是写时复制的, 当底层存储池发出请求时就会分配存储空间.
子卷也可以嵌套或者被快照.

快照是某个读写时间点时整个子卷的副本, 它们就存在于创建它们的子卷下, 也可以创建快照的快照.

快照是Btrfs文件系统里的一等公民, 它们和普通的子卷看起来和操作起来没什么不同, 创建快照的技术内建于Btrfs文件系统, 所以Btrfs快照空间利用率很高, 并且很小的性能影响.

Btrfs存储驱动使用Btrfs子卷或者快照存储每一个镜像和容器.

  • 镜像的基础层存储于下面目录
    /var/lib/docker/btrfs/subvolumes

  • 其他镜像层使用它父层的子卷或快照的快照进行存储

镜像和容器在磁盘上的构建

在Ubuntu14.04LTS上配置Btrfs

Btrfs与Docker性能

  • 页缓存
    Btrfs不支持页缓存共享, 所以它不太适合PaaS, 也不适合容器密度很高的场景

  • 少量写(small writes)
    如果容器执行大量的small writes将导致Btrfs块使用不良, 最终导致空间不足并且docker停止工作, 这是当前版本的Btrfs的主要缺点.

  • 顺序写
    Btrfs使用日志技术进行顺序写, 可能影响顺序写, 性能可能降低为原来的50%

  • 碎片化
    磁盘碎片是使用写时复制技术的副产品, 很多小的随机写入就能导致碎片问题,
    挂载选项autodefrag尝试着修复碎片化问题, 但使用之前需要仔细测试, 因为有证据表明它会降低性能.

  • SSD
    Btrfs有为SSD原生做的优化, 挂载选项中提供-o ssd. 通过避免对SSD无效的seek优化从而提高了SSD写性能.Btrfs也支持TRIM/DISCARD原语, 通过使用 -o discard挂载选项, 但是使用前需要自己做好测试.

  • 使用数据卷
    尽量将大量的写入操作通过数据卷实现

  • 平衡的Btrfs
    使用一个cron任务重新平衡Btrfs设备.

你可能感兴趣的:(15. Docker引擎 - Docker与Btrfs实践)