张大妈

云原生存储终极方案

源自小红薯:Root大叔

01-23 19:36

在Kubernetes环境中,使用NFS作为存储方案存在单点故障风险,难以满足生产环境的高可用需求。Ceph作为成熟的企业级分布式存储系统,是理想的替代方案。本文将深入探讨如何通过CSI(容器存储接口)标准,让Ceph为K8s提供稳定、高效的存储服务,并详解RBD与CephFS两种核心模式的选择与应用。

云原生存储终极方案智能速览

  • 传统的In-tree存储插件因与K8s紧耦合已被废弃,CSI成为主流标准。

  • CSI实现了K8s与存储系统的解耦,允许两者独立升级与演进。

  • Ceph-CSI主要提供RBD(块存储)和CephFS(文件存储)两种模式。

  • RBD模式提供高性能独享访问,适用于数据库等ReadWriteOnce场景。

  • CephFS模式支持多节点共享读写,适用于Web服务日志等ReadWriteMany场景。

  • 整个存储申请流程由Pod发起,经由PVC、StorageClass和CSI驱动,最终由Ceph集群响应。

云原生存储终极方案精华内容

理解了为何要选择Ceph之后,关键问题便成了如何让Kubernetes与Ceph高效协作。从过去的紧耦合到如今的标准化接口,这套方案的演进彻底改变了云原生存储的游戏规则。

旧时代的局限

早期Kubernetes集成Ceph的方式是In-tree插件,即将Ceph的连接代码直接编译进K8s核心代码。这种方式存在致命缺陷:一旦Ceph发布新版本或修复Bug,用户必须等待K8s同步发布新版本才能应用更新。这种强绑定关系严重限制了运维的灵活性和系统的稳定性,因此已被官方废弃,不应在新项目中采用。

CSI:解耦的艺术

CSI(容器存储接口)的出现解决了上述难题。它定义了一套通用的存储接口标准,K8s只需按这套标准发出指令,如“创建一个10GB的存储卷”。具体的实现则由各存储厂商(如Ceph)提供的独立CSI驱动程序负责。Ceph-CSI驱动接收K8s指令后,将其翻译成Ceph集群能理解的语言并执行。这种设计实现了K8s与Ceph的完美解耦,双方可以独立升级,互不影响,极大地提升了系统的可维护性。

RBD:为性能而生

Ceph在K8s中主要通过RBD提供块存储服务。RBD模式将Ceph集群中的一块存储空间虚拟成一个块设备,然后挂载给单个Pod使用。这种模式对应K8s的ReadWriteOnce(RWO)访问模式,意味着一个存储卷在同一时间只能被一个节点挂载写入。

其优势在于性能出色,接近本地磁盘的I/O表现,非常适合对性能和独占性要求高的应用,如数据库(MySQL、PostgreSQL)、消息队列(Kafka、RabbitMQ)等。需要注意的是,RBD本身不支持跨节点的并发读写,但借助K8s的Attach/Detach机制,当Pod漂移到新节点时,存储卷可以被重新挂载。

CephFS:共享的便捷

当需要多个Pod同时读写同一个目录时,CephFS文件存储便成为最佳选择。CephFS模式在K8s中对应ReadWriteMany(RWX)访问模式,其工作方式类似于传统的NFS,允许多个节点上的多个Pod同时挂载并访问同一文件系统。

这种共享特性使其适用于多种场景,例如:多个Web服务器实例共享静态资源文件、CI/CD流水线中的共享构建空间、以及集中收集多个应用节点的日志文件。虽然CephFS的性能在极端高并发场景下可能略低于RBD,但其提供的灵活性和共享能力是RBD无法替代的。

工作流一览

整个存储供给过程自动化且清晰。首先,开发者在Pod定义中声明需要一个PVC(PersistentVolumeClaim)来申请存储。这个PVC会关联一个预先定义好的StorageClass对象,该对象指定了使用哪个CSI驱动(如Ceph-CSI)以及存储的参数(如副本数、存储池等)。

随后,K8s的存储控制器根据PVC和StorageClass的信息,调用相应的Ceph-CSI驱动。CSI驱动负责与Ceph集群通信,执行创建RBD镜像或CephFS文件系统等实际操作,并将创建好的存储卷挂载到目标Pod中,整个过程对用户透明。

内容由AI生成
0
扫一下,分享更方便,购买更轻松
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

最新文章 热门文章