Skip to content

4. Ceph CSI 集成

本章目标

  • 部署 ceph-csi-rbd 与 ceph-csi-cephfs,把第二篇的实验集群接入 K8s
  • 理解 RWO(块)与 RWX(文件)在 K8s 中的用法边界
  • 掌握 K8s 侧快照/扩容操作与故障联动

4.1 外部集群接入

Ceph CSI 让 K8s 直连外部 Ceph 集群(存算分离路线)。部署对照 ceph-csi-rbd 手册的实践形态:

text
① 部署 CSI 本体:改 values.yml 填集群连接信息(来自 ceph.conf),
   多个 Ceph 集群就在 values 里追加 —— helmwave up --build
② 每个存储类一个目录:block-nvme/ 下放
   secret.yaml       ← userID/userKey 来自 ceph.client.<user>.keyring
   storageclass.yaml ← pool 与该用户对应
③ kubectl apply -k block-nvme/

两个安全要点:

  • 给 K8s 的 ceph 用户用最小权限的专用 client(caps 限定 pool),绝不把 admin keyring 塞进集群
  • 每个租户/存储类独立 pool + 独立用户(与 rook 手册"每租户独立部署"同一条治理原则)

4.2 RBD CSI:块卷(RWO)

流程(第 2 章时序图的具体化):

text
CreateVolume   = ceph 后端 rbd create( thin 置备,第二篇 3.2)
NodeStage      = rbd map + mkfs(首挂)
NodePublish    = bind-mount 进容器
扩容           = rbd resize + resize2fs/xfs_growfs(在线)
快照           = rbd snap(VolumeSnapshot 调用,与第二篇快照链同机制)

适用:数据库、中间件、虚拟机盘 —— 一切"独占块设备、单节点读写"的负载。多节点同时 map 一个 RBD 会损坏文件系统,这也是 AccessMode 只有 RWO 的物理原因。

4.3 CephFS CSI:共享卷(RWX)

text
CreateVolume  = 在 CephFS 上创建子目录
NodePublish   = 内核 ceph 挂载(或 fuse),每节点独立会话
RWX           = MDS 的 caps 机制保证多客户端一致性(第二篇 4.2)

适用:AI 数据集只读分发、配置/代码共享、多副本应用共享工作区。对照 CephFS 边界:海量小文件高元数据 OPS 的 AI 训练要评估 MDS 水位 —— 高性能场景上 GPFS CSI(第 1 章)是备选。

4.4 快照、克隆与故障联动

bash
# K8s 侧快照(与第二篇 RBD 快照同源,入口换成 kubectl)
kubectl apply -f snapshotclass.yaml     # VolumeSnapshotClass 指向 CSI
kubectl apply -f snapshot.yaml          # VolumeSnapshot → 触发 rbd snap
# 从快照恢复新 PVC:dataSource 指向该 snapshot

故障联动演练(本篇核心实验):暂停一个 OSD(ceph orch daemon stop osd.N)→

  • K8s 侧 PVC/Pod 不告警(CSI 不感知后端健康)
  • ceph -s 出现 degraded,客户端延迟上升(3 副本仍在服务)
  • 教训:K8s 监控与 Ceph 监控必须两套并立,跨系统的告警联动是平台运维的必修课

本章小结

  • 外部集群接入 = values 填连接信息 + 每存储类一目录(secret + SC)+ 最小权限专用用户
  • RBD CSI= RWO 独占块;CephFS CSI = RWX 共享 —— AccessMode 是接口物理特性的投影
  • K8s 快照/扩容是第二篇同源机制的新入口
  • CSI 不感知后端健康 —— 双栈监控必须有

自测

Quiz给 K8s 集群配置 Ceph CSI 时把 admin keyring 塞进了 secret。最主要的风险是?
Quiz一个 3 副本 Ceph 后端被 RBD CSI 接入 K8s。运维中 stop 掉一个 OSD,K8s 侧的表现最可能是?
🧪Lab · 把实验 Ceph 集群接入 K8s挑战
⏱ 2.5 小时🖥 第二篇 Ceph 集群 + 一套 K8s
1. 按 ceph-csi-rbd 手册完成部署:values 填集群信息,创建 `block-nvme` 式命名的存储类目录(secret + storageclass),创建专用 ceph 用户并限制 caps 到目标 pool。 2. 起一个 StatefulSet(RWO)写数据;再按 ceph-csi-cephfs 手册部署文件 CSI,3 副本 Deployment 共享 RWX 卷。 3. 对 RBD 卷做 K8s 快照,并从快照恢复新 PVC 挂载验证(对照第二篇 rbd snap 手工流)。 4. 故障注入:`ceph orch daemon stop osd.N`,观察 K8s 侧(Pod/事件/监控)与 Ceph 侧(`ceph -s`)的表现差异;恢复后记录自愈时间。 5. **验收标准**:能说清"RWO vs RWX 的底层差异"、"OSD 故障时 Pod 是否受影响、为什么",并画出双栈监控应该覆盖的指标清单。
📎 参考手册 ↗

上一章 · 下一章:5. 存储方案选型 →