前 15 篇把 K8s 上的 Ceph 编排拆到可观测与可排障的精度,并对照了云 CSI、Longhorn、裸 Ceph。选型若再写成「各有优劣看场景」,等于把机制丢掉。
本文是终章:用机制排除树收束判断,回收系列开放问题与 ceph/18 点名的三条摩擦,写明何时不该跑 Rook,把 Tentacle+ / Crimson 留作 Ceph 系列指针,并以 ADR 可粘贴的语言关闭「Rook/CSI 续作边界」。不做跨方案延迟排行榜。
本文是「Rook / CSI:K8s 上的 Ceph 编排内核」系列第 16 篇(共 16 篇 · 终章)。→ 系列目录
篇目 核心内容 第 15 篇 · 多租户与安全 Secret、加密、fencing 第 16 篇 · 选型收束(终章) 排除树、开放问题、边界关闭
版本锚定:Rook v1.20.4;Ceph-CSI v3.17.0;K8s v1.31–v1.36;Ceph 后端 Squid v19.2.x / Tentacle v20.2.1+(机制默认对齐站内 Squid;Tentacle 特性须显式标注)。Crimson / SeaStore 生产边界见 ceph/18,本系列不重开。
一、先排除,再选择(机制判据)
排除树每一叶必须回答一个可证伪的机制问题,而不是「看场景」。
flowchart TD
rados{"Need RADOS semantics\n(RBD and/or CephFS on one cluster)?"}
rados -->|"No"| block{"Need K8s block PVC only?"}
block -->|"No"| out["Out of scope\n(object-only, local disk, …)"]
block -->|"Yes"| cloud{"On public cloud VMs\nwith managed disks?"}
cloud -->|"Yes"| ebs["Cloud CSI\nDo not stack Rook"]
cloud -->|"No"| eng{"Accept non-RADOS\nengine replication?"}
eng -->|"Yes"| lh["Longhorn-class"]
eng -->|"No"| other["Other engines / local PV"]
rados -->|"Yes"| staff{"Can staff both\nPVC six-axis and Ceph five-axis?"}
staff -->|"No"| hosted["Managed block/file\nor simpler stack"]
staff -->|"Yes"| life{"Must Ceph lifecycle\nlive inside this K8s?"}
life -->|"No"| bare["cephadm / bare Ceph\n(+ optional external CSI)"]
life -->|"Yes"| feat{"Can enforce feature\nand upgrade gates?"}
feat -->|"No"| defer["Do not run Rook yet"]
feat -->|"Yes"| rook["Rook v1.20 +\nCeph-CSI Operator"]
| 机制判据(问句) | 若「否」 | 倾向 |
|---|---|---|
| 需要 RADOS 语义(RBD/CephFS 同集群等)? | 不要为品牌装 Ceph | 云 CSI / Longhorn / 其它 |
| 公有云虚机 + 托管盘? | 避免云盘做 OSD 再套 Rook | 云 CSI(storage/70) |
| 付得起编排六轴 + Ceph 五轴编制? | 机制再强也运维不起 | 托管或更简单引擎 |
| Ceph 生命周期必须进本 K8s? | Rook 税无对象 | 裸 Ceph ± 外挂 CSI |
| 能执行 features 对齐与「一次一个主版本」闸门? | 会稳定撞上 ceph/18 摩擦 | 先补门禁,再装 Rook |
| PVC 加密/fencing 威胁模型写清了? | 默认双加密或未开 fencing 是隐性债 | 先写第 15 篇边界 |
甜区:私有云/裸金属,需要 RBD±CephFS(±RGW 入口)统一 RADOS,Ceph 生命周期与单一(或主)K8s 绑定,有双方言值班,P99 可接受副本+WAL 量级,能执行升级与 features 门禁。
苦区:公有云叠 Rook、无人懂 PG/CSI、把
Longhorn 与 Ceph 当同义词、跳主版本升级、用 VolumeSnapshot
冒充 CephFS 目录
.snap、双开加密当「更安全」却无威胁模型。
二、系列阅读路径回收
| 路径 | 篇目 | 回收什么 |
|---|---|---|
| 必读核心 | 01 → 02 → 05 → 06 → 07 → 09 → 13 | 坐标系 + CSI 接线 + CSI Operator + RBD + features + 快照语义 + 六轴 |
| 控制面 | 03 → 04 → 05 → 11 | Operator / CephCluster / 升级闸门 |
| 文件系统与安全 | 08 → 09 → 15 | CephFS、快照差、Secret/加密/fencing |
| 对照选型 | 01 → 14 → 16 | 机制差 + 排除树 |
| 观测闭环 | 12 → 13 | 指标语义 → 选轴 |
| 完整通读 | 01 → … → 16 | 系统掌握 |
五个关键问题到终章仍然够用:
- PVC 失败落在哪一层?→ 六轴 + 五层坐标。
- features 为何「挂上但怪」?→
轴三;门禁未做就不要进甜区。
- VolumeSnapshot 保证什么?→ 第 9 篇;CephFS ≠ RBD。
- 为何 v1.20 强制 CSI Operator?→ 第 5、11 篇;旧
ConfigMap 路径是假动作。
- 何时选 Rook?→ 本篇排除树。
三、显式关闭:ceph/18 的「Rook/CSI 续作边界」
Ceph 选型终章 §五 写明:Ceph 系列停在 RADOS 内核;编排摩擦只点名、留给续作。本系列交付后,边界如下——两边都不再假装对方的题是自己的未完待续。
| 题目 | 归属 | 关闭状态 |
|---|---|---|
| PG/BlueStore/peering/mClock/RBD COW/MDS caps | ceph/ |
已由 Ceph 01–18 覆盖 |
| CSI RPC、sidecar、Rook CRD、CSI Operator | 本系列 | 01–16 覆盖 |
| features ↔︎ krbd 错位 | 本系列 07、13 轴三 | 已展开;开放的是「调度前失败」研究项 |
| 升级跳主版本 | 本系列 11、13 轴五 | 已展开为闸门纪律 |
VolumeSnapshot vs .snap |
本系列 09、13 轴四 | 已展开语义差 |
| Crimson / SeaStore / Tentacle 内核演进 | ceph/18 Tentacle+ |
本系列不写;见下节指针 |
| 多集群联邦存储、全域调度 | 未来专题 | 本系列明确不承诺 |
给读完两边的人一句分工口令:
- 「写卡在 PG 还是 BlueStore」→ ceph/
- 「PVC Pending / MountFailed / 快照 not ready / Operator
不收敛」→ 本系列 13
- 「该不该上 Ceph」→ ceph/18
- 「该不该在这套 K8s 上用 Rook 包 Ceph」→ 本篇排除树
Ceph 终章承诺的续作边界,到此关闭。不是「以后永远不再写存储」,而是:同一条摩擦不应再以「留给 Rook 专题」为由在 Ceph 文里悬空。
四、何时不该跑 Rook(编排层否证)
下列任一成立,排除树上 Rook 叶判负(可写进 ADR 否证条件):
- 数据面不需要
RADOS——只要云块或引擎副本。
- 公有云托管盘已够——再叠 Rook
是双层税(第 14 篇)。
- Ceph 必须独立于该 K8s 生命周期——用
cephadm;CSI 可外挂。
- 编制上撑不住六轴+五轴——托管或收缩接口面。
- 不能执行升级主版本纪律或 features
门禁——装了也会在轴三/轴五反复炸。
- 把 Rook 当「点一下就有 Ceph」且无人读第 12–13 篇——观测与排障缺位等于无生产资格。
否证触发后应重跑排除树,而不是口头「我们一直用 Rook」。
五、Tentacle+ / Crimson:只做指针
本系列数据面机制默认钉 Squid 叙述(与站内 Ceph 系列一致)。下列主题故意不展开,避免编排文冒充内核预览手册:
| 主题 | 指针 |
|---|---|
| Crimson tech preview 边界、CPU 集、不可生产 | ceph/18 §三 |
| Tentacle+ 特性标签纪律 | ceph/18 §四 |
| Classic 五轴能否搬到 Crimson | ceph/16 开放问题 |
| v20.2.0 + read affinity 风险 | Rook/Ceph 官方 Upgrades;本系列第 11 篇闸门 |
编排结论不依赖 Crimson 是否在某日变默认:Rook 叶关心的是 CSI 与 Operator 生命周期;内核引擎换代时,先更新 Ceph 系列坐标系,再考虑编排 runbook 是否要分叉。
六、系列级开放问题(可证伪)
6.1 feature 能力能否在调度前失败
问题:RBD features 与节点 krbd
能力不匹配时,能否在调度/准入阶段失败,而不是轴三静默?
检验:固定 SC
features,混部新旧内核节点,比较「仅运行后异常」vs「Pod
因亲和/准入起不来」。
入口:第 7、13 篇;CSI 能力上报讨论。
6.2 mon endpoint / Secret 漂移闭环
问题:Rook 条件类型能否稳定暴露「CSI
配置的 mon 列表与真实 mon map 不一致」?
检验:滚动 mon
地址后,轴六检测时延与是否依赖人工读日志。
入口:第 13 轴六;第 14 开放问题(外挂 CSI
vs Rook)。
6.3 fencing 冷却与应用 RTO
问题:out-of-service →
blocklist → 新节点可写的时间是否可纳入 SLO?
检验:第 15 篇开放问题实验设计。
现状:机制已文档化;默认启用与否仍是平台策略。
6.4 sidecar 直方图与 Ceph slow ops 的自动归因
问题:CreateVolume OK
但延迟桶右移时,能否自动对齐到 OSD commit 尖刺?
检验:第 12
篇开放问题;失败则值班手册保持「先选层再选轴」人工纪律。
6.5 加密双税的合规逼迫下的可测量代价
问题:OSD+PVC 双加密相对单层的
CPU/延迟税,在固定 fio 口径下是否可复现为 ADR 数字?
约束:必须自测;本系列正文不引用虚构百分比。
入口:第 15 篇 Rook 双税警告原文。
关闭条件必须是测量或正式文档变更,不是路线图幻灯片。
七、给读完本系列的人三条收束(ADR 友好)
- 排除树进
ADR:写清卡在哪一叶机制判据;附否证条件(迁云、编制减员、Ceph
改独立生命周期、强制双加密、关闭 fencing
等)。示例句:
「若块存储迁到公有云托管盘,或存储值班从双方言编制降为零,则 Rook+Ceph-CSI 叶必须重跑排除树,禁止以历史惯性续跑。」 - 若选了 Rook:第 13 篇六轴进发布门禁;第
11 篇主版本纪律进升级 runbook;第 7 篇 features
对齐进节点准入;第 15
篇威胁模型进安全评审——缺一项降级为试验集群。
- 若没选:用第 14 篇机制表做代际复盘;禁止无口径延迟截图重开「要不要 Rook」争论。需要 Ceph 内核判断时回 ceph/18。
终章立场:Rook/CSI 值得写 16 篇,是因为失败可命名——RPC 状态码、VolumeAttachment、Driver CR、image features、Snapshot ready、主版本闸门、Secret/mon 锚、fencing blocklist。选型若离开这些名字,讨论退回安装量与品牌口号。记住一个动作:先排除,再上 CR,再扩租户——排除自带否证,CR 自带版本钉,租户自带 Secret 与 SC 边界。
八、与 Ceph 终章对齐的纪律
两边终章共用同一方法论,对象不同:
| 纪律 | Ceph 18 | 本篇(Rook 16) |
|---|---|---|
| 先排除再选 | RADOS vs MinIO/云块/SPDK | Rook vs 云 CSI/Longhorn/裸 Ceph |
| 版本钉 | Squid;Tentacle+ 标签 | Rook v1.20.4 + CSI v3.17.0 |
| 预览隔离 | Crimson 不可生产 | 不把 CSI 实验旗标写成默认甜区 |
| 续作边界 | 曾指向本系列 | 本系列关闭该指针的悬空状态 |
| 开放问题 | 可证伪实验 | 可证伪实验 |
读完两边后,不应再问「Ceph 系列为啥不讲 PVC」——那是分工,不是遗漏。
九、系列收束检查
交付前用四条自检代替口号:
- 排除树每一叶是否对应可观察机制?
- ceph/18 三条摩擦是否都有本系列落点?
- Tentacle+/Crimson
是否只以指针出现、未冒充编排结论?
- ADR 示例是否含否证条件?
若四条任一失败,正文还不能当选型依据,只能当问题清单。
若时间只够三篇:读 01、13、16——带着坐标系、排障轴与排除树离开;缺的是 Operator/快照细节,不是选型语言。全量通读的价值在于把供给税、挂载税、快照税、升级税说成可命名机制,便于事故复盘对号入座。
写进 ADR 的最小附件清单
除排除树截图或表格外,建议附四份短附件(可以是链接,不必贴进同一文件):
- 版本钉:Rook / Ceph-CSI / K8s / Ceph
发行版四元组,以及「禁止跳主版本」一句。
- 排障归属:六轴 on-call 与 Ceph 五轴
on-call 是否同一人;不是同一人则写清升级与交接。
- 安全四问答案:第 15
篇审计四句的书面回复。
- 否证触发器:迁云、编制变化、Ceph 改独立生命周期、强制双加密等——触发后必须重开 ADR,而不是发变更单「微调 Helm」。
缺附件的选型文档,在复盘时通常无法回答「当初为什么选 Rook」,讨论会重新掉进品牌偏好。
终章不再承诺的事
本系列不承诺:多集群联邦存储专篇、Crimson 生产
runbook、云厂商托管 CSI
逐步点击教程、未实测的跨引擎延迟榜。这些若将来成文,应新开系列或挂回
ceph/ /
storage/,而不是在本目录追加「第 17
篇续杯」。编排内核的叙事到第 16 篇结束。
参考资料
官方文档(A/B)
- Rook v1.20 —
文档根:
https://rook.io/docs/rook/v1.20/ - Ceph-CSI v3.17.0 — 上游发布说明与驱动文档
- CSI Spec — container-storage-interface/spec
- Kubernetes — PersistentVolume / VolumeSnapshot / CSI 文档(与集群小版本一致)
站内分工(关闭边界用)
论文谱系
- Weil et al. OSDI 2006;Weil et al. PDSW 2007 — RADOS
问题定义
- CSI 规范与 SIG Storage GA 叙述 — 编排侧问题定义
→ 上一篇:多租户与安全 · 系列目录
读完这篇,下一步读什么
优先读同系列或同问题的下一篇,把单篇消费变成主题集群。
【Rook / CSI】挂载与 features:NodeStage、krbd 错位与 read affinity
拆解 RBD 的 NodeStageVolume/NodePublishVolume、map 路径与 imageFeatures 对 krbd 的依赖;说明失败为何常表现为挂上但怪;钉死 csi.readAffinity 与 Tentacle v20.2.0 损坏警告,并简述 network fencing。
【Ceph RADOS】选型收束:排除树、Crimson 边界与系列开放问题
用机制排除树收束 Ceph 相对 MinIO/云块/本机 SPDK 的选型;钉死 Crimson 在 Squid v19.2.5 的 tech preview 边界与 Tentacle+ 标签;划清 Rook/CSI 续作边界;给出可证伪开放问题——不做延迟排行榜。
【Rook / CSI】编排全景:五轴坐标系与 16 篇路线
相对 ceph/ RADOS 内核与 storage/ 云块选型,钉清 Rook/CSI 编排层缺口;定义 CSI RPC、sidecar、Operator/CRD、数据面归属、升级闸门五条坐标系,给出 16 篇阅读路线与 PVC Bound 之后 I/O 仍走 krbd→PG→BlueStore 的边界。
【Rook / CSI】RBD 供给路径:StorageClass 到 CreateVolume 到 image
拆解 Rook 默认 RBD CSI 如何把 StorageClass 参数与 Secret 转成 CreateVolume,再落到 Format 2 image;钉死 provisioner 命名前缀、池与 imageFeatures 边界,并外链 ceph/12 的对象命名——不重写 BlueStore。