5.4. 选择图形驱动程序


容器运行时将镜像和容器存储在图形驱动程序中(可插拔式存储技术),如 DeviceMapper 和 OverlayFS。它们都有各自的优缺点。

有关 OverlayFS 的详情请参考 Red Hat Enterprise Linux(RHEL)7 发行注记

表 5.3. 图形驱动程序比较
名称描述优点限制:

OverlayFS

  • overlay
  • overlay2

组合一个较低(父)和上层(子上)文件系统和工作目录(位于与子进程相同的文件系统上)。较低文件系统是基础镜像,当您创建新容器时,会创建一个包含 deltas 的新文件系统。

  • 在启动和停止容器时比设备映射器更快。设备映射器和 Overlay 之间的启动时间差通常小于一秒。
  • 允许页面缓存共享。

没有兼容 POSIX。

设备映射器精简调配

使用 LVM、设备映射器和 dm-thinp 内核模块。它与一个原始分区(没有文件系统)删除回环设备不同。

  • 负载和高密度方面具有可测量的性能优势。
  • 它为每个容器提供容量限制(默认为 10G)。
  • 您必须有一个专用的分区。
  • 默认情况下,在 Red Hat Enterprise Linux(RHEL)中不会设置它。
  • 所有容器和镜像共享相同的容量池。在销毁和重新创建池的情况下无法调整它的大小。

设备映射器 loop-lvm

使用设备映射器精简配置模块(dm-thin-pool)实施写时复制(CoW)快照。对于每个设备映射器图形位置,基于两个块设备创建精简池,一个用于数据,另一个用于元数据。默认情况下,这些块设备是使用自动创建稀疏文件的环回挂载自动创建。

它开箱即用,因此对于原型制作和开发目的非常有用。

  • 不是 Unix(POSIX)功能的所有可端口操作系统接口的工作方式(例如,O_DIRECT)。最重要的是,不支持在生产环境中使用这个模式。
  • 所有容器和镜像共享相同的容量池。在销毁和重新创建池的情况下无法调整它的大小。

为了提高性能,红帽建议在设备映射器中使用 overlayFS 存储驱动程序。但是,如果您已在生产环境中使用设备映射器,红帽强烈建议您对容器镜像和容器根文件系统使用精简配置。否则,始终将 overlayfs2 用于 Docker 引擎,或将 overlayFS 用于 CRI-O。

使用循环设备可能会影响性能。虽然您仍可以继续使用它,但会记录以下警告信息:

devmapper: Usage of loopback devices is strongly discouraged for production use.
Please use `--storage-opt dm.thinpooldev` or use `man docker` to refer to
dm.thinpooldev section.

要简化存储配置,请使用 docker-storage-setup 工具,它可以自动完成大部分配置详情:

对于 Overlay

  1. 编辑 /etc/sysconfig/docker-storage-setup 文件以指定设备驱动程序:

    STORAGE_DRIVER=overlay2
    注意

    如果使用 CRI-O,请指定 STORAGE_DRIVER=overlay

    使用 CRI-O 时,默认的 overlay 存储驱动程序使用 overlay2 优化。

    使用 OverlayFS,如果要在不同的逻辑卷上具有 imagefs,那么您必须设置 CONTAINER_ROOT_LV_NAMECONTAINER _ROOT_LV_MOUNT_PATH。设置 CONTAINER_ROOT_LV_MOUNT_PATH 需要设置 CONTAINER_ROOT_LV_NAME。例如,CONTAINER_ROOT_LV_NAME="container-root-lv"。如需更多信息,请参阅使用 Overlay Graph Driver

  2. 如果您的独立磁盘驱动器有一个专用于 docker 存储(例如 /dev/xvdb)的磁盘驱动器,请将以下内容添加到 /etc/sysconfig/docker-storage-setup 文件中:

    DEVS=/dev/xvdb
    VG=docker_vg
  3. 重启 docker-storage-setup 服务:

    # systemctl restart docker-storage-setup
  4. 要验证 docker 是否使用 overlay2,并监控磁盘空间使用情况,请运行 docker info 命令:

    # docker info | egrep -i 'storage|pool|space|filesystem'

    输出示例

    Storage Driver: overlay2 1
     Backing Filesystem: extfs

    1
    使用 overlay2 时的 docker info 输出。

    从 Red Hat Enterprise Linux 7.2 开始,OverlayFS 也支持容器运行时用例,并提供更快的启动时间和页面缓存共享,这可以通过降低总体内存使用率来更好地提高密度。

