在 Kubernetes 中的 Pod 之间共享持久卷

AR1*_*AR1 8 kubernetes kubectl

我们在 Kubernetes 中有两个 pod,为了便于交流,我们将它们称为 pod1 和 pod2。我在 pod 1 上创建了 pv1 和 pvc1,它工作正常。在我看来,文档对此场景不够清楚,或者我找不到正确的 wiki。如何从 pod2 访问 pv1 和 pc1?

AR1*_*AR1 13

来自 k8s 文档:

PersistentVolume(PV)是已被供应由管理员集群中的一块存储器。它是集群中的资源,就像节点是集群资源一样。PV 是与 Volumes 类似的卷插件,但具有独立于使用 PV 的任何单个 pod 的生命周期。此 API 对象捕获存储实现的详细信息,无论是 NFS、iSCSI 还是特定于云提供商的存储系统。

PersistentVolumeClaim(PVC)是由用户进行存储的请求。它类似于豆荚。Pod 消耗节点资源,PVC 消耗 PV 资源。Pod 可以请求特定级别的资源(CPU 和内存)。声明可以请求特定的大小和访问模式(例如,可以安装一次读/写或多次只读)。

这意味着在问题所示的场景中,如果 PodA_deployment.yaml 创建一个卷声明:

volumeMounts:
- name: myapp-data-pv-1
  mountPath: /home/myappdata/mystuff
Run Code Online (Sandbox Code Playgroud)

然后PodB将能够安装pv,提出如下声明:

volumes:
   - name: myapp-data-pv-1
     persistentVolumeClaim:
       claimName: myapp-data-pvc-1
Run Code Online (Sandbox Code Playgroud)

在 PodB_deployment.yaml 中。虽然它很清楚,一旦你理解它就有意义,文档可以更好地解释它。


anr*_*jme 6

在多个节点上访问同一个 PV 并不像看起来那么容易。首先,根据您的用例,您需要一个支持文件系统来创建此共享存储。EFS/NFS/GlusterFS 应该是理想的选择,kubernetes 卷插件支持其中的大部分。此外,如果您正在寻找多写入架构,您还需要具有正确访问模式的 PVC,例如:ReadWriteMany。同样,在微服务世界中,您应该尽量避免此类用例或找到更好的替代方案,以使您的设计在可能的范围内实现可扩展、无状态。https://12factor.net/强调其中大部分原则。

  • 一个很好的用例是,如果您有一个代表“消费者”的 pod,该 pod 需要完成一项昂贵的长期运行工作。您可能希望使用磁盘存储来持久保存结果,同时进行处理,最终目标是将结果从该文件流式传输到其他地方。在这种情况下,为了恢复能力,如果您的 Pod 重新启动,最好恢复在上次保存点完成的工作,并且由于 Pod 可以在任何节点上运行,因此此处使用共享卷非常有用。 (2认同)