我正在 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的问题:
- How to use volumes-from in marathon
- Docker on Mesos: Volume is placed on which node?
- Docker volume plugin marathon
不幸的是,它并没有真正解决这个具体问题。
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_1
、mongo_2
等)来运行多实例作业(例如具有副本集的 MongoDB)。
将这些部分组合在一起并非易事,但我很乐意提供帮助。如果您愿意,我可以专门为您的堆栈(Ceph + CoreOS + Docker + Mesos + Marathon)编写详细指南。
关于docker - 如何使用 Docker 卷作为 Mesos/Marathon 的持久卷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35012960/