我需要在CoreOS集群上运行某种分布式文件系统。
因此,我想在CoreOS节点上运行HDFS。这可能吗?
我可以看到2个选项;
- 扩展CoreOS-将HDFS直接安装到CoreOS上-这并不理想,因为它打破了CoreOS容器化的整个概念,意味着要安装许多额外的组件
- 以某种方式在CoreOS上的Docker容器中运行HDFS并设置亲缘关系
选项2似乎是最好的方法,然而,也有一些潜在的阻碍因素;
- 如何将物理磁盘可靠地暴露给运行HDFS的Docker容器
- 如何扩展容器亲和力
- 这对Name节点等是如何工作的
干杯。
我将尝试提供两种可能性。这两种我都没试过,所以大部分都是建议。但可以让你走上正确的道路。
第一种方法是,如果您想执行HDFS,并且它需要对主机进行设备访问,则在可以访问所需主机设备(直接访问磁盘)的特权容器中运行HDFS守护进程。看见https://docs.docker.com/reference/run/#runtime-特权linux功能和lxc配置以获取有关--privileged
和--device
标志的信息。
理论上,您可以将设备传递给处理磁盘访问的容器。然后你可以用--link
之类的东西互相交谈。NameNode将使用卷(与-v
一起传递)在主机上存储元数据。不过,考虑到我对NameNode所做的少量阅读,似乎还没有一个好的高可用性解决方案,而且这只是一个单一的故障点。
如果您正在寻找集群文件系统,而不是HDFS,那么第二个要探索的选项是查看最近添加到CoreOS 471.1.0内核中的Ceph FS支持:https://coreos.com/releases/#471.1.0.然后,您可能能够使用特权容器访问主机磁盘的相同方法来构建Ceph FS集群。然后,您可能有一个"仅数据"容器,该容器安装了Ceph工具以在Ceph FS集群上装载目录,并将其作为卷公开给其他容器使用。
虽然这两个都只是想法,我个人还没有使用HDFS或Ceph(尽管我一直在关注Ceph,并希望尽快尝试这样的东西作为概念的证明)。