【问题标题】:How to use Docker volumes as persistent volumes for Mesos/Marathon?如何使用 Docker 卷作为 Mesos/Marathon 的持久卷?
【发布时间】:2016-01-26 11:37:12
【问题描述】:

我在 CoreOS 上运行 Mesos 和 Ceph 集群,Ceph RBD Docker volume plugin 工作正常,但我不清楚如何将其与 Mesos/Marathon 一起使用...为单个 Docker 容器创建/使用 rbd 卷是但工作完美无瑕。

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

我知道Mesos persistent volume docs,我也看到了Marathon issue,但我仍然很困惑如何或何时可以使用...

还有其他关于SO的问题:

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

RexRay 的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 卷。但是如果我想使用持久卷多个实例怎么办?

【问题讨论】:

    标签: docker cluster-computing mesos mesosphere docker-volume


    【解决方案1】:

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

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

    Flocker 还有一个 Ceph 驱动程序:

    • Google“Flocker Ceph 驱动程序”

    适用于 CoreOS:

    • Google“Flocker on CoreOS 演示”

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

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

    【讨论】:

    • 感谢您快速详细的回答!前段时间我在clusterhq.com/2015/10/06/marathon-ha-demo 看到了教程,但据我了解,这也仅涵盖单实例用例。还有其他文章介绍缩放吗?
    • 对不起,另一个问题:关于不同的卷名,这需要手动设置吗?如果是这样,当我通过 Marathon 中的 JSON 定义启动新应用程序时,我真的不明白这是如何工作的。理想情况下,卷创建/迁移/扩展过程应该对用户透明。否则我看不到使用 Marathon 的好处……但也许我误解了这一点。
    • 您需要一些方法来自动对卷进行编号。我们有一个使用 Flocker 实现“MultiVolumes”的想法,这些将是您可以说 flockerctl scale mongodb=5 的卷,Flocker 将为 MultiVolume mongodb 分配 5 个可用卷,然后每次使用此卷名启动容器时给你一个没有被另一个容器使用的卷。你认为@Tobi 对你的用例有用吗?
    • 另外,请参阅 github.com/mesosphere/marathon/issues/2493 持久卷支持现在计划在 Marathon 0.16(之前是 0.14...)。
    • 可能是一个解决方案,但我不确定如果不紧密集成到 Mesos/Marathon 中这是否真的可以工作。当我想扩展时,我想一步完成。根据我对mesos.apache.org/documentation/latest/persistent-volume 的理解,需要为 Marathon 应用程序的每个实例创建一个持久卷,并且 Marathon 需要存储任务 id 和 pers 之间的映射。卷。 id(我假设在 ZooKeeper 中)。如果任务停止并重新启动,Marathon 需要从 ZooKeeper 获取 pv id 并自动将 pv 附加到任务的容器...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 2021-07-13
    • 2021-12-28
    相关资源
    最近更新 更多