资讯专栏INFORMATION COLUMN

使用Convoy-NFS构建共享卷

alin / 1295人阅读

摘要:警告因为是的一个较新的服务,它只能在有限的几个位置上使用。现在你可以开始从视图中手动创建一个卷,或干脆创建一个使用和卷名的服务。我非常期待看到和中的共享卷会有什么下一步的发展。

如果你用过Docker你就会知道,共享卷和跨主机的数据访问是个非常棘手的问题。虽然Docker的生态系统在逐渐走向成熟,但对大多数人来说,在不同环境中实现持久化存储还是很麻烦的。幸运的是,Rancher一直在研究这件事,并且想出了一个能独特的、能解决大部分这个问题的方案。用共享存储运行数据库的方法仍没有被广泛推荐,但对于许多其他的情况,跨主机共享卷倒是一个很好的做法。

这个指南中的大部分内容是受Rancher的一个线上Meetup的启发。另外,如果你想自己从头开始搭建Convoy-NFS,这个网页上有一些有关NFS配置的信息,你也许能作为参考:https://github.com/rancher/ra...。

Rancher Convoy

如果你以前没有听说过Rancher的Convoy项目,我现在可以先简单介绍一下。Rancher希望可以通过Convoy项目让持久化容量存储变得简单方便。Convoy是一个非常棒的磁盘插件,因为它为用户提供了多种不同的选择。例如EBS卷和S3的支持,与VFS/NFS一起,为用户提供了一些用于配置共享存储的厉害并且灵活的选择。

Dockerized-NFS

这里有一个小秘诀,教你怎样启动一个能和Convoy-NFS服务连接起来的Docker化的NFS服务器。Docker-NFS基本上是一个穷人的EFS。如果你想运行它,你必须有足够的信心,相信服务器不会被毁,或相信你的数据无足轻重,即使丢失了也无所谓。你可以在这里找到更多我过去使用的Docker NFS服务器的信息。

给点进阶些的提议,我会建议你看看这个叫做弹性文件存储或简称EFS的东西,它是 NFS的AWS实现。这个解决方案更简单粗暴,它是一个随时可用于生产的NFS服务器,你可以把它视为Convoy-NFS的后端。构建EFS是很简单的,不过它超出了这篇文章的讨论范围。你可以在这个链接中看看如何构建和配置EFS。

警告:因为EFS是AWS的一个较新的服务,它只能在有限的几个位置上使用。(不过更多的可使用位置也很快会出现)。

下面就是对于Docker-NFS服务器来说,你的docker-compose.yml 可能的样子:

docker-nfs:
 image: cpuguy83/nfs-server
 privileged: true
 volumes:
 - /exports
 command:
 - /exports

在采用这个容器化的NFS服务器的方法时你可能会碰到的一个疑难杂症是,你的主机要么没有安装NFS内核模块,要么没有打开伴随的服务。

在Ubuntu上很容易安装内核模块,SSH到主机上, 运行NFS Server容器以及以下命令:

sudo apt-get install nfs-kernel-server

在CoreOS上,模块是安装了的,只是没有打开。要启用NFS,你需要SSH到对应主机上,运行NFS Server容器,并运行下面的命令:

sudo systemctl start rpc-mountd
配置EFS

配置EFS是很容易的。用上面提到过的链接,你可以了解到创建一个能与Convoy连接的EFS卷的全部步骤。EFS共享卷既可以简单配置成IP访问,也可以深入地配置成通过DNS域名访问。

在Rancher的社区应用服务目录里有一个新的目录入口,有了它,你可以直接通过Convoy使用EFS卷,这能简化某些配置。使用应用服务目录入口仍需要你先创建EFS share,但配置Convoy来与其连接的过程会简单很多。只需要从AWS里复制出EFS ID,选择其中你已创建共享的区域,然后指定要将EFS share安装到本地的位置。“/efs”就是一个很好的在最开始测试东西的例子:

Convoy-NFS

目前,Rancher还提供另外一种名叫“Convoy-NFS”的应用服务目录项,来将容器连接到NFS Server上:

安装程序是非常简单的,但也有几件事情要注意。首先,堆栈必须命名为“Convoy-NFS”,这是插件的名称。其次,NFS Server应该和在其上设置NFS Server的主机名相匹配。如果你创建的是Docker-NFS容器,记得使用容器的IP(为了写这篇文章,我用了一个测试环境,因而只用了Rancher容器内部IP来部署NFS Server)。当你用EFS创建你的NFS share时,使用已配置的DNS的名称。

