DaoCloud 于 2016 年 7 月 12 日正式宣布与 EMC 公司在容器技术领域战略合作取得里程碑式进展,DaoCloud Enterprise 应用云平台产品成功整合包括 REX-Ray 、ScaleIO、RackHD 等多项 EMC 企业级产品和技术,双方合力打造容器时代的软件定义数据中心。本文将为读者剖析 EMC 的 REX-Ray 与 Docker 1.12 版本下的 Docker Swarm Mode 是如何开展工作的。
“Docker Engine 1.12 版有没有类似于服务发现和编排的存储发现功能呢?”
“ 1.12 版的 Swarm Mode 在卷/持久化存储上有哪些革新?”
“对于我的数据库持久化,哪个才是最优化的解决方案?”
—— 此种种,都是 Docker 用户几乎都会被问到的问题。Docker 1.12 版完全集中在编排功能上,但是在卷、卷驱动和存储方面也有不少改进。
因此,在这篇文章中,我将会回答以下这些问题:
1、Docker 1.12 的持久化存储有什么新的亮点?
2、在新的 API 服务中,持久化存储是如何工作的?
3、如何用 RexRay 为 Docker 1.12 部署一个简单的网络应用?
在 Docker 存储中,持久化存储指的是存储卷——通常与有状态的应用有关,例如数据库,也可以说是用来存储那些在容器生命周期之外的数据。像数据库这样的服务需要置于容器之外的持久化存储,而且持久化存储要比容器的生命周期更长。
Docker 用 Volume 存储卷的形式为容器提供基本的持久化数据存储方案。有相当多的人关注 OverlayFS,它是一款现代的联合文件系统,跟 AUFS 很类似,但它有更简洁明晰的设计风格和极具潜力的速度,而且从 3.18 版本开始就一直在主线 Linux 内核上工作了。在 Docker 社区,OverlayFS 的人气急剧攀升,被很多人看成是 AUFS 的接班人。但是需要承认的是,持久化存储仍然是 Docker 发展的热门领域,在 Docker 1.12.1 中,已经做出了不少改进。
我们还得接受另一个事实——那些在产品中不遗余力使用 Docker 的拥趸们,还希望使用比如 EMC(REX-Ray)、ClusterHQ(Flocker)、PortWrox、CoreOS 和 Nutanix 这些强大的合作伙伴生态来想方设法简化持久化存储。EMC REX-Ray 是最普及的持久化存储解决方案,有着广大的 Docker 用户基础。现在让我们看看 REX-Ray 与 Docker 1.12 的 Docker Swarm Mode 是如何工作的。
什么是 REX-Ray?
REX-Ray 是一个开源的存储编排引擎,可为 Docker 容器运行时提供持久化存储访问,并为普通存储、虚拟化和云平台提供高级存储功能的友好的用户界面。它在后端实现了一套 Docker 存储卷驱动,为容器提供持久化存储,对很多存储供应商提供支持。实际上,它就是一个用于管理多平台存储的分布式工具。REX-Ray 为各种存储平台提供了一套通用的创建、移除、映射以及复制存储卷的 API。
REX-Ray 在 0.4.0 版本之前是一个独立进程,而从 0.4.0 版开始,它以 Client-Server 的分布式模式工作。Client 端是本地主机进程的一种抽象层次(对存储卷附件、发现、格式化,以及挂载设备的请求),而 Server 端则提供对多个存储平台的控制面板的必要抽象。
试试给 1.12 版 Swarm 模式装上 REX-Ray,看看它是如何实现持久化存储的。我们将使用一个双节点 Swarm 模式集群。
安装 RexRay?
是的,你当然可以。在容器内部运行 REX-Ray。
你有没有注意到一件事情? “docker service” 命令是由 “– -mode= global” 选项提供的,所以集群内的所有节点都会被 REX-Ray 工具自动安装。这就是 Docker 1.12 版的魔法!我相信,Docker 1.12 可以比 Ansible 和 Puppet 更快地做到这点。虽然我知道你可能不同意我的说法,因为这个 Docker 镜像不是 EMC 的官方版本,但没人阻止你到测试环境下去尝试一番,用 1 分钟开启 RexRay。
官方安装 REX-Ray 非常简单。REX-Ray 是用 Go 语言写成的,所以一般情况下除了单个二进制文件,不需要安装任何依赖文件。借助 curl 工具,手动安装 REX-Ray 也就是简单的一行命令:
REX-Ray0.5.1 是最新的发布版本,安装它仅需要几秒钟就能完成。可以通过下面这道命令来检查 REX-Ray的版本信息:
REX-Ray CLI 功能丰富,有各种各样可用的选项来玩转存储卷管理功能,比如下面这样:
REX-Ray 有一个超级赞的功能,就是它可以被作为一个交互 CLI 来执行存储卷的管理功能,此外,它还可以被作为一个服务来支持 Docker 和其他能通过 HTTP/JSON 完成通信的平台。举个例子,你可以像下面这样,创建一个 config.yml 文件:
初始化 REX-Ray
想要找回存储卷的信息,你可以使用下面这道命令:
在 Docker 新的Service API 中,持久化存储是如何工作的呢?
Docker 1.12 带来了 3 个新的 API ——Service(服务)、swarm 和 node(节点)。之前版本种的 -v 选项在 Docker 1.12 的 Swarm Mode 中被舍弃了。原因是——首先声明,在这里我们讨论的是跨越上百个集群节点的编排功能,而不是一台运行 Docker 容器的单个主机—— “-v” 被舍弃是因为服务并不编排卷。有一点非常重要:在 Docker 1.12.1 中我们专门使用术语 “mount”(挂载),因为这才是服务做的事情。你当然可以用一个带有模板的服务来创建一个卷,然后再添加给你,但它本身并不处理卷,所以现在 Docker 有意把它去掉了。
在 Docker 1.12 中,如何使用 REX-Ray 来部署一个简单的网页应用?
假设你已经安装了REX-Ray,接下来可以试试 Swarm Mode 是怎样处理持久化存储功能的。
假设你已经装了 REX-Ray,并在你的环境下运行过了。如果没有,安装一个 REX-Ray 0.3.0 也就是几秒钟的事。EMC 团队干了一件了不起的事情——搞出了 “REX-Ray 配置生成器”,通过这个链接你可以为你的REX-Ray 配置创建 config.yml 文件。如果你想让事情保持简单,你也可以输出以下变量:
搞定了。接下来,我们来创建一个REX-Ray 卷,供 Docker 容器使用:
已经创建了一个名叫 collabray,有特定大小(便于展示)的 rexray 卷。当然,你需要累加 Docker 的卷,来理解上面的内容。
现在,运行下面的 docker 卷创建一个实用程序:
上面用一道命令创建了一个 7GB 大小,名为 “collabray” 的 EBS 卷。你可以用以下方法,检查这道命令。
你可以像下面这样,轻易地自动验证 /dev/xvdh 安装到 /var/lib/rexray/volumes/collabray 上了。
让我们来验证下 Docker 卷已经检查了特定的卷:
好极了!现在到了整篇博客最重要的部分。我们将创建 WordPress 应用,作为一个用来把 MySQL 数据库安装到 REX-Ray 上的服务,以便把数据库变成一个持久化存储应用。实际命令如下所示:
在上面的例子中,我们用 “–mount” 选项来把资源 “collabray” 作为 REX-Ray卷,把 /var/lib/mysql 标记为我们的备份目录,目录使用的卷驱动命名为 “REX-Ray” 。
我们可以用 Docker 来检查特定服务的命令,来确认REX-Ray 卷正在被运行服务的容器使用。
现在检查下,它有没有把数据库相关文件丢到 /var/lib/rexray/volumes/collabray/data 下面。
MySQL 数据库相关文件都被呈现在安装位置下,这将成集群的持久化存储,而且 REX-Ray 为我们做这一切安全性是非常高的。
接下来,运行 wordpress 前端服务,这可以搜索到后台 wordpress 数据库 1 中使用了不合格域名的部分,如下所示:
正如上面的例子所展示的,没有对 wordpress 应用使用存储卷,但是你也许想用 REX-Ray 在生成的不同的卷中 backup/var/www/html 一下。
最后,我已经准备好 WordPress 应用,即将用 REX-Ray 卷安装进 Swarm 模式。你可以像下面这样,用 lynx text UI 快速地查看一下:
REX-Ray 还能提供高效的快照功能。我们先来用下述命令找到属于 “callabray” 的卷:
你还可以看看管理器的仪表盘,验证一下快照。
未经允许不得转载:DaoCloud道客博客 » 当 Docker 1.12 Swarm Mode 与持久化存储遇到 EMC REX-Ray