使用 Rook 评估 Ceph 部署

thingee

今年夏天我很幸运地被选中在 CERN 实习。作为 CERN openlab 夏季学生,我在 IT 存储组工作了九周,我的暑期项目是“使用 Rook 评估 Ceph 部署”。我之前有过为 Ceph 贡献代码的绝佳经历,作为 outreachy 实习生,所以这次也同样非常兴奋。

CERN 自 2013 年以来一直在使用 Ceph。除了运营最大的 Ceph 集群之一外,它还是 Ceph 社区的积极贡献者。CERN 从 Ceph 中受益匪浅,包括

  • OpenStack 镜像和卷 (RBD)
  • HPC 临时空间 (CephFS)
  • 私有 NFS 类似的文件共享 (CephFS)
  • 与 Amazon S3 兼容的对象存储 (RGW)

CERN 需要处理 PB 级的数据,因此一直在寻找简化其基于云的部署的方法。它一直在积极评估基于容器的方法,这些方法建立在其 Kubernetes 基础设施之上。最近引起关注的一项技术是 Rook;一种用于云原生环境的存储编排器。虽然 Ceph 已经满足了其存储用例多年,但如果能以某种方式减少其操作复杂性,那就更好了。CERN 目前使用 kickstartpuppet 来配置和管理 Ceph 部署,这会带来一些时间限制。由于最新的 Rook Ceph 集成处于 Beta 阶段,因此评估它以查看未来的 Ceph 集群是否可以使用此工具进行部署是合理的。具体来说,希望通过 Rook 改进以下方面

  • 减少新集群的部署时间。
  • 简化升级。
  • 更灵活的水平扩展。
  • 更好的故障容错性。
  • 减少对 Ceph 专家的依赖。

我的工作是在虚拟和物理环境中部署 Ceph 使用 Rook,并查看是否实现了上述改进。当 Rook 的最新版本 0.8 部署时,安装过程非常简单,在已经设置了 Kubernetes 环境的情况下,只需使用两个命令即可轻松部署。评估的一个重要方面是能够使用 ceph-mgr 的新的 Orchestrator CLI 模块来快速添加/删除 OSD、RGW 和 MDS 到正在运行的集群中。由于 Rook 的 v0.8 Docker 镜像当时没有发布 Ceph 的最新 master 版本,因此我不得不构建一个自定义的 Docker 镜像。

CERN 的云基础设施由 OpenStack 提供支持,因此虚拟环境由 OpenStack 的虚拟机组成,而物理环境由 OpenStack Ironic 管理的裸机服务器组成,每台服务器都有 48 个 5.5 TB 的磁盘。我的测试环境包括部署 S3 工作负载以收集评估指标,例如部署整个 Ceph 集群的时间、在集群中添加新服务(RGW、OSD、MDS)的时间、Ceph 升级的自动化以及整体集群的可靠性。

Rook 在这些评估指标方面并没有让我失望。新部署的 Ceph 集群可以在几分钟内准备好使用。在正在运行的集群中添加新的 OSD 只需要不到 2 分钟。添加 RGW 和 MDS 等服务也是如此。Rook 构建在 Kubernetes 之上,因此节点可靠性和改进的故障容错性成为首要功能。使用 Rook 后端的 Orchestrator CLI 使操作已部署的集群变得容易,特别是对于那些已经熟悉 Ceph CLI 的人来说。但是,Ceph 升级尚未自动化,并且 Rook 和 Ceph 版本之间存在耦合关系,这使得整体部署的灵活性降低。这些功能是即将发布的 Rook v0.9 版本的目标。

由于 CERN 庞大的基础设施,积极探索技术以使操作更快更容易是有意义的。在我看来,Rook 看起来是一个有希望的开源项目,旨在改善云环境中的存储。一旦实现了诸如自动化升级和支持解耦版本之类的功能,使用 Rook 和 Kubernetes 部署未来的 Ceph 集群将是一个好主意。该项目的成果将帮助 CERN 的人员决定是否应该采用 Rook 和 Kubernetes 来进行未来的 Ceph 部署。

本文最初由 Rubab Syed 贡献。