在Docker引擎Swarm模式下,我们能否跨多个主机共享一个公用/单一命名卷?最简单的方法是什么?
在Docker引擎Swarm模式下,我们能否跨多个主机共享一个公用/单一命名卷?最简单的方法是什么?
volumes:
grafana:
driver: local
driver_opts:
type: nfs
o: addr=192.168.xxx.xx,rw
device: ":/PathOnServer"
其他答案肯定是正确的。如果你觉得自己还缺少些什么,或者得出结论认为这个领域可能永远不会真正改善,那么你可能需要重新考虑使用典型的类 POSIX 层次文件系统抽象。并非所有应用程序都真正需要它(我甚至可以说只有少数应用程序需要)。也许你的应用程序也不需要。
在许多圈子中仍然很常见,但通常这些人非常了解他们的远程/分布式文件系统,并知道如何设置和充分利用它们(它们可能也是非常好的系统,尽管通常没有现有的 Docker 卷驱动程序)。有时这也部分是因为他们被迫这样做(不能或不应该重写以支持其他存储后端的代码库)。使用、配置甚至编写任意 Docker 卷驱动程序只是次要关注点。
如果你有选择的话,那么评估其他持久性解决方案供你的应用程序使用。许多实现不会使用 POSIX 文件系统接口,而是使用网络接口,这在像 Docker Swarm 这样的集群中不会带来特定的基础设施级别的困难。
从头开始,Docker本身不支持此功能。您必须使用其他组件,例如提供新卷类型的Docker插件,或直接在文件系统上使用同步工具来同步数据。
在我看来,最简单的解决方案是rsync
或更准确地说是lsyncd
,它是rsync的守护程序版本。但我从未尝试过用于Docker卷,因此无法确定它是否能够很好地处理它。
其他解决方案是使用Infinit.sh。它基本上与lsyncd
执行相同的操作。这是单向同步。因此,如果您的Docker容器在其卷中是RW,则它将无法满足您的期望。我尝试了这个解决方案,并且对于RO操作效果非常好。但不适用于生产环境。它仍然是alpha版本。Infinit也正在开发Docker驱动程序。尚未发布。因此,我甚至没有尝试过它。太冒险了。
我发现的其他解决方案,但无法安装(因此无法尝试)的是flocker和glusterFS。两者都旨在基于多台计算机的多个HDD创建FS卷。但是,它们的存储库在过去几周中都无法使用。
很抱歉我只能提供一些弱化的解决方案,但我自己也面临着同样的问题,还没有找到完美的解决方案。
祝好, Olivier
lsyncd
很棒,但它只提供单向同步:一个源,一个目的地。对于在群集中随机主机上运行且编写文件的 Docker 容器,您需要在所有主机上拥有相同的数据,而单向同步是不够的。 - fjc