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

egt*_*egt 8 mount kubernetes mounted-volumes persistent-volumes persistent-volume-claims

我的 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]
Run Code Online (Sandbox Code Playgroud)
  • 它适用于两种不同的声明。
  • 可以在多个 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
Run Code Online (Sandbox Code Playgroud)

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

coo*_*ugh 6

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

\n\n

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

\n\n
\n

ReadWriteOnce \xe2\x80\x93 该卷可以由单个节点以读写方式挂载

\n
\n\n

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

\n\n

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

\n\n\n\n

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

\n\n
\n

ReadWriteMany \xe2\x80\x93 该卷可以被许多节点以读写方式挂载

\n
\n\n

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

\n


小智 3

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