在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读写模式的利用。