Skip to content

Rook 云原生存储编排系统(基于 Ceph) ​

作者: ryan 发布于: 2025/11/18 更新于: 2025/11/18 字数: 0 字 阅读: 0 分钟

1.简介 ​

Rook 是一个开源的云原生存储编排器,由云原生计算基金会(CNCF)托管,属于毕业级项目。它通过 Kubernetes Operator 模式,将 Ceph 等分布式存储系统无缝集成到 Kubernetes 环境中,简化存储的部署、配置、扩展和维护。Rook 的核心目标是提供自动化、动态的存储管理,使开发者无需深入了解底层存储技术即可在云原生环境中使用高可用存储。

  • 支持的存储后端:主要支持 Ceph,也支持 NFS、Cassandra 等(以 Ceph 为主)
  • 项目背景:
    • 2016 年启动,2018 年 Ceph Operator(Rook v0.9)发布稳定版本。
    • 广泛应用于生产环境,社区活跃,CNCF 毕业标志其成熟性。
Rook Components on Kubernetes

二、核心组件与架构 ​

架构 ​

Rook 的架构是模块化的,主要分为四个层面:Rook Operator(自动化管理层)、CSI 驱动(存储接口层)、Ceph 守护进程(核心存储层)和 Rook 代理(节点级操作层)。这些组件协同工作,确保存储服务的可靠性和可扩展性。

Rook Components on Kubernetes

​

Rook Operator (自动化管理层) ​

Rook Operator 是 Rook 架构的核心组件,负责自动化管理存储集群的生命周期。它运行在 Kubernetes 集群中,作为一个控制器,监听用户定义的存储资源(如 CephCluster CRD),并根据这些配置协调存储系统的部署、配置、升级和故障恢复。

核心功能 ​

  • 集群初始化:根据用户通过 Custom Resource Definition(CRD)定义的 CephCluster 资源,自动部署 Ceph 集群,包括配置存储节点、初始化 Ceph 组件(如 MON、MGR 等)。

  • 自动化运维:监控 Ceph 集群的状态,执行自动扩展(scale-out)、故障恢复(如 OSD 失败后重新分配)、配置更新等任务。

  • 升级管理:支持 Ceph 和 Rook 的滚动升级,减少对存储服务的干扰。

  • 资源协调:与 Kubernetes 的调度器协作,确保 Ceph 组件(如 MON、OSD)以 Pod 形式合理分布在集群节点上。

实现方式 ​

Rook Operator 是一个 Go 语言编写的 Kubernetes Operator,利用 Kubernetes 的控制器模式运行。

它通过 Kubernetes API 监听 CRD(如 CephCluster、CephBlockPool 等),并根据资源定义调用底层的 Ceph 管理工具来执行操作。Operator 还维护 Ceph 集群的状态信息,确保声明式配置与实际状态一致。

CSI 驱动(存储接口层) ​

CSI(Container Storage Interface)驱动是 Rook 与 Kubernetes 存储生态系统之间的桥梁,负责将 Rook 管理的存储资源(如 Ceph 的块存储、文件系统或对象存储)暴露给 Kubernetes 工作负载。

功能 ​

  • 动态存储分配:支持 Kubernetes 的动态卷分配(Dynamic Provisioning),根据 PVC(Persistent Volume Claim)自动创建存储卷。
  • 存储操作:实现 CSI 标准接口,包括创建、删除、挂载、卸载、快照和扩展存储卷等功能。
  • 存储类型支持:
    • 块存储(RBD):提供高性能的块设备,适合数据库等应用。
    • 文件存储(CephFS):提供共享文件系统,适合多 Pod 共享数据。
    • 对象存储(RGW):通过 S3 兼容接口提供对象存储。

实现方式 ​

  • Rook 集成了 Ceph 的 CSI 驱动,以 DaemonSet 或 Deployment 的形式运行在 Kubernetes 集群中。
  • CSI 驱动包括:
    • Controller Plugin:处理存储卷的创建、删除、快照等全局操作。
    • Node Plugin:在每个节点上运行,负责存储卷的挂载、卸载等本地操作。
  • Rook 的 CSI 驱动通过 gRPC 与 Kubernetes 的 CSI 控制器通信,并调用 Ceph 的原生接口(如 librbd、libcephfs)来操作底层存储。

Ceph 守护进程(核心存储层) ​

