V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dataman
V2EX  ›  Docker

探究 Docker 1.13 存储插件和 Propagated Mounts

  •  
  •   dataman · 2017-02-15 19:19:40 +08:00 · 2668 次点击
    这是一个创建于 2845 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Docker 1.13 最激动人心的特性之一,就是新的插件管理系统。它在 1.12 尚处于实验阶段,但是现在已经融合成一个完整的功能。本文从插件管理系统出发,深入讨论了容器挂载,追求新技术点的同学不要错过哦!

    为什么管理插件非常重要?

    最终的目标是快速轻松地利用插件的可扩展性。 Docker 的任务是让所有插件都像容器一样被管理和运行,把 Docker Hub 作为集中资源,让插件更可用,从而推动过程标准化。

    为了更好地理解这个系统的必要性,让我们倒回到插件管理系统之前,看插件是如何工作的。在主机层面,插件作为单独的服务存在,每一个独立管理。这些插件不需要在一个容器里。无论关于网络还是存储,插件都是由 Docker Engine 按需激活,使用/var/lib/docker/plugins里的.sock.spec,或者 .json文件。当需要一个功能时, Docker engine 会起对应的插件,而不管它的运行位置。 Docker 文档因此也被称为实现“ Legacy ”。

    使用一个非常简单的插件 API ,其弊端是市面上众多插件都采用他们自己的安装选项,从而导致了面板上的不一致和很差的用户体验。大多数插件需要手动移动文件,创建复杂的 docker 容器,甚至从资源那里建立一个 go 的 package 。 REX-Ray 不断改革创新,维持了一个相对简单的三步过程:

    1. curl | sh安装
    2. 添加一个配置文章或者环境变量。
    3. rexray start来启动服务和 sock 文件

    标准化使整个过程更加简单。它提供了一个警戒线和变量的最小值。我们如何在容器里解决存储的问题?

    探究容器挂载

    REX-Ray 从一个容器的需求出发来挂载 volume ,并且让这些挂载点对于底层的操作系统( OS )可用。为了让挂载点在容器里对 Docker 运行的主机可用,利用了 Linux 的shared捆绑挂载。你可以在复杂的docker run命令里看到:

    $ docker run -d -v /run:/run:shared ubuntu

    其中的关键是,它只在 /run 路径是一个共享的挂载时工作。在不同的操作系统上可能会不一致。为了减轻这一点, Docker 引入了一个名叫 Propagated Mount 的功能。文档上这样说:被挂载的路径作为递归共享( rshared ),路径下的挂载对于 docker 可见。一个 propagated mount 是必要的,让 Docker daemon 可以在容器里看到挂载。

    REX-Ray 依托于 libStorage package 来挂载,挂载的 volume 在/var/lib/libstorage/volumes/<name>实现。因为 REX-Ray 是容器化的,挂载在主机层级上的<containerpath>/rootfs/var/lib/libstorage/volumes是可用的。 propagated mount 确保了这个路径下的挂载 volume 对于 Docker daemon 可用。

    更多的细节,你可以使用findmnt功能来看在插件初始化findmnt -R -o SOURCE,TARGET,PROPAGATION /前后挂载的传播。如果它工作正常,你可以看到类似/var/lib/docker/plugins/<containerId>/rootfs/var/lib/libstorage/volumes标记为已共享的路径。

    REX-Ray 与 Docker1.13 插件管理系统

    我们相信容器化 REX-Ray 以及把它作为一个插件管理是很棒的选择,由此简化 Docker 管理的存储可扩展性。工程团队正在努力开发 REX-Ray 的下一个版本( 0.8 ),包含了对这一新操作模型的相关更新。同时大家会很高兴看到 Docker 使用 REX-Ray 作为在文件中创建一个 EBS volume 插件提供端对端步骤的概念验证。如果你对创建一个自定义插件感兴趣,不妨看一看。

    我们从技术角度观察了 REX-Ray 使用插件管理系统,展示了如何从 Docker Hub 运行 REX-Ray EBS 插件。大家可以移步 Experimental Docker Managed Plugin at {code} Labs ( https://github.com/codedellemc/labs/tree/master/setup-awsec2-docker-plugin ) 进行尝试。目前尚是实验性功能,还不能用于生产。

    作者: Kendrick Coleman 来源: https://blog.codedellemc.com/2017/02/02/deep-dive-docker-1-13-storage-plugins-propagated-mounts/

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1742 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:36 · PVG 00:36 · LAX 08:36 · JFK 11:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.