文章目录

  • Btrfs
    • 前提条件
    • 配置Docker以使用btrfs存储驱动器
    • 管理Btrfs卷
    • btrfs存储驱动程序如何工作
      • 磁盘上的镜像和容器层
    • 容器如何使用btrfs读写数据
      • 读取文件
      • 修改文件
    • Btrfs和Docker性能

Btrfs

Btrfs是下一代的即写即拷文件系统,它支持许多先进的存储技术,非常适合Docker。主线Linux内核中包含了Btrfs。
Docker的btrfs存储驱动程序利用了许多btrfs特性来进行镜像和容器管理。这些特性包括块级操作、精简配置、即写即拷快照和易于管理。可以轻松地将多个物理块设备组合到单个Btrfs文件系统中。

前提条件

  • Docker Engine - Community: 对于社区版,只建议在Ubuntu或Debian上使用btrfs。

  • Docker EE:对于Docker EE和cs引擎,btrfs只支持SLES。

  • 更改存储驱动程序将使已经创建的任何容器在本地系统上无法访问。使用docker save来保存容器,并将现有的镜像推入docker Hub或私有存储库,这样就不需要在以后重新创建。

  • btrfs需要一个专用的块存储设备,如物理磁盘。这个块设备必须针对Btrfs进行格式化,并安装到/var/lib/docker/中。

  • 内核必须支持btrfs。运行以下命令检查:

    cat /proc/filesystems | grep btrfs
    
  • 要在操作系统级别管理BTRFS文件系统,需要使用BTRFS命令。如果没有这个命令,安装btrfsprogs包(SLES)或btrfs-tools包(Ubuntu)。