Ceph 守护进程(Daemon)是 Rook 管理的核心存储组件,构成了实际存储数据的分布式存储系统。Rook 通过 Kubernetes 运行和管理 Ceph 的核心进程(如 MON、OSD、MGR、MDS、RGW)。

功能 ​

  • 核心存储:提供分布式存储服务:

    • MON(Monitor):维护集群状态、配置和一致性。
    • OSD(Object Storage Daemon):管理物理存储设备,处理数据存储和复制。
    • MGR(Manager):提供集群管理和监控功能(如仪表盘、REST API)。
    • MDS(Metadata Server):为 CephFS 文件系统提供元数据服务。
    • RGW(RADOS Gateway):提供 S3 兼容的对象存储接口。
  • 数据可靠性:通过副本或纠删码(Erasure Coding)实现数据冗余和高可用性。

  • 可扩展性:支持动态添加或移除存储节点,适应大规模存储需求。

实现方式 ​

  • Rook 将每个 Ceph 守护进程以 Pod 形式运行在 Kubernetes 集群中,Pod 的调度由 Kubernetes 管理。
  • Rook Operator 根据 CephCluster CRD 配置,自动部署和管理这些守护进程。例如:
    • 在指定节点上运行 OSD Pod,绑定到特定磁盘设备。
    • 确保 MON Pod 分布在不同节点以保证高可用性。
  • Rook 使用 Ceph 的原生工具(如 cephadm 或直接调用 Ceph CLI)来初始化和配置守护进程。

Rook 代理(节点级操作层) ​

Rook 代理(Rook Agent)是一个运行在每个 Kubernetes 节点上的轻量级组件,负责节点级的存储相关操作,增强 Rook 与节点本地资源的交互。

功能 ​

  • 设备发现:自动发现节点上的可用存储设备(如磁盘、SSD),并将信息报告给 Rook Operator。
  • 设备管理:协助 Rook Operator 初始化和管理存储设备(如格式化磁盘、创建 OSD)。
  • 本地操作:执行与存储相关的本地任务,如挂载 Ceph 卷、清理设备等。
  • 监控与维护:收集节点级别的存储状态信息,辅助 Operator 进行故障检测和恢复。

实现方式 ​

  • Rook 代理以 DaemonSet 形式部署,确保每个 Kubernetes 节点上都有一个代理实例。
  • 代理通过与 Rook Operator 的通信,获取节点级任务指令,并调用底层系统工具(如 lsblk、mkfs)或 Ceph 命令来执行操作。
  • 代理与 CSI 驱动的 Node Plugin 协作,共同完成存储卷的挂载和卸载。

层间协作架构 ​

Rook 的四个层面通过 Kubernetes 的资源管理和事件驱动机制紧密协作,形成一个高效的存储编排系统:

  1. 用户交互:用户通过 Kubernetes API 提交 CRD(如 CephCluster、CephBlockPool),定义存储需求。
  2. Rook Operator:Operator 监听 CRD 变化,调用 Ceph 工具部署守护进程,并协调 CSI 驱动和代理。
  3. CSI 驱动集成:CSI 驱动将 Ceph 存储资源暴露给 Kubernetes 应用,处理 PVC 和 PV 的生命周期。
  4. Rook 代理:代理在节点级别执行设备管理和本地操作,确保 Operator 的指令落地。
  5. Ceph 核心:Ceph 守护进程提供分布式存储功能,保证数据高可用性和可靠性。
  6. Kubernetes API:作为事件驱动和资源管理的核心,连接各组件。
text
[用户交互]                                   (Kubernetes API)
       |                                       |
       v                                       v
[提交 CRD:CephCluster, CephBlockPool] ----> [Rook Operator]
       |                                       |
       |<-------------------------------------| (监听 CRD 变化)
       v                                       v
       |                                  [部署 Ceph 守护进程]
       |                                       |
       |                                       v
       |                                  [协调 CSI 驱动]
       |                                       |
       v                                       v
[CSI 驱动集成] <---------------------------|
       |                                       |
       | (暴露 Ceph 资源,管理 PVC/PV 生命周期)
       v                                       v
       |                                  [Rook 代理]
       |                                       |
       |<-------------------------------------| (执行设备管理和本地操作)
       v                                       v
[Ceph 核心] <------------------------------|
       |
       | (提供分布式存储,确保数据高可用性和可靠性)
       v
[存储服务]