kubernetes持久卷访问模式

wan*_*zhe 13 volume persistent-storage kubernetes

看来,Kubernetes支持3类型的接入模式持续量:ReadWriteOnce,ReadOnlyMany,ReadWriteMany.我真的很好奇使用ReadWriteOnce模式卷的pod的调度程序策略.例如,我创建了一个具有pod num = 2的RC,我猜这两个pod将被安排到同一主机,因为它们使用具有ReadWriteOnce模式的卷?我真的想知道这部分的源代码.

Moh*_*med 15

我认为赞成的答案是错误的。根据关于访问模式的Kubernetes 文档

访问模式有:

  • ReadWriteOnce -- 卷可以由单个节点以读写方式挂载
  • ReadOnlyMany -- 卷可以被多个节点以只读方式挂载
  • ReadWriteMany -- 卷可以被许多节点以读写方式挂载

因此,今天定义的 AccessModes 仅描述节点附加(而不是 pod 安装)语义,并且不强制执行任何操作。

因此,即使计划在同一节点上运行,为了防止两个 pod 挂载相同的 PVC,您可以使用 pod anti-affinity。这与不在同一节点上调度的 2 个 pod 上挂载一个卷不同。但是反亲和性可用于要求调度程序不要在同一节点上运行 2 个 pod。因此,它可以防止将一个卷安装到 2 个 pod 中。


小智 8

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

如果调度程序使用已经以读写方式安装的GCE卷,则该调度程序(此处的代码)将不允许pod进行调度。

(针对不了解该问题的文档参考: 持久卷访问模式

  • 根据 Kubernetes 卷的官方文档,访问模式 ReadWriteOnce 限制卷受多个 NODE(而非 POD)限制。 (6认同)
  • 另外,引用 [Kubernetes in Action](https://www.manning.com/books/kubernetes-in-action): > `RWO`、`ROX` 和 `RWX` 与可以运行的工作节点数量有关。同时使用量,不至于豆荚数量! (3认同)
  • “该卷可以通过单个节点以读写方式安装”我认为ReadWriteOnce意味着该卷只能在一个k8s节点上安装。我尝试通过两个Pod在同一节点上安装相同的ReadWriteOnce卷。而且有效 (2认同)
  • 我也看到相同的卷安装在 2 个 Pod 上 - 但前提是在同一节点上 - 在 GKE 动态配置中 (2认同)

Adi*_*yan 6

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

ReadOnlyMany (ROX)
在此模式下,在不同节点上运行的多个 Pod 可以连接到存储并执行读取操作。

ReadWriteMany (RWX)
在此模式下,运行在不同节点上的多个 Pod 可以连接到存储并执行读写操作。

ReadWriteOnce (RWO)
在此模式下,仅在一个节点上运行的多个 Pod 可以连接到存储并执行读写操作。

ReadWriteOncePod (RWOP)
在此模式下,卷可以由单个 Pod 以读写方式挂载。如果要确保整个集群中只有一个 pod 可以读取该 PVC 或对其进行写入,请使用 ReadWriteOncePod 访问模式。仅 CSI 卷和 Kubernetes 版本 1.22+ 支持此功能。

请遵循文档以获得更多见解。