【问题标题】:Is it possible to have the same PVC as two volumes in kubernetes?是否可以在 Kubernetes 中拥有与两个卷相同的 PVC?
【发布时间】:2019-05-02 17:06:52
【问题描述】:

我的 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

那么为什么它不起作用?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        相同的 PVC(您的问题中的“声明”):

        • 两个(或更多)容器mountPaths- 是,
        • 两个volumes - 没有。

        如果我们指向同一个 PVC:

        • 只能有一个volume AND
        • volumeMounts 两者(全部)都应该指向同一个卷(在你的情况下是task-pv-storage,而不是task-pv-storage1task-pv-storage2)。

        我的示例(请注意,我对两个挂载都使用了名为 fs-db-rwx 的同一卷):

        Mount: fs-db-rwx → /data read-write
        Mount: fs-db-rwx → /opt/redis read-write
        

        部署配置(相关部分):

                      volumeMounts:
                        - name: fs-db-rwx
                          mountPath: /data
                        - name: fs-db-rwx
                          mountPath: /opt/redis
        [..]
                    volumes:
                    - name: fs-db-rwx
                      persistentVolumeClaim:
                        claimName: fs-db-rwx
        
        

        用户视角:两个容器路径内容相同:

        $ ls -lan /data
        total 818484
        drwxr-x---    2 65534    65534          123 Mar 16 10:47 .
        drwxr-xr-x    1 0        0               28 Mar 16 10:47 ..
        -rw-r--r--    1 65534    65534    838103626 Mar 15 20:00 dump-rdb-20220315-bak
        -rw-r--r--    1 65534    65534           93 Mar 16 10:47 dump.rdb
        -rw-r--r--    1 65534    65534            5 Dec  4 12:45 local.txt
        -rw-r--r--    1 65534    65534         2911 Mar 16 10:14 redis.conf
        -rwxr-xr-x    1 65534    65534          333 Dec  4 13:05 upload-file-to-artifactory.sh
        
        $ ls -lan /opt/redis/
        total 818484
        drwxr-x---    2 65534    65534          123 Mar 16 10:47 .
        drwxr-xr-x    1 0        0               19 Mar 16 10:47 ..
        -rw-r--r--    1 65534    65534    838103626 Mar 15 20:00 dump-rdb-20220315-bak
        -rw-r--r--    1 65534    65534           93 Mar 16 10:47 dump.rdb
        -rw-r--r--    1 65534    65534            5 Dec  4 12:45 local.txt
        -rw-r--r--    1 65534    65534         2911 Mar 16 10:14 redis.conf
        -rwxr-xr-x    1 65534    65534          333 Dec  4 13:05 upload-file-to-artifactory.sh
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-09
          • 1970-01-01
          • 1970-01-01
          • 2019-05-24
          • 2011-12-15
          • 2018-09-10
          • 1970-01-01
          • 2016-01-22
          相关资源
          最近更新 更多