
一、什么是Rook
Rook中文是”车”的意思,它本身不是云存储,Rook是一个自我管理的分布式存储编排系统,Rook在存储和Kubernetes之间搭建了一个桥梁,使存储系统的搭建或者维护变得特别简单,Rook将分布式存储系统转变为自我管理、自我扩展、自我修复的存储服务。它让一些存储的操作,比如部署、配置、扩容、升级、迁移、灾难恢复、监视和资源管理变得自动化,无须人工处理。同时Rook支持CSI,可以利用CSI做一些PVC的快照、扩容、克隆等操作。
Rook 构建在 Ceph 技术之上,利用 Ceph 的分布式存储和对象存储能力。Ceph 是一个开源的分布式存储系统,提供了可扩展性、高可用性和强一致性的存储解决方案。Rook 则通过将 Ceph 集成到 Kubernetes 中,提供了一种简单的方法来管理和部署 Ceph 存储集群。
Rook 的目标是简化 Kubernetes 上的存储管理,通过将存储服务作为 Kubernetes 的扩展来提供,为应用程序提供持久化存储功能。
Rook 支持多种存储类型,包括块存储、文件系统和对象存储。块存储可以用于需要直接访问磁盘的应用程序,文件系统可以提供共享存储访问,而对象存储则适用于大规模、可扩展的数据存储需求。
说明:目前已更新至1.11版本
二、Rook出现背景
在公司内部,除了生产环境并没有一个多余的Ceph集群,因为建立Ceph集群不仅需要大量的服务器资源,本身的复杂度也需要人力成本。但是在企业内部使用Kubernetes时,无论是在部署业务服务还是中间件服务,都能很明显地体会到Kubernetes的便利性和强大之处,所以我们在企业内部使用Kubernetes时,同时也会把中间件服务(比如MySQL、RabbitMQ、Zookeeper等)部署在Kubernetes集群中。相对于生产环境,也需要保留它们的数据,但是非生产环境可能并没有现成的存储平台供Kubernetes使用,新建一个平台供其使用也会浪费很多精力。
为了解决非生产环境的数据持久化问题,很多公司都采用了NFS作为后端,但是一旦使用的容器较多或者存储的数据量比较大,就容易造成性能问题,并且NFS服务器一旦出现问题,整个数据可能会全部丢失,所以在非生产环境也需要一个高可用、分布式并且免运维的存储平台,于是Rook就诞生了。
三、Rook特点有哪些
Rook具有以下特点:
- 可扩展性:Rook 利用 Ceph 的分布式架构,可以方便地扩展存储容量和性能,以满足不断增长的存储需求
- 高可用性:Rook 通过复制和故障转移机制提供高可用性存储,确保数据的安全性和持久性
- 灵活性:Rook 支持多种存储类型和存储策略,可以根据应用程序的需求选择适当的存储方式
- 集成性:Rook 与 Kubernetes 紧密集成,利用 Kubernetes 的强大编排和调度功能来管理存储资源
- 易用性:Rook 提供了简化的资源定义和管理接口,使用户能够轻松地创建、扩展和管理存储集群
- 活跃的社区:Rook 是一个活跃的开源项目,拥有庞大的社区支持和贡献者,不断改进和完善
- 数据保护:Rook 提供了数据保护功能,包括快照和备份,可以帮助用户实现数据的可靠性和恢复性
- 动态调整:Rook 允许用户在运行时动态调整存储资源,包括容量、性能和存储策略的调整,而无需停止或重启应用程序
- 多租户支持:Rook 支持多租户环境,可以在同一个 Kubernetes 集群中为不同的用户或团队提供独立的存储空间和访问控制
- 生态系统整合:Rook 与 Kubernetes 生态系统中的其他工具和项目无缝集成,例如 Prometheus、Grafana 等,可以实现存储集群的监控和可视化
- 持续发展:Rook 是一个活跃的开源项目,持续发展和改进。它拥有广泛的社区支持和开发者社区,不断推出新的功能和增强
四、Rook架构
Rook 通过在 Kubernetes 集群中运行 Ceph,Kubernetes 应用程序可以挂载由 Rook 管理的块设备和文件系统,或者可以使用 S3/Swift API 进行对象存储。Rook 操作员可自动配置存储组件并监控集群,以确保存储保持可用且正常运行。
Rook Operator 是一个简单的容器,拥有引导和监控存储集群所需的一切。操作员将启动和监控Ceph 监控 pod、Ceph OSD 守护进程以提供 RADOS 存储,以及启动和管理其他 Ceph 守护进程。Operator 通过初始化 Pod 和运行服务所需的其他资源来管理池、对象存储 (S3/Swift) 和文件系统的 CRD。
操作员将监控存储守护进程以确保集群健康。Ceph mon 将在必要时启动或进行故障转移,并随着集群的增长或收缩而进行其他调整。操作员还将监视 Ceph 自定义资源 (CR) 中指定的所需状态更改并应用更改。
Rook 会自动配置 Ceph-CSI 驱动程序以将存储安装到您的 Pod。该rook/ceph映像包含管理集群所需的所有工具。Rook 不在 Ceph 数据路径中。许多 Ceph 概念(例如放置组和挤压图)都是隐藏的,因此您不必担心它们。相反,Rook 在物理资源、池、卷、文件系统和存储桶方面为管理员创建了简化的用户体验。需要时可以使用 Ceph 工具应用高级配置。

