在ReadOnlyMany模式下的持久卷上容量参数的用途是什么?

时间:2018-03-29 17:27:58

标签: storage kubernetes

我正在努力理解PersistentVolume上Capacity参数的概念,以及处理ReadOnlyMany存储时PersistentVolumeClaim上的存储请求。如果存储以只读方式安装 - 容量/请求究竟与什么相关?

即。

spec:
  storageClassName: manual
  capacity:
    storage: 50Gi
  accessModes:
    - ReadOnlyMany
  hostPath:
    path: "/foo/bar"


spec:
  storageClassName: manual
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 1Mi

2 个答案:

答案 0 :(得分:0)

PersistentVolume (PV)是一个通常由管理员创建或由云提供商自动配置的对象。

您可以将它想象成放在桌子上并可用于声明的闪存驱动器。

PersistentVolumeClaim (PVC)是PV应遵守的最低规格。

继续使用闪存驱动器类比,我们可以想象我们需要一个闪存驱动器:

  1. red,(color = red)(严格条款)
  2. 在美国生产(制造=美国)(严格条款)
  3. 最小容量为2Gb(容量> = 2gb)(我在这里说“更多或更多”,因为这是kubernetes按容量选择PV的方式)(不是那么严格)
  4. (解决方法:您可以将容量值设置为标签并使用选择器仅过滤您想要的尺寸,而不是更少,而不是更多。我们暂时跳过它)

    我们可以在桌面上找到两个闪存驱动器:

    1. 红色,(完全匹配)(不关心其他颜色)
    2. 在美国制造(完全匹配)(不关心在中国或越南生产的那些)
    3. 容量为16 Gb和4Gb
    4. 一旦我们只需要2Gb,我们就会采用4Gb容量的闪存驱动器,这更接近我们的需求。

      在您选择正确的“闪存驱动器”(将PV绑定到您的容器)后,您可以使用其全部容量(4Gb可用),即使您的声明较小(2Gb就足够了)。

      但是当你从桌子上取下闪存驱动器时,没有其他人可以声称它(如果你拿了最后一个)。在kubernetes中,PV和PVC以1对1的形式结合。因此,如果您有一个50Gb的PV和两个5GB的声称,则只能满足一个声明。

      您可以将PV中的 ReadOnlyMany ReadWriteOnce 模式想象为具有相同数据的一堆CD或DVD磁盘。你可以在上面写点什么,然后任何人都可以阅读它多次。 ReadWriteOnce PV只能绑定到一个具有写访问权限的容器,但仍然可以绑定到具有只读访问权限的许多容器(从堆中取出一个磁盘,其中有更多磁盘)。

      在我们的案例中按大小搜索信息没有多大意义,因此在PVC中您可以使用任何小于PV预期的数字,并使用选择器,访问模式和存储类来准确找到您需要的内容。

      例如,您可以创建具有NFS共享的PV:

      apiVersion: v1  
      kind: PersistentVolume  
      metadata:  
        name: pv-with-data  
        labels:  
          version: stable  
          capacity: 50Gi  <-(workaround I’ve mentioned before)  
      spec:  
        capacity:  
          storage: 50Gi  
        accessModes:  
        - ReadWriteOnce  
        - ReadOnlyMany  <- (yes, you can have several modes in PV specification)  
        persistentVolumeReclaimPolicy: Retain  
        nfs:  
          path: /opt/export  
          server: 10.10.0.10  
      

      PVC将是这样的:

      apiVersion: v1  
      kind: PersistentVolumeClaim  
      metadata:  
        name: data-claim  
      spec:  
        accessModes:  
        - ReadWriteOnce  
        resources:  
          requests:  
            storage: 25Gi  
        selector:  
          matchLabels:  
            version: "stable"  
          matchExpressions:  
          - key: capacity  
            operator: In  
            values: [25Gi, 50Gi]  
      

      更多(无聊)信息可以在文档中找到:

      Volumes
      Persistent Volumes
      Storage Classes
      Dynamic Volume Provisioning
      Gigi Sayfan, Mastering Kubernetes

答案 1 :(得分:0)

我在Kubernetes项目的一个名为"Kubernetes persistentvolume capacity not work #48701"的项目中发现了此评论,该问题将capacity仅仅描述为一个标签。所以基本上,它对我所收集的内容没有任何影响:

  

这按预期方式工作,kube无法/不会强制PV的容量,PV的容量字段只是一个标签。由“管理员”(即PV的创建者)准确标记它,以便当用户创建需要> = X Gi的PVC时,他们可以得到所需的东西。

     

对于hostPath PV,当用户可以使用与该主机路径一样多的可用空间时,分配容量可能很困难,您当然可以通过EBS使容量与实际磁盘大小匹配。

来源: https://github.com/kubernetes/kubernetes/issues/48701#issuecomment-314929576