首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Kubernetes持久卷访问模式: ReadWriteOnce vs ReadOnlyMany与ReadWriteMany

Kubernetes持久卷访问模式: ReadWriteOnce vs ReadOnlyMany与ReadWriteMany
EN

Stack Overflow用户
提问于 2019-09-05 04:03:06
回答 3查看 22.2K关注 0票数 36

根据这个官方的文档,Kubernetes持久卷支持三种类型的访问模式。

  1. ReadOnlyMany
  2. ReadWriteOnce
  3. ReadWriteMany

文档中给出的它们的定义是非常高的。如果有人能更详细地解释它们,以及一些不同用例的例子,我们应该使用一个和另一个,那就太好了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-05 06:10:29

当您计划拥有需要写入卷的Pods时,您应该使用ReadWriteX,而不仅仅是从卷读取数据。

当您希望Pods能够访问给定的卷时,当这些工作负载在Kubernetes集群中的不同节点上运行时,您应该使用XMany。这些Pods可能是属于部署的多个副本,也可能是完全不同的Pods。在许多情况下,在不同的节点上运行Pods是可取的,例如,如果单个部署有多个Pod副本,那么让它们在不同的节点上运行可以帮助确保一定程度的持续可用性,即使其中一个节点失败或正在更新。

如果您不使用XMany,但您确实有多个需要访问给定卷的pods,这将迫使Kubernetes安排所有这些Pods在首先安装到的任何节点上运行,这可能会使该节点重载(如果有太多这样的Pods ),并且会影响部署的可用性,这些部署的Pods需要访问该卷,如上一段所解释的那样。

所以把所有这些放在一起:

  • 如果您需要写入卷,并且可能有多个Pods需要写入到您希望将这些Pods调度到不同节点的卷中,并且ReadWriteMany是一个选项,给定K8s集群的卷插件,请使用ReadWriteMany
  • 如果您需要写入卷,但是您没有要求多个荚能够写入卷,或者ReadWriteMany对您来说不是可用的选项,那么请使用ReadWriteOnce
  • 如果您只需要从卷读取,而且可能有多个Pods需要从您希望将这些Pods调度到不同节点的卷中读取,并且ReadOnlyMany是一个选项,给定K8s集群的卷插件,那么使用ReadOnlyMany
  • 如果您只需要从卷中读取,但您没有要求多个荚应该能够从它读取,或者ReadOnlyMany对您来说根本不是一个可用的选项,那么使用ReadWriteOnce。在这种情况下,您希望卷是只读的,但是卷插件的限制迫使您选择ReadWriteOnce (没有ReadOnlyOnce选项)。作为一种良好的实践,可以考虑在Pod规范中将containers.volumeMounts.readOnly设置为true,用于对应于要只读的卷的卷安装。
票数 73
EN

Stack Overflow用户

发布于 2019-09-05 04:18:53

  1. ReadOnlyMany -卷可以由多个节点挂载只读。

通过这种方法,运行在多个节点上的多荚可以使用单卷读取数据。

如果一个pod用ReadOnlyMany访问模式挂载一个卷,其他pod可以挂载它并且只执行读操作。目前,GCP并不支持这种方法。

这意味着可以在Kubernetes集群的一个或多个节点上挂载卷,并且只能执行读取操作。

您有一个荚正在节点上运行,并且正在从卷读取存储的文件。在同一卷上,不能执行写操作。

因为它是ReadOnlyMany,如果您的pod被调度到另一个节点,那么卷和数据也将可用来执行读取操作。

  1. ReadWriteMany -卷可以由多个节点以读写方式挂载。

通过这种方法,运行在多个节点上的可以使用单卷读写数据。

如果一个pod用ReadWriteMany访问模式挂载一个卷,其他pod也可以挂载它。

这意味着卷可以安装在Kubernetes集群的一个或多个节点上,并且可以同时执行读写操作。

在一个节点上运行一个结荚,并且从卷中读取和写入存储的文件。

因为它是ReadWriteMany,如果您的pod计划到另一个节点,那么卷和数据也可以在那里执行读/写操作。

为此,您还可以使用NFS (MinIOGlusterFS)或EFS文件系统。

  1. ReadWriteOnce -卷可以由单个节点以读写方式挂载。

如果一个pod用ReadWriteOnce访问模式挂载一个卷,那么没有其他的pod可以挂载它。在GCE ()中,唯一允许的模式是ReadWriteOnce和ReadOnlyMany。因此,要么一个荚挂载卷ReadWrite,要么一个或多个荚挂载卷ReadOnlyMany。

这意味着卷可以安装在kubernetes集群的一个only节点上,并且只能执行读取操作。

在节点上运行一个结荚,并且从卷中读取存储的文件。在同一卷上,不能执行写操作。

因为它是ReadWriteOnce,如果您的pod被安排到另一个节点,那么可能会将可移动的卷附加到该节点,并且您无法访问那里的数据。

票数 7
EN

Stack Overflow用户

发布于 2022-02-09 09:20:10

在Kubernetes中,您可以静态地(使用存储类)或动态地(持久性卷)提供存储。一旦绑定和声明的存储可用,您就需要以您的Pods或节点连接到存储的方式(持久卷)来配置它。可以在以下四种模式中进行配置。

  1. ReadOnlyMany (ROX)

在这种模式下,运行在不同节点上的多个豆荚可以连接到存储端,并执行读取操作。

  1. ReadWriteMany (RWX)

在这种模式下,运行在不同节点上的多个豆荚可以连接到存储端,进行读写操作。

  1. ReadWriteOnce (RWO)

在这种模式下,只运行在一个节点上的多个豆荚可以连接到存储端,并执行读写操作。

  1. ReadWriteOncePod (RWOP)

在这种模式下,卷可以由单个Pod以读写方式挂载.如果要确保整个集群中只有一个吊舱可以读取或写入PVC,请使用ReadWriteOncePod访问模式。这只支持CSI卷和Kubernetes版本的1.22+。

了解文档以获得更多的洞察力。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57798267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档