Kubernetes 持久卷访问模式:ReadWriteOnce vs ReadOnlyMany vs ReadWriteMany
回答问题
根据官方文档,Kubernetes Persistent Volumes 支持三种访问模式。
1.ReadOnlyMany
2.ReadWriteOnce
3.ReadWriteMany
文档中对它们的给定定义非常高级。如果有人可以更详细地解释它们以及我们应该使用一个与另一个的不同用例的一些示例,那就太好了。
Answers
当您计划让 Pod 需要写入卷时,您应该使用ReadWriteX,而不仅仅是从卷中读取数据。
当您希望 Pod 能够在这些工作负载在 Kubernetes 集群中的不同节点上运行时访问给定卷时,您应该使用XMany。这些 Pod 可能是属于一个 Deployment 的多个副本,也可能是完全不同的 Pod。在许多情况下,需要在不同节点上运行 Pod,例如,如果您有多个 Pod 副本用于单个 Deployment,那么即使其中一个节点发生故障,让它们在不同节点上运行也有助于确保一定程度的持续可用性或正在更新。
如果你不使用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以用于对应于只读卷的卷挂载。
更多推荐
所有评论(0)