2. Ceph 版本体系与 Rook 映射关系
在生产环境中,Ceph 版本与 Rook 版本的匹配关系是存储集群稳定运行的基石。版本漂移(即 Rook 与 Ceph 版本不匹配)会导致 CRD 兼容性问题、存储池参数无法生效,甚至集群不可用。本节将系统梳理 Ceph Quincy/Reef/Squid 三大版本的特性差异,Rook v1.12/v1.13/v1.14 的映射表,以及通过 Operator 镜像确认当前版本的标准方法。
2.1 Ceph 三大版本特性差异
Ceph 从 Quincy(17.x)到 Reef(18.x)再到 Squid(19.x),在存储池管理、性能优化和协议支持方面均有显著演进。下表从运维视角对比核心差异:
| 特性维度 | Quincy (17.x) | Reef (18.x) | Squid (19.x) |
|---|---|---|---|
| 发布年份 | 2022 | 2023 | 2024 |
| 存储池类型 | 传统 PG + 纠删码 | 新增 pool autoscale 增强 |
默认启用 pg_autoscale_mode = on |
| BlueStore 优化 | 基础压缩/校验 | 新增 bluefs_buffered_io 动态调整 |
SPDK 集成,NVMe 卸载 |
| RADOS 协议 | v1/v2 混合 | v2 默认,v1 弃用 | 仅 v2,移除 v1 兼容层 |
| CRUSH 算法 | straw2 / tree | 新增 straw2-v2 优化 |
默认 straw2-v2,支持 weight-set |
| 安全特性 | cephx 基础认证 | msgr2 加密传输强制 | FIPS 140-3 合规 |
| 存储池参数调优 | 手动 osd_pool_default_size |
支持 target_size_ratio 动态调整 |
新增 pg_num_max 上限保护 |
运维提示: 如果集群当前运行 Quincy,计划升级到 Squid,必须经过 Reef 中间版本。直接跨版本升级会导致 OSD 无法启动,且存储池参数(如
pg_num)可能被重置。
2.2 Rook 与 Ceph 版本映射表
Rook 每个版本都绑定一个 Ceph 主版本,并向后兼容一个次要版本。以下为 v1.12/v1.13/v1.14 的官方映射关系:
| Rook 版本 | 默认 Ceph 版本 | 支持的最低 Ceph 版本 | 支持的最高 Ceph 版本 | 关键 CRD 变更 |
|---|---|---|---|---|
| v1.12 | Quincy (17.2.6) | Quincy (17.2.0) | Reef (18.2.0) | 引入 CephBlockPoolRadosNamespace |
| v1.13 | Reef (18.2.0) | Quincy (17.2.6) | Squid (19.1.0) | 弃用 pool.spec.erasureCoded 旧字段 |
| v1.14 | Squid (19.1.0) | Reef (18.2.0) | Squid (19.2.0) | 新增 pg_num_max 参数支持 |
版本漂移风险: 使用 Rook v1.12 管理 Squid 集群时,
pg_num_max 参数无法通过 CRD 下发,必须手动执行 ceph osd pool set 命令。这种“半自动”状态极易导致存储池参数不一致。
2.3 通过 Operator 镜像确认当前版本
在生产环境中,确认当前 Rook 和 Ceph 版本的标准方法是检查 rook-ceph-operator 的容器镜像标签。以下是具体步骤:
- 获取 Operator Pod 名称:
kubectl get pods -n rook-ceph | grep operator - 查看镜像版本:
kubectl get pod rook-ceph-operator-xxxxx -n rook-ceph -o jsonpath='{.spec.containers[0].image}' - 解析版本信息:
输出示例:
rook/ceph:v1.14.3,其中v1.14.3即为 Rook 版本。Ceph 版本可通过以下命令确认:kubectl exec -n rook-ceph deploy/rook-ceph-tools -- ceph version
版本校准检查清单:
- Rook 版本与 Ceph 版本是否在映射表范围内?
- Operator 镜像标签是否与 CRD 版本一致?
- 存储池参数(如
pg_num、size)是否与 Ceph 版本特性匹配?
2.4 版本漂移校准流程
当发现版本不匹配时,应按照以下流程进行校准。下图展示了从检测到修复的完整链路:
2.5 版本漂移常见场景与处理
| 场景 | 现象 | 处理方案 |
|---|---|---|
| Rook v1.12 + Ceph Reef | CRD 中 target_size_ratio 不生效 |
升级 Rook 到 v1.13+,或手动执行 ceph osd pool set |
| Rook v1.13 + Ceph Squid | pg_num_max 参数无法通过 CRD 下发 |
升级 Rook 到 v1.14,或使用 ceph config set 临时调整 |
| Rook v1.14 + Ceph Quincy | Operator 日志报 unsupported Ceph version |
降级 Rook 到 v1.12,或升级 Ceph 到 Reef/Squid |
最佳实践: 在规划存储池参数调优前,务必先完成版本校准。建议每季度检查一次 Rook 与 Ceph 的版本匹配状态,避免因版本漂移导致参数调优失败。