针对上图中的组件进行说明:
- Rook Operator(蓝色层):Operator自动化Ceph的配置
- CSI 插件和配置程序(橙色层):Ceph-CSI 驱动程序提供卷的配置和安装
- Ceph 守护进程(红色层):Ceph 守护进程运行核心存储架构
上面显示了三种支持的存储类型的示例应用程序:
- 块存储用蓝色应用程序表示,该应用程序已
ReadWriteOnce (RWO)安装卷。应用程序可以读取和写入 RWO 卷,而 Ceph 管理 IO - 共享文件系统由两个共享 ReadWriteMany (RWX) 卷的紫色应用程序表示。两个应用程序都可以同时主动读取或写入该卷。Ceph 将通过 MDS 守护进程确保多个写入者的数据得到安全保护
- 对象存储由橙色应用程序表示,可以使用标准 S3 客户端读取和写入存储桶
说明:生产集群必须具有三个或更多节点才能实现弹性存储平台
上图中块存储类型(蓝色)创建具有 RWO 卷的应用程序的流程:
- 应用程序创建 PVC 来请求存储
- PVC 定义了用于配置存储的 Ceph RBD 存储类 (sc)
- K8s 调用 Ceph-CSI RBD 配置程序来创建 Ceph RBD 映像
- kubelet 调用 CSI RBD 卷插件来挂载应用程序中的卷
- 该卷现在可供读取和写入
说明:ReadWriteOnce 卷一次可以安装在一个节点上
上图中共享文件系统类型(紫色)创建具有 RWX卷的应用程序的流程:
- 应用程序创建 PVC 来请求存储
- PVC 定义了用于配置存储的 CephFS 存储类 (sc)
- K8s调用Ceph-CSI CephFS配置器创建CephFS子卷
- kubelet 调用 CSI CephFS 卷插件来挂载应用程序中的卷
- 该卷现在可供读取和写入
说明:ReadWriteMany 卷可以安装在多个节点上供应用程序使用
上图中共享文件系统类型(橙色)创建可访问 S3 存储桶的应用程序的流程:
-
应用程序创建一个 ObjectBucketClaim (OBC) 来请求存储桶
-
Rook 操作员创建一个 Ceph RGW 存储桶(通过 lib-bucket-provisioner)
-
Rook 操作员使用访问存储桶的凭据创建一个密钥,并创建一个包含存储桶信息的配置映射
- 应用程序从机密中检索凭据
- 该应用程序现在可以使用 S3 客户端读取和写入存储桶







暂无评论内容