【Rook / CSI】CephFS CSI:subvolume、RWX 与编排侧 MDS 税
内容提要
本文介绍Rook/CephFS CSI在Kubernetes中的使用。CephFS CSI通过subvolume提供ReadWriteMany共享存储,需先创建CephFilesystem。相比RBD,CephFS的"税"在MDS可用性、元数据池延迟和capability协议上。文章强调RWX不等于免费NFS,频繁fsync或元数据密集负载不适合。还讨论了kclient与fuse选择、跨Namespace静态PV共享、配额假满问题,以及常见故障排查。最后给出适用场景:多副本只读配置、制品缓存等,并建议避免将数据库等同步写负载放在CephFS上。
延伸解读
RWX 不等于免费 NFS
文章强调,K8s 中的 ReadWriteMany 只是 API 层面的允许多写者,真正的一致性由 CephFS 的 capability 协议保证。频繁 fsync 或强同步库的负载会带来额外的 MDS 和元数据池开销,因此不应将 CephFS 视为免费 NFS。适合的场景是多副本只读配置、制品缓存等,而数据库等同步写负载应避免放在 CephFS 上。
配额与容量展示的误区
PVC 的容量通过 CephFS 配额实现,Pod 内看到的 df 是配额视图,不一定反映数据池真实占用。运维若只关注池容量,可能与租户的观感冲突;租户写满配额而池仍空时,会表现为 ENOSPC 但集群 HEALTH_OK。排障时应同时查看 PVC 容量、subvolume 配额、数据池 USED 和元数据池延迟,避免误判为“CephFS 满了”。
跨 Namespace 共享的静态 PV 代价
跨 Namespace 共享同一 subvolume 需通过静态 PV 实现,但动态快照、克隆、扩容等操作需回到原始 PVC,且删除顺序有严格要求,否则可能留下孤儿 subvolume。平台若提供自助共享目录,应提供受控模板和回收 runbook,而不是让用户复制半份 YAML。更干净的方式是同 NS 内 RWX 或使用对象存储。
MDS 税的可观测性缺口
K8s 仪表盘默认不显示 cap revoke、journal 积压或 subtree export,导致 RWX 负载的 SLO 难以保障。文章建议至少补充三类信号:MDS Pod 就绪与 failover 次数、元数据池延迟、cap 相关卡住客户端计数。没有这些信号,团队等于在没有仪表的情况下承诺 POSIX 性能。
Q&A
CephFS CSI 在 Kubernetes 中如何提供 ReadWriteMany 存储?
CephFS CSI 通过创建 CephFilesystem 并配置 StorageClass,每个 PVC 对应一个 subvolume,支持 ReadWriteMany 访问模式,允许多个 Pod 同时读写同一份数据。
CephFS CSI 相比 RBD CSI 有哪些额外的开销或“税”?
CephFS CSI 的额外开销包括 MDS 可用性、元数据池延迟和 capability 协议。MDS 抖动会影响多副本 Deployment,元数据操作延迟高,频繁 fsync 或元数据密集负载不适合。
为什么说 RWX 不等于免费 NFS?
RWX 只是 Kubernetes API 允许多个写者,但实际一致性由 CephFS capability 协议保证,涉及缓存、缓冲写和 revoke 时的 flush,这些机制带来额外开销,不能简单等同于免费 NFS。
CephFS CSI 中 kclient 和 fuse 客户端有什么区别?如何选择?
kclient 是内核客户端,默认优先,性能通常更好;fuse 客户端更便携、易调试,但多一层 FUSE,升级时有断开风险。选择取决于内核版本和需求,可通过 cephFsClientType 配置。
如何实现跨 Namespace 共享同一个 CephFS subvolume?
需要将原始动态 PVC/PV 改为 Retain,复制 PV 并添加 staticVolume 和 rootPath,在目标 Namespace 创建指向该 PV 的 PVC。但动态快照、克隆、扩容、删除需回到原始 PVC,且删除顺序需谨慎。
CephFS 配额不生效可能是什么原因?
CephFS 配额需要内核支持,至少约 4.17 版本。如果内核过旧,配额可能不生效,可改用 FUSE 客户端(cephFsClientType)来强制配额,但需接受升级时 FUSE 挂载断开的代价。
CephFS PVC 显示假满(ENOSPC)但集群 HEALTH_OK 是什么情况?
PVC 的容量由配额限制,df 显示的是配额视图,可能未用尽数据池空间。当租户写满配额时会出现 ENOSPC,但集群健康。排障时需同时检查 PVC 容量、subvolume 配额、数据池 USED 和元数据池延迟。
哪些工作负载不适合使用 CephFS CSI?
不适合依赖频繁 fsync/O_SYNC 的数据库、单目录百万级小文件创建且依赖多 active MDS 硬扛、团队无法监控 MDS 和 cap 指标、需要目录级任意时间点恢复却只准备 VolumeSnapshot 的工作负载。
如何监控 CephFS 的 MDS 开销?
需要监控 MDS Pod 就绪与 failover 次数、元数据池 commit/apply 延迟、与 cap 相关的驱逐或卡住客户端计数。这些信号可通过 Ceph 指标获取,但 K8s 仪表盘默认不显示。
CephFS CSI 与 NFS CSI 相比如何选择?
CephFS CSI 是成熟路径,NFS CSI 是实验路径。如果需要 NFS 协议本身(如集群外客户端、特定锁行为)才评估 NFS;否则优先选择 CephFS CSI。