土法炼钢 · 系统与基础设施

【Rook / CSI】对照替代路径:云 CSI、Longhorn 与裸 Ceph/cephadm

文章导航

分类入口
storagekubernetes
标签入口
#rook#csi#longhorn#cloud-block#cephadm#comparison#v1.20.4

目录

前 13 篇把 PVC 从 StorageClass 讲到可观测与六轴排障。接下来的问题不是「Rook 功能全不全」,而是:什么时候这些编排税不值得付——云盘 CSI 已给出块设备、Longhorn 用另一套副本引擎、或裸机 Ceph 根本不想经 Kubernetes Operator。

本文不做延迟排行榜。跨方案延迟比较需要固定负载、硬件代际、副本策略与客户端路径;单个数字比较是口径欺骗。本文从机制分歧出发:每条路径赢在哪个前提,前提崩了代价是什么。云厂商 API 操作步骤不写;块存储产品机制见 storage/70;RADOS 相对 MinIO/云块/SPDK 见 ceph/17

本文是「Rook / CSI:K8s 上的 Ceph 编排内核」系列第 14 篇(共 16 篇)。→ 系列目录

篇目 核心内容
第 13 篇 · 排障坐标系 Pending / MountFailed / feature 静默失败
第 14 篇 · 对照替代路径 云 CSI / Longhorn / 裸 Ceph
第 15 篇 · 多租户与安全 Secret、加密、fencing

版本锚定:Rook v1.20.4 + Ceph-CSI v3.17.0;对照结论是机制判断,不绑定某一云厂商 API 修订号。Longhorn 仅作引擎级对照,不写版本百科。


一、对照维度的确定

四条路径的分歧不在「谁功能更多」,而在下列不变量:

维度 Rook + Ceph-CSI 云托管块 CSI Longhorn 裸 Ceph(cephadm 等)
数据面引擎 RADOS(PG/BlueStore) 厂商复制块 引擎副本 + 副本重建 同左 RADOS
控制面 Rook Operator + CSI Operator 云控制面 + 厂商 CSI Longhorn Manager/Engine cephadm/ceph orch
故障方言 PVC 六轴 + Ceph 五轴 云指标 + 有限事件 引擎/副本重建语义 仅 Ceph 五轴
多接口 RBD + CephFS +(RGW 入口) 通常纯块 块为主 同 Ceph 全接口
运维编制 K8s + Ceph 双栈 近零存储编制 K8s 内中等 Ceph 编制,无 Rook 税

本篇回答的是:编排层选哪条路。若问题其实是「要不要 RADOS」,应先走 ceph/17–18 的排除树,再决定是否在 K8s 上用 Rook 包一层。

flowchart TD
  q{"Need RADOS semantics\n(RBD/CephFS/RGW on one cluster)?"}
  q -->|"No"| cloudOrLh{"Primary need is\nK8s block PVC?"}
  cloudOrLh -->|"On public cloud VMs"| cloud["Cloud CSI\n(EBS/PD class)"]
  cloudOrLh -->|"On bare metal / VIH"| lh{"Accept engine-level\nreplication model?"}
  lh -->|"Yes"| longhorn["Longhorn-class"]
  lh -->|"No"| other["Other / local PV"]
  q -->|"Yes"| k8s{"Must lifecycle\nvia K8s Operators?"}
  k8s -->|"Yes"| rook["Rook + Ceph-CSI"]
  k8s -->|"No"| bare["cephadm / bare Ceph"]

二、对照云托管块 CSI(EBS / PD 类)

云 CSI 赢在的前提

机制要点(详见 storage/70):耐久性与故障切换收进厂商 SLA;用户看见的失败方言是云监控与有限 Events,没有 PG incomplete 或 BlueStore kv_sync_lat 这种可命名内核状态。

Rook+Ceph 赢在的前提

经典反模式(机制判据)

在公有云虚机里用云盘再做 Ceph OSD,再经 Rook 供给 PVC:云块延迟 + RADOS 税叠两层,且 peering/满盘/恢复全自担——ceph/17 已列为不应使用 Ceph 的情形之一。本篇补充编排视角:若已决定用云块,应走云 CSI,而不是「Rook 包一层心理安慰」。

不做的事:不写某一家 EnableVolume/AttachDisk 教程;不引用未标定的「EBS 比 RBD 快多少」截图。


