5

我的 pod 声明了两个不同的卷。

我使用了一些定义模板,并且在某些情况下取决于环境,我想对这两卷使用相同的声明。

这会导致错误

    Unable to mount volumes for pod "task-pv-pod_<...>": timeout expired waiting for volumes to attach/mount for pod "<...>"/"task-pv-pod". list of unattached/unmounted volumes=[task-pv-storage1]
  • 它适用于两种不同的说法。
  • 可以在多个 pod 中使用相同的声明。

这是一个简化的 pod 定义:

kind: Pod
apiVersion: v1
metadata:
  name: task-pv-pod
spec:
  volumes:
    - name: task-pv-storage1
      persistentVolumeClaim:
       claimName: task-pv-claim
    - name: task-pv-storage2
      persistentVolumeClaim:
       claimName: task-pv-claim
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: task-pv-storage1
        - mountPath: "/usr/share/nginx/something-else"
          name: task-pv-storage2

那么为什么它不起作用呢?

4

2 回答 2

5

要回答您的问题“是否可以在多个 pod 中使用相同的声明?”,让我们看一下不同的声明附加访问模式:

当您使用默认设置创建 PVC 时,您将创建一个 Persistent Volume 和一个位于其顶部的 Claim,并带有 attach access mode ReadWriteOnce

ReadWriteOnce – 卷可以由单个节点以读写方式挂载

所以这个声明只能挂载在同一个节点的 Pod 上。有一种解决方法可以将此卷安装到多个 pod 上。一种是将所有 pod 安排在同一个节点上,这在技术上违背了使用容器编排的目的。这可以通过将 pod 分配给节点来实现。阅读链接的文档以获取详细信息。

另一种方法是使用磁盘持久卷/NFS。根据您使用的云提供商,您可以使用不同的 FileSystem 供应商。

这样您就可以将访问模式更改为ReadWriteMany

ReadWriteMany – 卷可以被许多节点以读写方式挂载

使用此访问策略,您可以将卷挂载到集群中的多个 pod 上,而不管它们在哪个节点上运行。

于 2019-05-02T19:13:12.207 回答
2

根据文档:“一旦绑定,PersistentVolumeClaim 绑定是独占的,无论它们是如何绑定的。PVC 到 PV 绑定是一对一的映射。” https://kubernetes.io/docs/concepts/storage/persistent-volumes/#binding 有意义吗?

于 2019-05-02T18:40:48.317 回答