我正在努力理解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
答案 0 :(得分:0)
PersistentVolume (PV)是一个通常由管理员创建或由云提供商自动配置的对象。
您可以将它想象成放在桌子上并可用于声明的闪存驱动器。
PersistentVolumeClaim (PVC)是PV应遵守的最低规格。
继续使用闪存驱动器类比,我们可以想象我们需要一个闪存驱动器:
(解决方法:您可以将容量值设置为标签并使用选择器仅过滤您想要的尺寸,而不是更少,而不是更多。我们暂时跳过它)
我们可以在桌面上找到两个闪存驱动器:
一旦我们只需要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