三、对照 Longhorn(引擎级)

Longhorn 与 Rook-Ceph 都在 K8s 里用 CSI 暴露块设备,但副本与重建发生在不同引擎抽象上

机制问题 Rook + RBD/Ceph Longhorn(引擎级)
数据放置 CRUSH → PG → OSD 引擎在节点上维护副本;调度与副本放置跟 K8s 节点强绑定叙事
写确认 RADOS Primary + 副本/EC ACK 引擎层副本确认(实现细节随版本,不在此展开源码)
磁盘角色 OSD 守护进程长期持有设备 节点上磁盘/目录由 Longhorn 组件管理
文件/对象 CephFS/RGW 同集群 非同一套「三接口 RADOS」叙事
故障排障 六轴 + Ceph 五轴 引擎/副本重建/节点驱逐等 Longhorn 方言

Longhorn 赢在的前提

Rook+Ceph 赢在的前提

争论点:社区营销常把「K8s 上的分布式块」说成同一品类。机制上不是。Longhorn 与 Ceph 优化的是不同的故障与放置不变量;用同一张 IOPS 表打榜,会把引擎差异洗成噪声。本篇只要求 ADR 写清:选的是引擎,不是品牌同义词。

若团队已经在 Longhorn 上稳定跑纯块、且明确永远不需要 CephFS/RGW,为了「以后可能统一」再迁 Rook,通常是把未发生的接口需求贴现成当下的双方言税——排除树上应记为投机性迁入,除非有可检验的接口日程。

不写 Longhorn 安装菜谱、Helm values、或版本兼容矩阵全书。


四、对照裸 Ceph / cephadm(无 Rook)

数据面可以是同一个 Ceph;分歧几乎全在控制面谁拥有生命周期

机制问题 Rook + CSI 裸 Ceph(cephadm/ceph orch)
mon/osd 部署 CephCluster reconcile cephadm 服务规格 / 手工
升级闸门 Rook 文档 + Ceph 主版本纪律(第 11 篇) ceph orch / 发行版手册
PVC Ceph-CSI(v1.20 经 CSI Operator) 可仍用 Ceph-CSI,或非 K8s 客户端
密钥与 endpoint 分发 K8s Secret / CSI config cephx 密钥环文件、conf
观测入口 toolbox + ServiceMonitor + PVC Events ceph CLI + mgr;无 PVC 六轴

裸 Ceph 赢在的前提

Rook 赢在的前提

工程间隙:裸 Ceph + 外部 Ceph-CSI 仍然要付 CSI features、Snapshot CRD、Secret 管理税——只是去掉了 Rook Operator。排除树上「不要 Rook」≠「不要 CSI」;也不等于「不要 Ceph」。


五、机制差异总表(分歧点,非功能清单)

机制问题 Rook+Ceph-CSI 云 CSI Longhorn 裸 Ceph
谁保证跨节点耐久 RADOS 云控制面 引擎副本 RADOS
PVC 失败首先像谁 六轴(编排) 云 Events/API 错误 引擎/调度 若无 CSI:客户端;有 CSI:仍六轴
升级爆炸半径 Rook+Ceph+sidecar 三者错位 云侧变更 + 驱动版本 Longhorn 组件 Ceph 主版本
RWX 文件 CephFS 通常另购文件/NFS 产品 非 CephFS 同构 CephFS
公有云叠自建 反模式 甜区 视磁盘来源 反模式若 OSD 建在云盘上

表后判决:四条路径赢在不同不变量。Rook 赢在「RADOS + 声明式 K8s 生命周期」;云 CSI 赢在删掉存储编制;Longhorn 赢在「只要引擎块副本、不要 RADOS」;裸 Ceph 赢在控制面与某个 K8s 解耦。用延迟榜代替上表,是口径欺骗。


六、什么时候不该上 Rook+Ceph

排除树的反向视角(编排层):

  1. 已在公有云且只要块:用云 CSI(storage/70),不要叠 Rook。
  2. 只要中小规模块副本、拒绝 Ceph 编制:评估 Longhorn 类引擎,而不是「先装 Rook 再说」。
  3. Ceph 必须跨多个 K8s 或独立生命周期:裸 Ceph +(可选)外挂 CSI。
  4. 付不起双方言排障:第 13 篇六轴 + ceph/16 五轴都要人值班——编制不够则托管或更简单引擎。
  5. 主需求是亚毫秒本机盘:回 ceph/17 本机 NVMe/SPDK 叶,与 Rook 无关。

