Rook: 自动化 Ceph 以便在 Kubernetes 上运行

tnielsen

Rook 是 Kubernetes 集群中运行的存储服务编排器。在 Rook v0.8 版本中,我们很高兴地宣布围绕 Ceph 的编排已经稳定到可以声明 Beta 状态的程度。如果您尚未开始使用 Rook 启动 Ceph 集群,现在是时候尝试一下了!

您可能想知道 Rook 是什么以及为什么您应该关心。Ceph 已经在生产集群中运行多年了,所以现在有什么大不了的?如果您之前管理过 Ceph 集群,您就会知道设置和维护存储集群所需的许多复杂性。Rook 现在将简化和自动化这些困难中的许多,利用 Kubernetes 作为分布式平台。

Rook 是使用 operator 实现的,这意味着您作为管理员只需要担心声明集群的“期望状态”。Rook operator 将监视您声明的设置,然后在集群中应用配置。operator 将管理的状态包括启动和运行集群以及保持其正常运行所需的一切。在本文中,我们将介绍 Rook 将为您管理的一些细节。

Mons

任何 Ceph 集群的第一个元素是监视器(或 mons)的法定数量。通常,集群中运行三个 mons。它们必须保持高度可用并维护其法定数量,否则集群中的数据将不可用。当您创建集群时,Rook 将

  • 在唯一的节点上启动 mons 并确保它们处于法定数量
  • 定期(每分钟)监视 mons,以确保它们保持法定数量。如果一个 mon 停止运行并且没有使用内置的 Kubernetes 机制自动重新启动,则 operator 将向法定数量添加一个新的 mon 并从法定数量中删除失败的 mon。
  • 在 mons 故障转移时,使用 mons 的 IP 地址更新客户端和 Ceph 守护程序

Mgr

mgr 是一个无状态服务,必须保持运行才能为集群提供指标和其他功能。除了启动 mgr 以实现其核心职责外,Rook 还配置了两个 mgr 插件以

  • 收集 prometheus 指标(如果 prometheus 在集群中运行)
  • 运行 Ceph 仪表板,包括连接到它的服务端点

OSDs

集群中最具挑战性的部分通常是 OSD,即集群的核心存储组件。大型集群有很多 OSD,手动设置和监视它们是您不希望做的事情。Rook 将为您配置它们,具体取决于您希望对单个设备保留多少控制权。有关 OSD 可用设置的更多详细信息,请参阅此主题

完全自动化

Rook 初始化 OSD 的最简单方法是声明您希望“使用所有节点”和“使用所有设备”。这意味着 operator 将自动在 Kubernetes 集群中所有具有可用设备的节点上启动 OSD。Rook 发现可用设备并使用以下标准对其进行初始化

  • 该设备没有分区
  • 该设备没有格式化的文件系统

Rook 绝不会尝试消耗不满足该标准的设备。完成 operator 后,通常在几分钟内,您将拥有配置了所有 OSD 的存储集群。

完全声明式

配置 OSD 的第二种模式让您对要在集群中使用哪些节点和哪些设备拥有更多的控制权。有许多具有不同级别自动化控制的设置。

  • 节点
    • 声明要在其上启动 OSD 的特定节点列表
    • 使用 Kubernetes 放置结构来声明基于标签的一组节点
  • 设备
    • 声明要在其上启动 OSD 的单个设备名称
    • 声明要在其上启动 OSD 的设备名称的更通用的过滤器
    • 指定高性能 SSD 或 NVME 设备,用于为 bluestore 创建元数据分区,并将 bluestore 数据分区放在不同的设备上

这种模式让您完全控制将消耗哪些设备,同时为您处理初始化 OSD 的所有细节。

客户端访问

在 Kubernetes 中,需要存储的客户端将使用持久卷附加并挂载到 pod。Rook 提供了一个 FlexVolume 插件,可以轻松地让您的 pod 使用 Ceph 集群中的存储。您只需要声明一个带有要使用的池的存储类,然后在指向存储类的 pod 上声明一个 PVC。此示例将解释在 pod 中挂载 RBD 镜像的所有细节。

RGW

除了基本的 RADOS 集群之外,Rook 还会帮助您管理对象存储。当您声明希望在集群中拥有对象存储时,Rook 将

  • 创建对象存储的元数据和数据池
  • 启动 RGW 守护程序,如果需要,运行多个实例以提高可靠性
  • 创建一个 Kubernetes 服务,以在 RGW 守护程序之间提供负载均衡

完成了!对象存储在您的集群中可用。

MDS

最后但并非最不重要的一点是,Rook 将配置 CephFS 以便在您需要在集群中共享文件系统的情况下使用。当您声明希望在集群中拥有文件系统时,Rook 将

  • 创建 CephFS 的元数据和数据池
  • 创建文件系统
  • 使用所需的活动和待机实例数启动 MDS

现在,集群中的 pod 可以使用文件系统,可以通过共享 CephFS 中的相同路径或每个 pod 的独立路径。有关声明带有 Rook 卷插件的 Kubernetes 卷的此示例

Ceph 工具

即使有了所有的自动化,我们也知道您仍然需要访问完整的 Ceph 工具才能运行一些维护任务。随着添加的自动化越来越多,您应该越来越不需要这些工具。与此同时,如果您需要运行 Ceph 工具,您只需要启动工具箱,或者连接到现有的守护程序容器,例如 mon,以执行这些工具。

接下来是什么

Rook 运行所需的全部是配置存储的 Kubernetes 集群。Rook 的目标是让您的生活更轻松地配置存储。到目前为止,我们只是触及了可以使用自动化和简化 Ceph 管理的表面。

我们正在积极开发Rook 项目,并计划很快推出许多功能。我们希望您加入社区,并期待您的反馈。如果您有任何问题或反馈,请在 RookSlack中找到我们。 很快再见!