BenjaminYang In solitude, where we are least alone

docker从零开始 存储(六)存储驱动如何选择

Docker存储驱动程序

理想情况下,将非常少的数据写入容器的可写层,并使用Docker卷来写入数据。但是,某些工作负载要求您能够写入容器的可写层。这是存储驱动程序的用武之地。

Docker使用可插拔架构支持多种不同的存储驱动程序。存储驱动程序控制在Docker主机上存储和管理映像和容器的方式。

阅读完存储驱动程序概述后,下一步是为工作负载选择最佳存储驱动程序。在做出此决定时,需要考虑三个高级别因素:

  • 如果内核支持多个存储驱动程序,则假设满足该存储驱动程序的先决条件,Docker会在没有显式配置存储驱动程序的情况下列出要使用哪个存储驱动程序的优先级列表:

    • 如果可能,使用配置量最少的存储驱动程序,例如btrfszfs其中每个都依赖于正确配置的后备文件系统。

    • 否则,尝试在最常见的情况下使用具有最佳整体性能和稳定性的存储驱动程序。

      • overlay2是首选,其次是overlay这些都不需要额外的配置。overlay2是Docker CE的默认选择。

      • devicemapper是下一个,但需要direct-lvm生产环境,因为loopback-lvm,虽然零配置,性能非常差。

    选择顺序在Docker的源代码中定义。您可以通过查看Docker CE 18.03的源代码来查看订单。 如果您运行不同版本的Docker,可以使用文件查看器顶部的分支选择器来选择不同的分支。

  • 您的选择可能受Docker版本,操作系统和分发版的限制。例如,aufs仅在Ubuntu和Debian上支持,并且可能需要安装额外的软件包,而btrfs仅在SLES上支持,而SLES仅支持Docker EE。见 每个Linux发行版支持存储驱动程序

  • 某些存储驱动程序要求您使用特定格式作为后备文件系统。如果您有使用特定支持文件系统的外部要求,这可能会限制您的选择。见 支持后盾的文件系统

  • 在缩小了可供选择的存储驱动程序之后,您的选择取决于工作负载的特性以及所需的稳定性级别。有关 帮助做出最终决定,请参阅其他注意事项

每个Linux发行版支持的存储驱动

在较高级别,您可以使用的存储驱动程序部分取决于您使用的Docker版本。

此外,Docker不建议任何需要您禁用操作系统安全功能的配置,例如在CentOS上selinux使用overlayoverlay2驱动程序时需要禁用 

Docker EE和CS-Engine

对于Docker EE和CS-Engine,支持存储驱动程序的权威资源是 产品兼容性矩阵要从Docker获得商业支持,您必须使用支持的配置。

Docker CE

对于Docker CE,只测试了一些配置,并且您的操作系统内核可能不支持每个存储驱动程序。通常,以下配置适用于最新版本的Linux发行版:

Linux发行版推荐的存储驱动
Ubuntu上的Docker CE aufsdevicemapperoverlay2(Ubuntu的14.04.4或更高版本,16.04或更高版本), ,overlayzfsvfs
Debian上的Docker CE aufsdevicemapperoverlay2(Debian的扩展), overlayvfs
CentOS上的Docker CE devicemapper, vfs
Fedora上的Docker CE devicemapperoverlay2(Fedora 26或更高版本,实验性),overlay(实验性的),vfs

如果可能,overlay2是推荐的存储驱动程序。第一次安装Docker时,overlay2默认使用。以前,aufs在可用时是默认使用,但现在不再是这种情况。如果要aufs在未来的新安装中使用,则需要显式配置它,并且可能需要安装额外的软件包,例如linux-image-extraaufs

在使用的现有安装中aufs,仍然使用它。

如果有疑问,最好的全能配置是使用具有支持overlay2存储驱动程序的内核的现代Linux发行版,并将Docker卷用于写入繁重的工作负载,而不是依赖于将数据写入容器的可写层。

vfs存储驱动程序通常不是最好的选择。在使用vfs 存储驱动程序之前,请务必阅读 其性能和存储特性和限制

