什么是 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 读写模式的应用。
关于焱融科技
焱融科技是一家以软件定义存储技术为核心竞争力的高新技术企业,在分布式存储等关键技术上拥有自主知识产权,是高性能文件存储和容器存储的领导者。焱融科技核心产品 YRCloudFile 在全球 IO500 性能测试中,进入世界前六。同时,YRCloudFile 是国内首个进入 CNCF Landscape 的容器存储产品。焱融科技针对各行业业务特性,打造个性化行业解决方案,提供一站式的产品与服务。焱融科技系列产品已服务于人工智能、金融、政府、制造业、互联网等行业的众多客户。了解更多焱融科技信息,请访问官网http://www.yanrongyun.com。
、
版权声明: 本文为 InfoQ 作者【焱融科技】的原创文章。
原文链接:【http://xie.infoq.cn/article/9eb9aa3ff0e78600630f0c596】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
评论