3

我在 CoreOS 上使用工作Ceph RBD Docker 卷插件运行 Mesos 和 Ceph 集群,但我非常不清楚如何将其与 Mesos/Marathon 一起使用……rbd为单个 Docker 容器创建/使用卷虽然工作完美。

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

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

这里还有其他关于 SO 的问题:

不幸的是,它并没有真正解决这个特定问题。

使用 RexRay的EMC 代码示例也涵盖了单个实例示例,我也可以使用上面提到的卷插件轻松处理:

{
    "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情况下,将自动创建卷。但是如果我想使用持久卷多个实例呢?

4

1 回答 1

3

这是 Flocker 旨在解决的用例。(免责声明:我是 ClusterHQ 的 CTO)。有关 Flocker <=> Mesos/Marathon 交互的演示,请参阅此博客文章,其中展示了 Flocker 控制服务如何充当集群设置中存在容器卷的“事实来源”。Flocker 然后将按需创建,然后在主机之间协调映射和取消映射这些卷,因为引用这些卷的容器在集群中移动。

Flocker 通过提供集群范围的卷名称命名空间来做到这一点,然后可以通过用于 Docker 的 Flocker 插件和 Marathon 使用这些名称,从而为 Mesos 集群中的有状态容器提供可移植性和高可用性。

Flocker 还有一个 Ceph 驱动程序:

  • 谷歌“Flocker Ceph 驱动程序”

在 CoreOS 上工作:

  • 谷歌“Flocker on CoreOS 演示”

您可以通过为每个容器提供自己的卷名(如 、 等)来运行多实例作业(如具有副本集的 MongoDB mongo_1mongo_2

将这些部分放在一起并非易事,但我很乐意提供帮助。如果您愿意,我可以专门为您的堆栈(Ceph + CoreOS + Docker + Mesos + Marathon)编写详细指南。

于 2016-01-26T12:12:40.720 回答