对于 Thinpool

  1. 编辑 /etc/sysconfig/docker-storage-setup 文件以指定设备驱动程序:

    STORAGE_DRIVER=devicemapper
  2. 如果您的独立磁盘驱动器有一个专用于 docker 存储(例如 /dev/xvdb)的磁盘驱动器,请将以下内容添加到 /etc/sysconfig/docker-storage-setup 文件中:

    DEVS=/dev/xvdb
    VG=docker_vg
  3. 重启 docker-storage-setup 服务:

    # systemctl restart docker-storage-setup

    重启后,docker-storage-setup 会设置名为 docker_vg 的卷组,并创建一个 thin-pool 逻辑卷。有关 RHEL 的精简配置的文档,请参考 LVM 管理员指南。使用 lsblk 命令查看新创建的卷:

    # lsblk /dev/xvdb

    输出示例

    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    xvdb 202:16 0 20G 0 disk
    └─xvdb1 202:17 0 10G 0 part
      ├─docker_vg-docker--pool_tmeta 253:0 0 12M 0 lvm
      │ └─docker_vg-docker--pool 253:2 0 6.9G 0 lvm
      └─docker_vg-docker--pool_tdata 253:1 0 6.9G 0 lvm
      └─docker_vg-docker--pool 253:2 0 6.9G 0 lvm

    注意

    精简配置的卷未挂载,也没有文件系统(individual 容器具有 XFS 文件系统),因此不会在 df 输出中出现。

  4. 要验证 docker 是否使用 LVM thinpool,并用于监控磁盘空间使用情况,请运行 docker info 命令:

    # docker info | egrep -i 'storage|pool|space|filesystem'

    输出示例

    Storage Driver: devicemapper 1
     Pool Name: docker_vg-docker--pool 2
     Pool Blocksize: 524.3 kB
     Backing Filesystem: xfs
     Data Space Used: 62.39 MB
     Data Space Total: 6.434 GB
     Data Space Available: 6.372 GB
     Metadata Space Used: 40.96 kB
     Metadata Space Total: 16.78 MB
     Metadata Space Available: 16.74 MB

    1
    使用 devicemapperdocker info 输出。
    2
    对应于您在 /etc/sysconfig/docker-storage-setup 中指定的 VG

默认情况下,精简池配置为使用基础块设备的 40%。当您使用存储时,LVM 会自动将精简池扩展到 100%。这就是为什么 Data Space Total 值与基础 LVM 设备的大小不匹配。

在开发中,红帽分发中的 docker 默认为环回挂载的稀疏文件。查看您的系统是否使用回环模式:

# docker info|grep loop0

输出示例

 Data file: /dev/loop0

5.4.1. 在 SELinux 中使用 OverlayFS 或 DeviceMapper 的好处

OverlayFS 图形的主要优点是 Linux 页面缓存在共享同一节点上的镜像的容器之间共享。OverlayFS 的此属性会导致在容器启动期间减少输入/输出(I/O),从而加快容器启动时间,同时减少类似镜像在节点上运行时的内存用量。这些结果在许多环境中都很有用,特别是那些针对密度优化且具有高容器数量率(如构建场)或镜像内容具有重大重叠的目标。

DeviceMapper 无法进行页面缓存共享,因为精简配置的设备会基于每个容器分配。

注意

OverlayFS 是 Red Hat Enterprise Linux(RHEL)7.5 的默认 Docker 存储驱动程序,在 7.3 及更新的版本中被支持。将 OverlayFS 设置为 RHEL 上的默认 Docker 存储配置,以提高性能。有关配置 OverlayFS 以便与 Docker 容器运行时搭配使用的说明

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.