Kubernetes持续卷访问模式:读写一次与只读多次与读写多次

ki1q1bka  于 2023-03-29  发布在  Kubernetes
关注(0)|答案(3)|浏览(225)

根据本官方文档,Kubernetes持久卷支持三种类型的访问模式。
1.只读多个
1.读写一次
1.读写次数
文档中给出的它们的定义是非常高层次的。如果有人能更详细地解释它们,沿着提供一些不同用例的示例,我们应该使用一个与另一个的对比,那就太好了。

i86rm4rw

i86rm4rw1#

如果您计划让Pod需要向卷“写入”数据,而不仅仅是从卷“读取”数据,则应使用ReadWriteX
如果您希望Pod能够在Kubernetes集群中的不同节点上运行工作负载时访问给定卷,则应该使用XMany。这些Pod可能是属于一个Deployment的多个副本,也可能是完全不同的Pod。在许多情况下,希望Pod运行在不同的节点上,例如,如果您为单个Deployment提供多个Pod副本,则需要使用XMany。则使它们在不同的节点上运行可以帮助确保一定量的持续可用性,即使其中一个节点发生故障或正在被更新。
如果你不使用XMany,但你有多个Pod需要访问给定的卷,这将迫使Kubernetes计划所有这些Pod在卷首先装载到的任何节点上运行,如果有太多这样的Pod,这可能会使该节点过载,并可能影响其Pod需要访问该卷的部署的可用性,如前一段所述。
所以把所有这些放在一起:

  • 如果您需要写入卷,并且您可能有多个Pod需要写入卷,您希望这些Pod被调度到不同节点的灵活性,并且ReadWriteMany是K8s集群的卷插件中的一个选项,请使用ReadWriteMany
  • 如果您需要写入卷,但不要求多个pod都能写入,或者ReadWriteMany根本不适合您,请使用ReadWriteOnce
  • 如果您只需要从卷中读取,并且您可能有多个Pod需要从卷中读取,您希望这些Pod被调度到不同节点的灵活性,并且ReadOnlyMany是K8s集群的卷插件的一个选项,请使用ReadOnlyMany
  • 如果您只需要从卷中读取数据,但您不需要多个Pod能够从卷中读取数据,或者ReadOnlyMany根本不适合您,请使用ReadWriteOnce。在这种情况下,你想要这个卷是只读的但是你的卷插件的限制迫使你选择ReadWriteOnce(没有ReadOnlyOnce选项)。作为一个好的实践,考虑在Pod规范中将containers.volumeMounts.readOnly设置为true,用于与只读卷对应的卷挂载。
ru9i0ody

ru9i0ody2#

1. ReadOnlyMany -该卷可被多个节点只读挂载
  • 通过这种方式,运行在多个节点上的多个Pod可以使用单个卷,并读取数据。
  • 如果某个Pod挂载了一个ReadOnlyMany访问模式的卷,其他Pod可以挂载该卷并只执行读操作,目前GCP不支持这种方式。
  • 这意味着卷可以挂载到Kubernetes集群的一个或多个节点上,并且您只能执行读操作。
  • 您有一个pod正在节点上运行,并且您正在从卷中阅读存储的文件。在同一卷上,您无法执行写入。
  • 由于是ReadOnlyMany,如果您的Pod被调度到其他节点,则卷和数据也可用于执行读取操作。
2. ReadWriteMany -该卷可被多个节点读写挂载
  • 通过这种方式,运行在多个节点上的多个Pod可以使用单个卷读写数据。
  • 如果一个Pod装载了读写多访问模式的卷,其他Pod也可以装载该卷。
  • 这意味着卷可以挂载在Kubernetes集群的一个或多个节点上,并且您可以执行读和写操作。
  • 您有一个pod在节点上运行,您正在从卷中阅读和写入存储的文件。
  • 由于它是ReadWriteMany,如果您的Pod计划到另一个节点,则卷和数据也将在那里执行读/写操作。
  • 为此,您也可以使用NFS(MinIOGlusterFS)或EFS文件系统。
3. ReadWriteOnce -卷可由单个节点以读写方式装载
  • 如果一个pod挂载了一个ReadWriteOnce访问模式的卷,那么其他pod就不能挂载它。在GCE(Google Compute Engine)中,唯一允许的模式是ReadWriteOnce和ReadOnlyMany。所以要么一个pod挂载卷ReadWrite,要么一个或多个pod挂载卷ReadOnlyMany
  • 这意味着卷可以挂载到kubernetes集群的only节点上,并且只能执行读取操作。
  • 你有一个pod运行在节点上,你正在从卷中阅读存储的文件。在同一卷上,你不能执行写操作。
  • 因为它是ReadWriteOnce,如果您的Pod被调度到另一个节点,则可能会将mossible卷附加到该节点,并且您无法访问那里的数据。
z9zf31ra

z9zf31ra3#

在Kubernetes中,您可以静态(使用存储类)或动态(持久卷)配置存储。一旦存储可用于绑定和声明,您需要配置Pod或节点连接到存储(持久卷)的方式。可以在以下四种模式中配置。
1.ReadOnlyMany(ROX)
在此模式下,运行在不同Node上的多个Pod可以连接到存储并执行操作。
1.ReadWriteMany(RWX)
在此模式下,运行在不同Node上的多个Pod可以连接到存储并执行读写操作。
1.读写一次(RWO)
在此模式下,多个Pod只运行在一个Node上,可以连接到存储上进行读写操作。
1.ReadWriteOncePod(RWOP)
在此模式下,卷可以由单个Pod以读写方式挂载。如果您想确保整个集群中只有一个Pod可以读取或写入该PVC,请使用ReadWriteOncePod访问模式。仅支持CSI卷和Kubernetes 1.22+版本。
请参阅文档以获得更多信息。

相关问题