写点什么

什么是 ReadWriteMany?

用户头像
焱融科技
关注
发布于: 55 分钟前
什么是ReadWriteMany?

在 Kubenetes 体系内,针对每一个持久化存储卷,都有三种访问方式: ReadWriteOnce(RWO), ReadOnlyMany(ROX), ReadWriteMany(RWX)。在当前的定义中,这三种方式都是针对节点级别的,也就是说,对于一个 Persistent Volume, 如果是 RWO, 那么只能被挂载在某一个 Kubernetes 的工作节点(以下简称节点)上,当再次尝试在其他节点挂载的时候,系统会报 Multi-Attach 的错误(当然,在只有一台可调度节点的情况,即使 RWO 也是能够被多个 Pod 同时使用的,但除了开发测试,有谁会这么用呢?); 如果是 RMX, 那么可以同时在多个节点上挂载并被不同的 Pod 使用。举例如下:

在官方文档中(https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes),我们可以了解到目前存储支持 ReadWriteMany 的情况如下:


从列表中我们可以看到,只有文件类的存储能够支持 ReadWriteMany, 而所有的块存储,无论是公有云,还是 Ceph, iSCSI,都无法支持 RWX。


那么 RWX 到底意味着什么? 对于用户的应用来说有什么影响呢? 我们以实际的一个应用 WordPress 为例,典型的拓扑结构如下:

多个 WordPress 实例之间需要一个共享的卷作为 Uploads 目录, 同时还需要一个 MySQL 服务。这个共享卷就是一个很典型的 ReadWriteMany 的需求,当 WordPress 实例需要快速横向扩展的时候,新扩展的实例可以直接访问到原有的用户上传的数据,不需要复制等操作,因为大家共享的是一份数据,这种需求对于不支持 ReadWriteMany 的块存储来说,就非常尴尬了。 我们会发现在真实世界中,不乏各种困惑的声音,例如下图中的这个实际例子(https://www.digitalocean.com/community/questions/kubernetes-readwritemany-or-the-same-effect),来个摘要,这位小哥正在寻找一个容器平台上运行 WordPress 的方案,需要在多个 Pod 上同时访问同一份数据(Master 上可读可写,其它节点只读)。


人民的力量是巨大的,也不是没有解决方案,见下图(https://blog.openebs.io/setting-up-persistent-volumes-in-rwx-mode-using-openebs-142632244cb2?gi=1a701ed8e4bd), 我们看到它是利用类似于 Re-Export 的方式,将块存储暴露出 NFS 的接口来实现了。但它真的好吗? 暂且不说性能如何,这里存在着单点啊,因为图中的 RWO 卷只能挂载给一个 NFS。

焱融 YRCloudFile 是一款专门针对容器场景开发的高性能分布式文件存储,天生的支持 ReadWriteMany 的读写方式,通过如下的拓扑结构,完美的解决了有状态应用 WordPress 的高可用结构,无论是共享的目录,还是 MySQL 数据库需要的存储目录,统一管理,高性能支持。

在下一篇文章中,作者将结合上图,以高可靠、高可扩展的 WordPress 架构为例,实际地演示如何结合焱融容器存储,部署基于 ReadWriteMany 读写模式的应用。

发布于: 55 分钟前阅读数: 2
用户头像

焱融科技

关注

Drive Future Storage 2020.05.29 加入

面向未来的下一代云存储

评论

发布
暂无评论
什么是ReadWriteMany?