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

时间:2019-09-05 04:03:06

标签: kubernetes persistent-volumes

根据此官方document,Kubernetes永久卷支持三种类型的访问模式。

  1. ReadOnlyMany
  2. ReadWriteOnce
  3. ReadWriteMany

文档中给定的定义非常高级。如果有人可以对它们进行更详细的说明以及一些不同使用案例的示例,那就更好了。

2 个答案:

答案 0 :(得分:5)

当您计划使Pod需要写入到卷中,而不仅仅是从卷中读取数据时,应使用ReadWriteX。 / p>

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

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

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

  • 如果您需要写入该卷,并且您可能需要多个Pod写入该卷,则您希望将这些Pod的灵活性安排到不同的节点,并且ReadWriteMany是一个选择您的K8s群集的卷插件,请使用ReadWriteMany
  • 如果您需要写入该卷,但又不要求多个Pod应该能够写入该卷,或者ReadWriteMany根本不适合您使用,请使用{{ 1}}。
  • 如果您只需要从该卷中读取数据,并且您可能需要从该卷中读取多个Pod,则您更希望将这些Pod的灵活性安排到不同的节点,并且ReadWriteOnce是一个选择给定K8s群集的卷插件,请使用ReadOnlyMany
  • 如果您只需要从该卷中读取内容,或者您​​不要求可以读取多个Pod,或者ReadOnlyMany根本不适合您使用,请使用{ {1}}。在这种情况下,您希望该卷是只读的,但是您的卷插件的局限性迫使您选择ReadOnlyMany(没有ReadWriteOnce选项)。作为一种好习惯,请在Pod规范中考虑将ReadWriteOnce设置为ReadOnlyOnce,以使卷装载对应于打算只读的卷。

答案 1 :(得分:3)

  
      
  1. ReadOnlyMany –该卷可以被许多节点只读挂载
  2.   

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

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

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

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

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

如果某个Pod以ReadWriteMany访问模式装入一个卷,则其他Pod也可以装入该卷。

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

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

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

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

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

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

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

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