最后一点要注意的是安装选项和安装点。这里的端口需要与将NFS Server 和(2049 for docker-nfs)配置在一起的端口相匹配,并且确保你打开了nfsver=4。另外,如果你要使用nfsvers=4选项,记得一定为MountDirectory用“/”。不使用nfsvers=4选项的话就用“/exports”。

最终一步的配置和下面看上去差不多:

proto=tcp,port=2049,nfsvers=4

你可以添加其他选项来调整共享,但这些都是最低限度的构建所必需的组件。

给Rancher几分钟时间提供Convoy-NFS容器。一切完成后你就可以创建和攻击NFS卷了。最快的检查是否一切正常的方法,是点击Infrastructure -> Storage Pools选项。如果你在视图中看见了主机,那你就可以开始准备创建和分享卷了。

现在你可以开始从Storage Pools视图中手动创建一个卷,或干脆创建一个使用Convoy-NFS driver和卷名的服务。

我将创建一个测试容器,它可跨越两个主机共享相同的“test_volume”以及数据,如下图所示(我在本地使用了rancher-compose来堆栈,如果你觉得使用GUI更容易的话敬请使用GUI)。

test:
image: ubuntu
volume_driver: convoy-nfs
tty: true
volumes:
- test_volume:/data
command:
- bash

一个新的卷会在Storage Pools页面上弹出来:

如果你想验证是否一切运行正常,你可以将容器的数量扩展到两个或更多个。然后exec到一个容器中,在其中创建一个文件,看你能否从另一个容器中读取这个文件,而且最好是在一个不同的主机上。如果这些都没问题,你应该已经成功了:

在第一个容器中,我们可以编写出文件:

在第二个容器中,我们可以重新读取它,检测一下共享存储是否运行正常:

结论

随着Convoy不断的发展和壮大,我们会看到更多的部署的选择。现在,NFS是稳定的,能正常工作的。如果你已经在使用AWS了,EFS会让一切都变得更加容易。我非常期待看到Convoy和Rancher中的共享卷会有什么下一步的发展。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28007.html

相关文章

  • Docker学习与和应用(二)_使用Docker

    摘要:在前一篇文章学习与和应用一初步认识中,我们初步介绍了解决了什么问题,容器化技术与传统的虚拟化方式的区别,以及简要介绍了的几大核心概念镜像容器和仓库。针对上述问题,提供了的,通过使用指令配置的方式来创建镜像。 在前一篇文章 Docker学习与和应用(一)_初步认识中,我们初步介绍了Docker解决了什么问题,Docker容器化技术与传统的虚拟化方式的区别,以及简要介绍了Docker的几大...

    Ocean 评论0 收藏0
  • ThinkJS 项目构建 Docker 镜像

    摘要:而项目代码会随着需求变更而经常变化。项目启动后一般会有两个目录会写入文件。 其实这个话题很简单,不是很想写这篇文章。不过的确还是有很多朋友在打包构建部署上存在一些问题,恰巧最近使用 Docker 部署了几个 ThinkJS 相关的项目,所以还是拿出来说说吧。需要提前说明的是本文并不是 Docker 的基础教程,默认大家都是了解 Docker 的。然后我会分享一下我觉得 ThinkJS ...

    fuyi501 评论0 收藏0
  • Rancher v1.2震撼发布:更优秀的全栈化容器部署与管理平台

    摘要:模版用户可以选择不同的基础设施服务组成模版同时还是有默认的主要模版,用户可以快速创建用户也可以把的项目放到模版中,来管理和部署增强已经大大简化了管理和配置,在多节点部署中和已经被去掉了。请保持关注,和一起走上伟岸光明的容器之路 开篇第一句,先为Rancher v1.2曾经的跳票深深抱歉(鞠躬)。我们补偿的方式,就是在此日、此刻,用新版功能向你证明Rancher v1.2值得你的等待。R...

    NervosNetwork 评论0 收藏0
  • k8s :构建系统

    摘要:前言大型软件,一般都有自己的构建系统,也不例外,本文简要介绍构建系统构建流程以为例,在命令行执行以下命令在源代码根目录文件中定位到目标,该目标的动作是执行脚本执行将构建过程拆分成一个个步骤,每个步骤 前言 大型软件(linux,android .etc)一般都有自己的构建系统,k8s 也不例外,本文简要介绍 k8s 构建系统 构建流程 release 以 quick-release 为...

    mumumu 评论0 收藏0
  • Docker技术之构建镜像和网络模式解析

    Docker技术之构建镜像和网络模式解析 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...

    不知名网友 评论0 收藏3004

发表评论

0条评论

alin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<