Ceph RBD与Docker卷的集成

3
我刚在两台不同的服务器上初始化了一个 ceph 实例。
cluster 241b5d19-15f5-48be-b98c-285239d70038
 health HEALTH_WARN
        64 pgs degraded
        64 pgs stuck degraded
        64 pgs stuck unclean
        64 pgs stuck undersized
        64 pgs undersized
 monmap e3: 2 mons at {serv1=10.231.69.9:6789/0,serv2=10.231.69.34:6789/0}
        election epoch 6, quorum 0,1 serv1,serv2
    mgr no daemons active
 osdmap e10: 2 osds: 2 up, 2 in
        flags sortbitwise,require_jewel_osds,require_kraken_osds
  pgmap v22: 64 pgs, 1 pools, 0 bytes data, 0 objects
        68292 kB used, 1861 GB / 1861 GB avail
              64 active+undersized+degraded

只使用 monosd(我没有设置 mdsrgwCephFS),我希望使用 rbd 创建容器卷的持久共享存储,但是我真的不知道如何将我的 osd 插入 docker。我看到一些 rbd docker 插件存在:
  1. https://github.com/yp-engineering/rbd-docker-plugin
  2. https://github.com/AcalephStorage/docker-volume-ceph-rbd
  3. https://github.com/contiv/volplugin
但是似乎没有一个与最新的 docker 版本兼容或至少 >= 1.13。
因此,我在思考如何实现我想要的,有些解决方案浮现在脑海中,但我真的不确定哪个是最好的(甚至是否可能)。
  1. 使用 CephFS + 标准 docker 文件系统挂载卷
  2. 使用 rexrayflocker 不再维护)
  3. 安装 Ceph Object Gateway S3 并使用现有的 docker S3 插件
  4. 其他?
但是第一种解决方案似乎不太优雅,在更大的环境中(超过 2 台服务器)管理起来更困难。而第二种解决方案似乎是一个很好的起点,但是否有任何反馈?
2个回答

2
  1. 你可以使用v2插件扩展Docker引擎以支持RBD卷。

RBD Docker卷插件可与Docker引擎v2插件系统一起使用(我们在Swarm集群中使用它)。

以下是自Readme中的摘录:

安装插件:

docker plugin install wetopi/rbd \
  --alias=wetopi/rbd \
  LOG_LEVEL=1 \
  RBD_CONF_POOL="ssd" \
  RBD_CONF_CLUSTER=ceph \
  RBD_CONF_KEYRING_USER=client.admin

创建一个卷:

docker volume create -d wetopi/rbd -o size=206 my_rbd_volume

docker volume ls
DRIVER              VOLUME NAME
local               069d59c79366294d07b9102dde97807aeaae49dc26bb9b79dd5b983f7041d069
local               11db1fa5ba70752101be90a80ee48f0282a22a3c8020c1042219ed1ed5cb0557
local               2d1f2a8fac147b7e7a6b95ca227eba2ff859325210c7280ccb73fd5beda6e67a
wetopi/rbd          my_rbd_volume

使用rbd卷运行容器:

docker run -it -v my_rbd_volume:/data --volume-driver=wetopi/rbd busybox sh

阅读了这个卷驱动程序的自述文件后,我仍然不明白如何使用该驱动程序。我的意思是它不能允许将同一卷挂载到三个副本中去,那么这个驱动程序的意义是什么呢?拥有无法扩展的状态应用程序根本行不通。 它只需要在ceph共享中的同一个文件夹中挂载卷即可,ceph会自己处理写锁。 如果您想要生产级部署,所有副本都必须能够同时读取卷。 - holms

1
根据您提供的ceph -s输出,似乎您创建了一个拥有2个节点和1个OSD的ceph集群。默认情况下,ceph使用3个副本(replications)大小,这是推荐值。您可以将大小更改为2,最小值更改为1,但除非数据对您毫无价值,否则认为除了作为ceph游乐场之外,使用此设置进行任何其他操作都是不明智的。

ceph应至少在具有相同配置的3个节点上运行。相同包括:CPU、RAM、OSD计数(每个CPU核心一个OSD)。对于中等流量,将mon置于这三个节点上也可以。强烈建议使用10GBit节点互连。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接