与 ceph/17 的阅读顺序

两篇对照文容易被误读成重复。固定顺序可以避免:

  1. 先问 要不要 RADOSceph/17 / ceph/18。若答案是 MinIO、云块直用或本机 SPDK,本篇大部分叶子直接剪掉。
  2. 若答案是「要 Ceph」,再问 要不要 Rook 包进本 K8s → 本篇与第 16 篇排除树。
  3. 若答案是「要 Ceph 但不要 Rook」,仍可能需要 Ceph-CSI——那时第 13 篇六轴仍然适用,只是 Rook 层改为手工/GitOps 配置面。

把两篇合成一张「存储软件推荐榜」会破坏上述顺序,也会把引擎差异与编排差异糊成一列功能勾选。

迁移叙事(机制,非步骤书)

从云 CSI 迁到 Rook,或反向迁出,真正昂贵的不是改 StorageClass 名,而是失败方言与值班手册切换。迁入 Rook 前应已具备:六轴 runbook、主版本升级演练、features 门禁。迁出 Rook 到云 CSI 前应已具备:快照/克隆语义对照、应用是否依赖 CephFS RWX 或 RBD 特定镜像特性。缺演练的迁移,排除树上应记为「未关闭」,而不是「已完成切换」。

对「已经跑了 Rook,但只当远程盘用、从不看 PG」的团队,机制上等于付了 RADOS 全税却只消费云盘子集能力——排除树复盘时应追问:是编制不足,还是接口需求被高估。任选其一成立,都要回到第 16 篇重跑,而不是继续加节点「先撑住」。


七、谱系、争论与开放问题

谱系

CSI 规范(SIG Storage)把「存储插件」收成 gRPC;云厂商把块控制面留在自家 API;Ceph 把耐久放在 RADOS;Rook 把 Ceph 生命周期映射为 K8s CR;Longhorn 则把副本放进另一套引擎。四条线不是同一论文的四个实现,而是问题定义不同的工程分叉。本系列站在 Rook+CSI 分叉上写深,对照叶只负责排除。

争论:「K8s 上必须 Rook 才能用 Ceph」

A 侧:Operator 统一设备、密钥、CSI,减少雪花机。
B 侧:多集群共享 Ceph 或强 cephadm 团队时,Rook 变成多余编排层,升级矩阵更脆(第 11 篇)。
裁决依赖排除树第 16 篇,而不是安装量营销。

开放问题

  1. 外挂 Ceph-CSI(无 Rook)与 Rook 托管 CSI 在 Secret 轮换与 mon endpoint 漂移上的失败率差多少? 可检验:同 Ceph 集群、两套 K8s 对接方式,注入 mon IP 变更,比较轴六检测时延。
  2. Longhorn 引擎重建与 Ceph recovery 对前台 P99 的隔离模型是否可公度? 若不可公度,ADR 应禁止跨引擎延迟对比,只保留机制表。

参考资料

站内对照

官方文档(A/B)

论文谱系

上一篇:排障坐标系 · 系列目录 · 下一篇:多租户与安全

读完这篇,下一步读什么

优先读同系列或同问题的下一篇,把单篇消费变成主题集群。

2026-08-15 · storage / kubernetes

【Rook / CSI】编排全景:五轴坐标系与 16 篇路线

相对 ceph/ RADOS 内核与 storage/ 云块选型,钉清 Rook/CSI 编排层缺口;定义 CSI RPC、sidecar、Operator/CRD、数据面归属、升级闸门五条坐标系,给出 16 篇阅读路线与 PVC Bound 之后 I/O 仍走 krbd→PG→BlueStore 的边界。

2026-08-15 · storage / kubernetes

【Rook / CSI】CephFS CSI:subvolume、RWX 与编排侧 MDS 税

拆解 Rook 上 CephFS CSI 如何用 subvolume 兑现 ReadWriteMany;钉死 provisioner 命名、StorageClass 与配额边界,并说明编排侧为 MDS/caps 付出的税——外链 ceph/13,不重写 journal 内核。


By .