对非推荐存储驱动程序的期望:Docker CE不提供商业支持,您可以在技术上使用适用于您的平台的任何存储驱动程序。例如,您可以使用btrfsDocker CE,即使不建议在任何Docker CE平台上使用,您需要自担风险。

上表中的建议基于自动回归测试以及已知适用于大量用户的配置。如果您使用推荐的配置并找到可重现的问题,则可能会很快修复。如果根据此表不推荐您要使用的驱动程序,则可以自行承担风险。您可以而且应该仍然报告您遇到的任何问题。但是,此类问题的优先级低于使用推荐配置时遇到的问题。

适用于Mac的Docker和适用于Windows的Docker

适用于Mac的Docker和适用于Windows的Docker适用于开发,而非生产。无法在这些平台上修改存储驱动程序。

支持的后备文件系统

关于Docker,后备文件系统是所在的文件系统 /var/lib/docker/某些存储驱动程序仅适用于特定的后备文件系统。

存储驱动程序支持的后备文件系统
overlay, overlay2 ext4, xfs
aufs ext4, xfs
devicemapper direct-lvm
btrfs btrfs
zfs zfs

其他考虑

适合您的工作量

除此之外,每个存储驱动程序都有自己的性能特征,使其或多或少适合不同的工作负载。考虑以下概括:

  • aufsoverlayoverlay2所有操作都在文件级而不是块级操作。这样可以更有效地使用内存,但容器的可写层在写入繁重的工作负载中可能会变得非常大。
  • 块级存储驱动器,例如devicemapperbtrfszfs执行的写繁重的工作更好(虽然不是还有泊坞窗卷)。
  • 对于许多小型写入或具有多个层或深层文件系统的容器, overlay可能表现更好overlay2
  • btrfszfs需要大量的内存。
  • zfs 是PaaS等高密度工作负载的理想选择。

有关性能,适用性和最佳实践的更多信息,请参阅每个存储驱动程序的文档。

共享存储系统和存储驱动程序

如果您的企业使用SAN,NAS,硬件RAID或其他共享存储系统,则它们可以提供高可用性,增强的性能,精简配置,重复数据删除和压缩。在许多情况下,Docker可以在这些存储系统之上工作,但Docker并没有与它们紧密集成。

每个Docker存储驱动程序都基于Linux文件系统或卷管理器。请务必遵循在共享存储系统之上运行存储驱动程序(文件系统或卷管理器)的现有最佳实践。例如,如果在共享存储系统之上使用ZFS存储驱动程序,请确保遵循在该特定共享存储系统之上操作ZFS文件系统的最佳实践。

稳定性

对于某些用户而言,稳定性比性能更重要。虽然Docker认为这里提到的所有存储驱动程序都是稳定的,但有些更新,并且仍在积极开发中。一般而言,aufsoverlay,并且 devicemapper是具有最高稳定性的选择。

经验和专业知识

选择您的组织可以轻松维护的存储驱动程序。例如,如果您使用RHEL或其下游分支之一,您可能已经具有LVM和Device Mapper的经验。如果是这样,devicemapper司机可能是最好的选择。

使用您自己的工作负载进行测试

您可以在不同的存储驱动程序上运行自己的工作负载时测试Docker的性能。确保使用等效的硬件和工作负载来匹配生产条件,以便您可以看到哪个存储驱动程序提供了最佳的整体性能。

检查当前的存储驱动程序

每个存储驱动程序的详细文档详细说明了使用给定存储驱动程序的所有设置步骤。

要查看Docker当前使用的存储驱动程序,请使用docker info并查找该Storage Driver行:

 

要更改存储驱动程序,请参阅新存储驱动程序的特定说明。某些驱动程序需要其他配置,包括配置Docker主机上的物理或逻辑磁盘。

重要说明:更改存储驱动程序时,任何现有镜像和容器都将无法访问。这是因为新存储驱动程序无法使用它们的图层。如果还原更改,则可以再次访问旧图像和容器,但是您使用新驱动程序提取或创建的任何内容都将无法访问。

 

posted @ 2018-08-23 16:49  benjamin杨  阅读(1428)  评论(0编辑  收藏  举报