如何将Docker卷作为Mesos/Marathon的持久卷?

3
我正在使用CoreOS上的Mesos和Ceph集群,并使用工作的Ceph RBD Docker卷插件,但我不太清楚如何将其与Mesos/Marathon一起使用...为单个Docker容器创建/使用rbd卷运行良好。

我找不到任何涉及通过Marathon自动创建(在Mesos从节点之间进行“任务迁移”时进行重新映射)这些卷的文章/博客帖子/等等。对我来说特别重要的是如何在每个实例需要拥有自己的卷时运行多个具有状态服务的实例(想象一下在Mesos/Marathon上的MongoDB ReplicaSet)。

我知道Mesos持久化卷文档,也看到了Marathon问题,但仍然很困惑如何或何时可用...

这里还有其他问题:

不幸的是,它们并没有真正回答这个特定问题。

EMC Code 的例子也仅仅涵盖了单个实例的示例,而我可以轻松处理上述提到的卷插件:

{
    "id": "nginx",
    "container": {
        "docker": {
            "image": "million12/nginx",
            "network": "BRIDGE",
            "portMappings": [{
                "containerPort": 80,
                "hostPort": 0,
                "protocol": "tcp"
            }],
            "parameters": [{
                "key": "volume-driver",
                "value": "rbd"
            }, {
                "key": "volume",
                "value": "nginx-data:/data/www"
            }]
        }
    },
    "cpus": 0.2,
    "mem": 32.0,
    "instances": 1
}

在这种情况下,nginx-data卷将自动创建。但是,如果我想使用持久卷和多个实例呢?
1个回答

3
这是Flocker旨在解决的用例。(免责声明:我是ClusterHQ的CTO)。请参阅此博客文章以了解Flocker与Mesos/Marathon互动的演示,展示了Flocker控制服务如何作为群集设置中容器卷存在的“真实来源”。 Flocker将根据需要创建这些卷,并在容器围绕群集移动时协调映射和取消映射这些卷。
Flocker通过提供卷名称的群集范命名空间来实现此目的,然后可以通过Docker的Flocker插件使用Marathon来使用这些名称,从而为Mesos集群中具有状态的容器提供可移植性和高可用性。
Flocker还有一个Ceph驱动程序:
  • 搜索"Flocker Ceph Driver"
并且适用于CoreOS:
  • 搜索"Flocker on CoreOS demo"
您可以通过为每个容器分配自己的卷名称(如,等)来运行多实例作业(如带有副本集的MongoDB)。
把这些部分组合起来并不容易,但我很乐意提供帮助。如果您需要,我可以为您的堆栈(Ceph + CoreOS + Docker + Mesos + Marathon)编写一份详细指南。请注意,保留HTML标记。

感谢您快速而详细的回答!我有一段时间前看过 https://clusterhq.com/2015/10/06/marathon-ha-demo/ 上的教程,但据我所知,这也仅涵盖了单实例用例。是否有其他文章涵盖了扩展方面的内容? - Tobi
抱歉,还有一个问题:关于不同的卷名,这需要手动设置吗?如果是这样,当我通过Marathon中的JSON定义启动新应用程序时,我真的不明白这如何工作。理想情况下,卷的创建/迁移/扩展过程应对用户透明。否则,我看不出使用Marathon的好处...但也许我误解了这一点。 - Tobi
你需要一种自动编号卷的方法。我们在 Flocker 中有一个实现“MultiVolumes”的想法,这些将是卷,您可以说 flockerctl scale mongodb=5,然后 Flocker 将为 MultiVolume mongodb 分配 5 个可用卷,每次使用此卷名称启动容器时,它会给您返回一个未被另一个容器使用的卷。这对于您的用例是否可行,@Tobi? - Luke Marsden
@Tobi,感谢您的回复!您如何设想在这种情况下进行缩减?如果您从10个容器缩减到5个,您是否希望销毁5个多余的卷?在我看来,这就是区分容器缩放和卷缩放的有用之处,这也是我们提出MultiVolume想法的原因...期待您的想法! - Luke Marsden
这是一个有趣的问题,我和一些同事也在思考这个问题。我认为这实际上取决于有状态服务的类型以及它使用复制和故障转移机制的方式。例如,MongoDB处理方式与Elasticsearch不同。我真的很想知道“官方”的Mesosphere有关有状态服务的立场,但不幸的是没有,我认为这很遗憾。我已经在Twitter上关注了你,也许我们可以通过私信继续讨论。 - Tobi
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接