处于 ReadOnlyMany 模式的 Persistent Volume 上的容量参数有何用途?

Sam*_*don 5 storage kubernetes

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

IE

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


spec:
  storageClassName: manual
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 1Mi
Run Code Online (Sandbox Code Playgroud)

VAS*_*VAS 7

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

\n\n

您可以将其想象为放在桌子上并可供认领的闪存驱动器。

\n\n

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

\n\n

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

\n\n
    \n
  1. 红色,(颜色=红色)(严格子句)
  2. \n
  3. 美国生产(manufactured=usa)(严格条款)
  4. \n
  5. 最小容量为2Gb(容量>=2GB)(我在这里放\xe2\x80\x9cmore or equal\xe2\x80\x9d,因为这就是kubernetes按容量选择PV的方式)(不是那么严格)
  6. \n
\n\n

(解决方法:您可以将容量值添加到标签中,并使用选择器仅过滤您想要的大小,不能更少,也不能更多。我们暂时跳过它)

\n\n

我们可以在桌子上找到两个闪存驱动器,它们是:

\n\n
    \n
  1. 红色,(完全匹配)(don\xe2\x80\x99不关心其他颜色)
  2. \n
  3. 美国制造(完全匹配)(不关心中国或越南生产的)
  4. \n
  5. 容量有 16 GB 和 4 GB
  6. \n
\n\n

当我们只需要2Gb时,我们选择4Gb容量的闪存驱动器,这更接近我们的需求。

\n\n

选择正确的 \xe2\x80\x9cflash 驱动器\xe2\x80\x9d(将 PV 绑定到容器)后,即使您的声明较小(2Gb 就足够了),您也可以使用其全部容量(4Gb 可用)。

\n\n

但是,当您从桌子上拿走闪存驱动器时,其他人都无法认领它(以防万一您拿走了最后一个)。在 kubernetes 中,PV 和 PVC 是一对一绑定的。因此,如果您有一份 50Gb 的 PV 和两项 5GB 的索赔,则只有一项索赔会得到满足。

\n\n

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

\n\n

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

\n\n

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

\n\n
apiVersion: v1  \nkind: PersistentVolume  \nmetadata:  \n  name: pv-with-data  \n  labels:  \n    version: stable  \n    capacity: 50Gi  <-(workaround I\xe2\x80\x99ve mentioned before)  \nspec:  \n  capacity:  \n    storage: 50Gi  \n  accessModes:  \n  - ReadWriteOnce  \n  - ReadOnlyMany  <- (yes, you can have several modes in PV specification)  \n  persistentVolumeReclaimPolicy: Retain  \n  nfs:  \n    path: /opt/export  \n    server: 10.10.0.10  \n
Run Code Online (Sandbox Code Playgroud)\n\n

PVC 会是这样的:

\n\n
apiVersion: v1  \nkind: PersistentVolumeClaim  \nmetadata:  \n  name: data-claim  \nspec:  \n  accessModes:  \n  - ReadWriteOnce  \n  resources:  \n    requests:  \n      storage: 25Gi  \n  selector:  \n    matchLabels:  \n      version: "stable"  \n    matchExpressions:  \n    - key: capacity  \n      operator: In  \n      values: [25Gi, 50Gi]  \n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n


\n持久卷
\n存储类
\n动态卷配置
\n Gigi Sayfan,掌握 Kubernetes

\n