根据这个官方的文档,Kubernetes持久卷支持三种类型的访问模式。
文档中给出的它们的定义是非常高的。如果有人能更详细地解释它们,以及一些不同用例的例子,我们应该使用一个和另一个,那就太好了。
发布于 2019-09-05 06:10:29
当您计划拥有需要写入卷的Pods时,您应该使用ReadWriteX
,而不仅仅是从卷读取数据。
当您希望Pods能够访问给定的卷时,当这些工作负载在Kubernetes集群中的不同节点上运行时,您应该使用XMany
。这些Pods可能是属于部署的多个副本,也可能是完全不同的Pods。在许多情况下,在不同的节点上运行Pods是可取的,例如,如果单个部署有多个Pod副本,那么让它们在不同的节点上运行可以帮助确保一定程度的持续可用性,即使其中一个节点失败或正在更新。
如果您不使用XMany
,但您确实有多个需要访问给定卷的pods,这将迫使Kubernetes安排所有这些Pods在首先安装到的任何节点上运行,这可能会使该节点重载(如果有太多这样的Pods ),并且会影响部署的可用性,这些部署的Pods需要访问该卷,如上一段所解释的那样。
所以把所有这些放在一起:
ReadWriteMany
是一个选项,给定K8s集群的卷插件,请使用ReadWriteMany
。ReadWriteMany
对您来说不是可用的选项,那么请使用ReadWriteOnce
。ReadOnlyMany
是一个选项,给定K8s集群的卷插件,那么使用ReadOnlyMany
。ReadOnlyMany
对您来说根本不是一个可用的选项,那么使用ReadWriteOnce
。在这种情况下,您希望卷是只读的,但是卷插件的限制迫使您选择ReadWriteOnce
(没有ReadOnlyOnce
选项)。作为一种良好的实践,可以考虑在Pod规范中将containers.volumeMounts.readOnly
设置为true
,用于对应于要只读的卷的卷安装。发布于 2019-09-05 04:18:53
通过这种方法,运行在多个节点上的多荚可以使用单卷和读取数据。
如果一个pod用ReadOnlyMany访问模式挂载一个卷,其他pod可以挂载它并且只执行读操作。目前,GCP并不支持这种方法。
这意味着可以在Kubernetes集群的一个或多个节点上挂载卷,并且只能执行读取操作。
您有一个荚正在节点上运行,并且正在从卷读取存储的文件。在同一卷上,不能执行写操作。
因为它是ReadOnlyMany,如果您的pod被调度到另一个节点,那么卷和数据也将可用来执行读取操作。
通过这种方法,运行在多个节点上的可以使用单卷和读写数据。
如果一个pod用ReadWriteMany访问模式挂载一个卷,其他pod也可以挂载它。
这意味着卷可以安装在Kubernetes集群的一个或多个节点上,并且可以同时执行读写操作。
在一个节点上运行一个结荚,并且从卷中读取和写入存储的文件。
因为它是ReadWriteMany,如果您的pod计划到另一个节点,那么卷和数据也可以在那里执行读/写操作。
为此,您还可以使用NFS (MinIO,GlusterFS)或EFS文件系统。
如果一个pod用ReadWriteOnce访问模式挂载一个卷,那么没有其他的pod可以挂载它。在GCE ()中,唯一允许的模式是ReadWriteOnce和ReadOnlyMany。因此,要么一个荚挂载卷ReadWrite,要么一个或多个荚挂载卷ReadOnlyMany。
这意味着卷可以安装在kubernetes集群的一个only
节点上,并且只能执行读取操作。
在节点上运行一个结荚,并且从卷中读取存储的文件。在同一卷上,不能执行写操作。
因为它是ReadWriteOnce,如果您的pod被安排到另一个节点,那么可能会将可移动的卷附加到该节点,并且您无法访问那里的数据。
发布于 2022-02-09 09:20:10
在Kubernetes中,您可以静态地(使用存储类)或动态地(持久性卷)提供存储。一旦绑定和声明的存储可用,您就需要以您的Pods或节点连接到存储的方式(持久卷)来配置它。可以在以下四种模式中进行配置。
在这种模式下,运行在不同节点上的多个豆荚可以连接到存储端,并执行读取操作。
在这种模式下,运行在不同节点上的多个豆荚可以连接到存储端,进行读写操作。
在这种模式下,只运行在一个节点上的多个豆荚可以连接到存储端,并执行读写操作。
在这种模式下,卷可以由单个Pod以读写方式挂载.如果要确保整个集群中只有一个吊舱可以读取或写入PVC,请使用ReadWriteOncePod访问模式。这只支持CSI卷和Kubernetes版本的1.22+。
了解文档以获得更多的洞察力。
https://stackoverflow.com/questions/57798267
复制相似问题