配置Docker以使用btrfs存储驱动器

  1. 停止Docker。
  2. 将/var/lib/docker/的内容复制到备份位置,然后清空/var/lib/docker/的内容:
    cp -au /var/lib/docker /var/lib/docker.bk
    rm -rf /var/lib/docker/*
    
  3. 将专用块设备或设备格式化为Btrfs文件系统。
    mkfs.btrfs -f /dev/xvdf /dev/xvdg
    
  4. 在/var/lib/docker/挂载点上挂载新的Btrfs文件系统。不要忘记通过向/etc/ fstabb添加一个条目来使更改在重新引导时保持永久性。
     mount -t btrfs /dev/xvdf /var/lib/docker
    
  5. 将/var/lib/docker.bk的内容复制到/var/lib/docker/。
    cp -au /var/lib/docker.bk/* /var/lib/docker/
    
  6. 配置Docker以使用btrfs存储驱动程序。即使/var/lib/docker/现在正在使用Btrfs文件系统,这也是必需的。编辑或创建文件/etc/docker/daemon.json。如果是新文件,请添加以下内容。如果它是现有文件,则仅添加键和值,如果不是结束大括号(})之前的最后一行,请小心以逗号结束。
    {"storage-driver": "btrfs"
    }
    
  7. 通过docker info验证

管理Btrfs卷

Btrfs的优点之一是易于管理Btrfs文件系统,而无需卸载文件系统或重新启动Docker。

当空间不足时,Btrfs会自动以大约1 GB的块扩展卷。

要将块设备添加到Btrfs卷,使用btrfs device add和 btrfs filesystem balance命令。

btrfs device add /dev/svdh /var/lib/dockerbtrfs filesystem balance /var/lib/docker

btrfs存储驱动程序如何工作

btrfs存储驱动程序与设备映射程序或其他存储驱动程序的工作方式不同,因为整个/var/lib/docker/目录都存储在btrfs卷中。

磁盘上的镜像和容器层

关于镜像层和可写容器层的信息存储在/var/lib/docker/btrfs/subvolumes/中。此子目录包含每个镜像或容器层的一个目录,由一个层及其所有父层构建的统一文件系统。子卷是原生的即写即拷,并从底层存储池按需为它们分配空间。它们也可以嵌套和抓拍。下图显示了4个子卷。“Subvolume 2”和“Subvolume 3”是嵌套的,而“Subvolume 4”则显示它自己的内部目录树。

仅镜像的基础层存储为真实的子体积。所有其他层都存储为快照,其中仅包含该层中引入的差异。可以如下图所示创建快照的快照。

在磁盘上,快照的外观和感觉就像子卷一样,但实际上它们更小且更节省空间。写入时复制用于最大化存储效率和最小化层大小,并且在块级别管理容器可写层中的写入。下图显示了一个子卷及其快照共享数据。

为了获得最大的效率,当一个容器需要更多空间时,将以大约1 GB的块为单位进行分配 。

Docker的btrfs存储驱动程序将每个镜像层和容器存储在它自己的btrfs子卷或快照中。镜像的基本层存储为子卷,而子镜像层和容器存储为快照。如下图所示。

在运行btrfs驱动程序的Docker主机上创建镜像和容器的高级过程如下:

  1. 镜像的基础层存储在/var/lib/docker/btrfs/subvolume下的Btrfs子卷中。
  2. 后续的镜像层存储为父层的子卷或快照的Btrfs快照,但是这一层引入了更改。这些差异存储在块级别。
  3. 容器的可写层是最终镜像层的Btrfs快照,不同之处在于运行的容器。这些差异存储在块级别。

容器如何使用btrfs读写数据

读取文件

  • 容器是镜像的节省空间的快照。快照中的元数据指向存储池中的实际数据块。这与子卷相同。因此,对快照执行的读操作本质上与对子卷执行的读操作相同。

修改文件

  • 写入新文件:将新文件写入容器会调用按需分配操作,以将新数据块分配给容器的快照。然后将文件写入此新空间。按需分配操作是使用Btrfs进行的所有写入所固有的,并且与将新数据写入子卷相同。结果,将新文件写入容器的快照以本机Btrfs速度运行。
  • 修改现有文件:更新容器中的现有文件是写时复制操作(写时重定向是Btrfs术语)。从文件当前所在的层读取原始数据,并且仅将修改后的块写入容器的可写层。接下来,Btrfs驱动程序更新快照中的文件系统元数据以指向此新数据。此行为产生很少的开销。
  • 删除文件或目录:如果容器删除了下层中存在的文件或目录,则Btrfs会掩盖下层中文件或目录的存在。如果容器创建一个文件然后将其删除,则此操作在Btrfs文件系统本身中执行,并回收空间。

使用Btrfs,编写和更新大量小文件会导致性能下降。

Btrfs和Docker性能

在btrfs 存储驱动程序下,有几个因素会影响Docker的性能。

**注意**:通过使用Docker卷处理大量写工作负载,而不是依赖于将数据存储在容器的可写层,可以减轻许多这些因素。但是,在Btrfs的情况下,Docker卷仍然受到这些回调的影响,除非/var/lib/docker/volumes/没有得到Btrfs的支持。

  • 页面缓存。Btrfs不支持页面缓存共享。这意味着访问同一文件的每个进程都会将该文件复制到Docker主机的内存中。结果,btrfs驱动程序可能不是诸如PaaS之类的高密度用例的最佳选择。

  • 小写。容器执行大量小写操作(此使用模式与在短时间内启动和停止许多容器时发生的情况相同)也会导致Btrfs块的使用不佳。这可能会过早填充Btrfs文件系统,并导致Docker主机空间不足。使用btrfs filesys show必须密切监控增加了Btrfs设备上的可用空间量。

  • 顺序写入。Btrfs在写入磁盘时使用日记技术。这可能会影响顺序写入的性能,从而使性能降低多达50%。

  • 碎片化。碎片是Btrfs等写时复制文件系统的自然副产品。许多小的随机写入可能会使此问题复杂化。使用SSD时,碎片可能表现为CPU峰值,而使用旋转磁盘时,则表现为磁头抖动。这些问题中的任何一个都可能损害性能。
    如果Linux内核版本是3.9或更高版本,则autodefrag 在安装Btrfs卷时可以启用该功能。在将该功能部署到生产环境之前,请先对工作负载进行测试,因为某些测试显示了对性能的负面影响。

  • SSD性能:Btrfs包括针对SSD介质的本机优化。要启用这些功能,请使用-o ssdmount选项安装Btrfs文件系统。这些优化通过避免优化(例如不适用于固态介质的寻道优化)来增强SSD的写入性能。

  • 经常平衡Btrfs文件系统:cron在非高峰时段,使用操作系统实用程序(例如 作业)定期平衡Btrfs文件系统。这样可以回收未分配的块,并有助于防止文件系统不必要地填满。除非向文件系统添加其他物理块设备,否则无法重新平衡完全完整的Btrfs文件系统。

  • 使用快速存储:固态驱动器(SSD)提供比旋转磁盘更快的读写速度。

  • 将卷用于繁重的写工作负载:卷可为繁重的写工作负载提供最佳和最可预测的性能。这是因为它们绕过了存储驱动程序,并且不会产生任何精简配置和写时复制所带来的潜在开销。卷还有其他好处,例如,允许在容器之间共享数据,并且即使没有运行中的容器正在使用它们也可以持久保存数据。

docker系列—聊一聊存储驱动Btrfs相关推荐

  1. Docker 容器文件存储驱动 Overlay2

    码字不易,转载请注明出处!! 写在前面 Docker 文件存储驱动有很多种,比如 overlay2.aufs等,可以通过命令 docker info 查看: > # docker info &g ...

  2. 1.Docker进阶:存储驱动overlay2

    1.overlay2存储驱动架构图 2.概念介绍 当需要修改一个文件时,使用cow(copy-on_write,写时拷贝)将文件从只读属性的Lower复制到读写属性的Upper进行修改,结果也保存在U ...

  3. Docker存储驱动之OverlayFS简介

    简介 OverlayFS是一种和AUFS很类似的文件系统,与AUFS相比,OverlayFS有以下特性: 1) 更简单地设计: 2) 从3.18开始,就进入了Linux内核主线: 3) 可能更快一些. ...

  4. Docker存储驱动

    Docker Storage Driver 每个 Docker 容器都有一个本地存储空间,用于保存层叠的镜像层(Image Layer)以及挂载的容器文件系统. 默认情况下,容器的所有读写操作都发生在 ...

  5. docker 存储驱动之overlay

    overlay OverlayFS是一个类似于AUFS 的现代联合文件系统,但更快,实现更简单.Docker为OverlayFS提供了一个存储驱动程序. * 注:OverlayFS是内核提供的文件系统 ...

  6. DOCKER存储驱动之DEVICE MAPPER简介

    Device Mapper是一个基于kernel的框架,它增强了很多Linux上的高级卷管理技术.Docker的devicemapper驱动在镜像和容器管理上,利用了该框架的超配和快照功能.为了区别, ...

  7. Docker存储驱动devicemapper介绍和配置

    一.devicemapper介绍 1 2 3 4 5 6 7 8 9 Device Mapper是Linux系统中基于内核的高级卷管理技术框架.Docker的devicemapper存储驱动就是基于该 ...

  8. docker存储驱动模式之direct-lvm配置

    最近在虚拟机上玩docker,但是发现默认安装使用的是loop-lvm的模式做后端存储,这个肯对对后面的实验会造成影响,而且docker官方也不建议在生产环境下使用loop-lvm,下图为docker ...

  9. Docker——docker存储驱动原理

    摘要 Docker 主要是基于 Namespace.cgroups 和联合文件系统这三大核心技术实现的.联合文件系统(Union File System,Unionfs)是一种分层的轻量级文件系统,它 ...

最新文章

  1. JVM年轻代,老年代,永久代详解​​​​​​​
  2. kaldi 源码分析(十) - gmm-init-mono.c分析
  3. 区块链的爆炸式增长使其成为第二大热门需求技能
  4. 牛客 - tokitsukaze and Inverse Number(树状数组+逆序对定理)
  5. 移动端输入框弹出键盘控制
  6. 宁德时代是前8个月全球最大电动汽车电池供应商
  7. Lync Server 2010迁移至Lync Server 2013部署系列 Part14:A/V服务器目录迁移
  8. idea工具(1):依赖包详解
  9. SpringBoot四种读取properties文件的方式
  10. 《信息化项目文档模板十——系统用户操作手册模板》
  11. element 修改主题方法
  12. 不要迷恋哥,哥只是个传说 - 生活至上,美容至尚!
  13. java中封装类Feild和使用setter和getter方法访问封装的类Feild
  14. CAN笔记(17) 预定义报文ID
  15. python 轨迹分析_Python语言:程序代码分析铅球运动轨迹
  16. Eigen 矩阵的特征值特征向量求解(EVD分解)
  17. 大话通信和计算机网络,《大话通信》读后感 - 通信人读书 - 通信人家园 - Powered by C114...
  18. 关于安卓保存网络图片并更新图库
  19. 网络服务器系统管理实训报告,网络系统管理与维护实训报告-20210726103142.docx-原创力文档...
  20. IMSI,TMSI,MSISDN, MSRN 和 IMEI

热门文章

  1. FormData数据中添加json格式数据
  2. ios 内购正式环境_iOS苹果内购(详细步骤)
  3. wps表格怎么添加附页_部门工作总结有excle表格的.doc
  4. 不容错过的配音软件:轻松完成文字到语音的转变
  5. 图机器学习 - cs224w Lecture 6 - 消息传递 与 节点分类
  6. 怎么把几个gif图片合成一个gif?一键gif合成的方法
  7. 2021年TWS蓝牙耳机哪个好?tws蓝牙耳机排名!
  8. IDEA注释模板快捷键设置
  9. tun虚拟网卡该怎么玩不该怎么玩
  10. 2021抖音最热歌曲