docker - 如何使用 Docker 卷作为 Mesos/Marathon 的持久卷?

标签 docker cluster-computing mesos mesosphere docker-volume

我正在 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的问题:

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

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

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

最佳答案

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

Flocker 通过提供集群范围内的卷名称命名空间来实现此目的,然后可以通过 Docker 的 Flocker 插件与 Marathon 使用这些名称,为 Mesos 集群中的有状态容器提供可移植性和高可用性。

Flocker 还有一个 Ceph 驱动程序:

  • Google“Flocker Ceph 驱动程序”

并且适用于 CoreOS:

  • Google“CoreOS 演示上的Flocker”

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

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

关于docker - 如何使用 Docker 卷作为 Mesos/Marathon 的持久卷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35012960/

相关文章:

docker - 无法在 Linux 上使用 ElasticSearch 映射 logstash

wordpress - 如何在 docker 上创建多个 wordpress 站点

docker - 当存储库有两个 Docker 镜像(客户端和服务器)时,将 Docker 镜像推送到 Gitlab Registry

hadoop - 熟悉Hadoop Kubernetes

c++ - 什么是 internal::state::Entry 以及它在 mesos 中定义的位置

docker - gitlab-ci 如何在内部与 gitlab runner 一起工作?

apache-spark - Spark-如何在本地运行独立集群

Mysql cluster 7.2.2忽略设置和TABLE IS FULL错误

docker - 在Mesos/Marathon中设置默认的 `docker run`参数

apache-kafka - Mesos DCOS 未安装 Kafka