Rook v1.19 存储增强技术分析
发布概述
Rook v1.19 版本正式发布,这是又一个功能丰富的版本,旨在提升 Kubernetes 存储体验。Rook 作为 CNCF 托管项目,在社区中被广泛使用,GitHub 星标超过 1.33 万,Slack 成员和 X 关注者数量持续增长。
系统架构
Rook v1.19 在 Kubernetes 存储编排中的核心架构如下:

从架构图中可以看出,Rook v1.19 通过以下组件协同工作:
- Ceph CSI 驱动 v3.16:作为 Kubernetes 与底层存储的桥梁
- NVMe-oF Gateway:提供基于 NVMe/TCP 协议的高性能块存储访问
- 并发集群对齐:支持多个 Ceph 集群的并发管理
核心新功能
1. NVMe-oF Gateway(实验性)
NVMe over Fabrics(NVMe-oF)允许通过 NVMe/TCP 协议访问 RBD 卷。这是 Rook v1.19 最重要的新功能之一。
技术原理
NVMe-oF Gateway 架构如下:
- Ceph RBD 卷通过 NVMe-oF Gateway 暴露
- 集群内 Pod和集群外客户端都能使用标准 NVMe-oF 发起器连接
- 数据传输基于NVMe/TCP 协议,实现网络上的高性能块存储访问
技术背景
- Ceph 从 Tentacle 版本开始支持 NVMe-oF
- 字节跳动基础架构团队在 2021 年 11 月向 Kubernetes CSI 社区捐赠了 NVMe-oF CSI 驱动(csi-driver-nvmf)
- Rook v1.19 完成了初步集成,但目前仍处于实验模式
性能优势
根据 IBM 的对比分析,NVMe-oF 相比传统 RBD 具有:
- 更低的存储栈开销
- 接近本地 NVMe 的性能特征
- 低延迟和高吞吐量
当前限制
- 实验性质:尚未达到生产稳定阶段
- 需要时间打磨:社区欢迎用户测试并反馈
2. Ceph CSI 3.16 集成
Ceph CSI v3.16 带来了 RBD、CephFS、NFS 驱动的多项改进。
配置模式
Rook v1.19 继续支持两种配置模式:
- Ceph CSI Operator 模式:Rook 自动配置 Ceph CSI Operator
- 直接配置模式:Rook 直接管理 CSI 驱动配置
新特性
- 基于 NVMe-oF 协议的 CSI 驱动:支持卷的动态创建和挂载
- 节点故障隔离改进:RBD 和 CephFS 卷在节点故障时的隔离
- 块卷使用统计:提供块卷的使用情况统计
- 可配置的块加密算法:支持不同的加密算法选择
3. 并发集群对齐(Concurrent Cluster Reconciles)
问题背景
在 v1.19 之前,如果一个 Kubernetes 集群里配置了多个 Ceph 集群,Rook 会串行对齐它们。如果某个集群出现健康问题,会阻塞后续集群的对齐操作。
解决方案
Rook v1.19 引入并发对齐功能:
- 启用方式:设置
ROOK_RECONCILE_CONCURRENT_CLUSTERS(或 Helm 中的reconcileConcurrentClusters)为大于 1 的值 - 资源调整:如果给 Operator 配置了资源请求和限制,可能需要提升以支持并发
- 实验性质:目前标记为实验性质,因为并发测试较为困难
日志改进
并发对齐时,Operator 日志会混合显示多个集群的日志。Rook v1.19 已将日志加入命名空间和集群名,便于排查问题。
破坏性变更
CephFS 行为变化
CephFilesystem CRD 中的 activeStandby 属性行为改变:
- v1.19 之前:设为 false 时,备用 MDS 守护进程保留但禁用备用缓存
- v1.19:设为 false 时,备用 MDS 守护进程会被缩容并删除
Helm 配置调整
rook-ceph-cluster Chart 中 Ceph 镜像的定义方式调整:
- 允许分开配置仓库地址和标签
- 升级时若之前在
cephClusterSpec里指定了 Ceph 镜像,需移除并改用新配置项
外部集群模式变更
外部模式下,如果指定了 Ceph 管理 keyring:
- v1.19 之前:Rook 自动创建 CSI Ceph 客户端
- v1.19:CSI 客户端 keyring 仅由外部 Python 脚本创建,避免重复
版本支持
Ceph 版本
| 版本 | 支持状态 | 说明 |
|---|---|---|
| Reef v18 | 已移除 | 到达生命周期末期 |
| Squid v19 | 支持 | 当前支持版本 |
| Tentacle | 支持 | 当前支持版本(含 NVMe-oF 支持) |
Kubernetes 版本
- 支持范围:v1.30 至 v1.35
- CI 测试:针对这些版本进行测试确保兼容性
- 旧版本:Rook 仍可运行,但没有测试保障
影响分析
对用户的影响
- 性能提升:NVMe-oF Gateway 提供了接近本地 NVMe 的网络块存储性能
- 可靠性增强:节点故障隔离改进提高了存储系统的稳定性
- 运维效率:并发集群对齐避免了单个集群问题影响其他集群的管理
对架构的影响
- 存储分层:NVMe-oF 引入了新的存储访问层,需要重新思考存储架构设计
- 多集群管理:并发对齐使得在单个 Kubernetes 集群中管理多个 Ceph 集群更加可行
升级建议
- Ceph Reef 用户:必须先升级到至少 Squid v19,再升级 Rook
- Helm 用户:检查并更新 Ceph 镜像配置
- CephFS 用户:注意
activeStandby行为变化 - 生产环境:NVMe-oF 仍为实验性质,建议先在测试环境验证
未来展望
Rook 团队表示将继续致力于打造稳定可靠的 Kubernetes 存储操作器。社区反馈是推动项目发展的关键动力。
用户和开发者都可以通过以下方式参与:
- 分享使用经验:访问 Adopters 页面提交信息
- 测试新功能:特别是 NVMe-oF Gateway 和并发集群对齐
- 提供反馈:通过 GitHub Issues 或社区渠道反馈问题
参考资料
- Rook v1.19.0 Release Notes - GitHub
- NVMe-oF Block Storage - Rook Documentation - 官方文档
- Ceph NVMe-oF Gateway - Ceph 官方文档
- Ceph NVMe-oF Gateway Requirements - Ceph 官方文档
- Ceph NVMe over Fabrics Gateway - GitHub - Ceph 项目仓库
- Add NVMe-oF support for Rook · Issue #15551 - GitHub Issue
- Ceph Block Storage Showdown: RBD vs. NVMeoF - IBM Community
- 字节跳动基础架构团队向 K8S CSI 社区捐赠云原生存储方案 - CSDN
- Rook v1.18 Storage Enhancements - Rook Blog
- Rook GitHub Repository - GitHub