在Kubernetes中是否可以具有与两个卷相同的PVC?

时间:2019-05-02 17:06:52

标签: kubernetes persistent-volumes persistent-volume-claims

我的吊舱声明了两个不同的卷。

我使用一些定义模板,并在某些情况下依赖于环境,因此我想对两个卷使用相同的声明。

这会导致错误

    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]
  • 它可以很好地处理两个不同的声明。
  • 可以在多个广告连播中使用相同的声明。

这是简化的广告连播定义:

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

那为什么不起作用?

2 个答案:

答案 0 :(得分:2)

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

使用默认设置创建PVC时,将使用附加访问模式ReadWriteOnce创建一个持久卷和一个位于其上方的声明。

  

ReadWriteOnce –该卷可以由单个节点以读写方式安装

因此,此声明只能安装在同一节点上的Pod上。有一种解决方法,可以将该卷安装到多个Pod上。一种是将所有Pod安排在同一节点上,这在技术上违反了使用容器编排的目的。这可以通过assigning pods to nodes来实现。阅读链接的文档以了解详细信息。

另一种方法是使用磁盘持久卷/ NFS。根据您使用的云提供商,可以使用不同的文件系统配置程序。

通过这种方式,您可以将访问模式更改为ReadWriteMany

  

ReadWriteMany –该卷可以被许多节点以读写方式装入

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

答案 1 :(得分:0)

根据文档:“一旦绑定,PersistentVolumeClaim绑定将是排他的,无论它们如何绑定。PVC与PV的绑定都是一对一的映射。” https://kubernetes.io/docs/concepts/storage/persistent-volumes/#binding 有道理吗?