繁体   English   中英

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

[英]Kubernetes Persistent Volume Access Modes: ReadWriteOnce vs ReadOnlyMany vs ReadWriteMany

根据这个官方文档,Kubernetes Persistent Volumes 支持三种访问模式。

  1. 只读多
  2. 一次读写
  3. 读写多

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

在 Kubernetes 中,您可以静态(使用存储类)或动态(持久卷)配置存储。 一旦存储可用于绑定和声明,您需要以 Pod 或节点连接到存储(持久卷)的方式对其进行配置。 这可以配置为以下四种模式。

  1. 只读多 (ROX)

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

  1. 读写多 (RWX)

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

  1. ReadWriteOnce (RWO)

在这种模式下,仅在一个 Node 上运行的多个 Pod可以连接到存储并进行读写操作。

  1. ReadWriteOncePod (RWOP)

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

遵循文档以获得更多洞察力。

  1. ReadOnlyMany –该卷可以被许多节点只读安装

如果吊舱以ReadOnlyMany访问模式装载卷,则其他吊舱可以装载该卷并仅执行读取操作。 目前,GCP不支持此方法。

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

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

因为是ReadOnlyMany,所以如果您的Pod已调度到另一个节点,则也可以使用卷和数据来执行读取操作。

  1. ReadWriteMany –该卷可以被许多节点读写安装

如果吊舱以ReadWriteMany访问模式装载卷,则其他吊舱也可以装载该卷。

这意味着该卷可以安装在您的kubernetes集群的一个或多个节点上,并且您可以执行读取和写入操作。

您在一个节点上运行一个Pod,并且正在从该卷读取和写入存储的文件。

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

  1. ReadWriteOnce –该卷可以通过单个节点以读写方式安装

如果Pod以ReadWriteOnce访问模式装载卷,则其他Pod均无法装载该卷。 在GCE(Google Compute Engine)中,唯一允许的模式是ReadWriteOnce和ReadOnlyMany。 因此,一个Pod装入卷ReadWrite,或者一个或多个Pod装入卷ReadOnlyMany。

这意味着体积可以安装在only一个你kubernetes集群的节点,则只能执行读操作。

您在节点上运行了一个Pod,并且正在从卷中读取存储的文件。 在相同卷上时,您无法执行写入。

因为是ReadWriteOnce,所以如果您的Pod已调度到另一个节点,则可能将mossible卷附加到该节点,并且您将无法在那里访问数据。

当您计划使Pod需要写入卷时,不仅要从卷中读取数据,还应该使用ReadWriteX

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

如果您不使用XMany ,但是您确实有多个需要访问给定卷的Pod,这将迫使Kubernetes将所有这些Pod安排在该卷首先安装到的任何节点上运行,如果有该节点,则可能会使该节点过载这样的Pod太多,并且会影响其Pod需要访问该卷的Deployment的可用性,如上一段所述。

因此,将所有这些放在一起:

  • 如果您需要写入该卷,并且您可能需要多个Pod写入该卷,那么您希望将这些Pod的灵活性安排在不同的节点上,并且为您的K8s集群提供了该卷插件, ReadWriteMany是一个选项,使用ReadWriteMany
  • 如果您需要写入该卷,但又不要求多个Pod应该能够写入该卷,或者对您而言ReadWriteMany根本不可用,请使用ReadWriteOnce
  • 如果您只需要从该卷中读取数据,并且您可能需要从该卷中读取多个Pod,则您希望将这些Pod的灵活性安排在不同的节点上,而ReadOnlyMany是一个选择,因为K8s具有该卷插件群集,请使用ReadOnlyMany
  • 如果您只需要读取该卷,但又不要求多个Pod能够读取该卷,或者ReadOnlyMany根本不适合您使用,请使用ReadWriteOnce 在这种情况下,您希望该卷是只读的,但是您的卷插件的局限性迫使您选择ReadWriteOnce (没有ReadOnlyOnce选项)。 作为一种好习惯,请在您的Pod规范中将containers.volumeMounts.readOnly设置为true以将卷装载对应于旨在为只读的卷。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM