K8S PersistenVolume 和 PersistentVolumeClaim

K8S PersistenVolume and PersistentVolumeClaim

我正在练习 k8s 存储主题。不明白为什么教程在step3

中配置PersistenVolumeClaim时step2:PersistentVolume的存储大小不一样

例如nfs-0001.yaml, nfs-0002.yamlstorage2Gi and 5Gi

apiVersion: v1
kind: PersistentVolumemetadata:
  name: nfs-0001
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 172.17.0.7
    path: /exports/data-0001
apiVersion: v1
kind: PersistentVolume
metadata:  name: nfs-0002
spec:  
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 172.17.0.7
    path: /exports/data-0002

步骤 3 中的示例:pvc-mysql.yaml, pvc-http.yaml

kind: PersistentVolumeClaim
apiVersion: v1metadata:
  name: claim-mysql
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: claim-http
spec:  
  accessModes:
    - ReadWriteOnce  
  resources:
    requests:      
      storage: 1Gi

当我检查 pv and pvc

master $ kubectl get pvc
NAME          STATUS    VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
claim-http    Bound     nfs-0001   2Gi        RWO,RWX                       17m
claim-mysql   Bound     nfs-0002   5Gi        RWO,RWX                       17m
master $ kubectl get pv
NAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM                 STORAGECLASS   REASON    AGE
nfs-0001   2Gi        RWO,RWX        Recycle          Bound     default/claim-http        19m
nfs-0002   5Gi        RWO,RWX        Recycle          Bound     default/claim-mysql        19m

1Gi and 3Gi 均未显示在终端中。

问题:

  1. 1Gi and 3Gi在哪里?
  2. 如果不使用。在 PersistenVolumeClaim yaml 中将任意数字放入 storage 是否安全?

您需要了解 PV 和 PVC 之间的区别。 PVC 是一种存储声明,它在某些时候可供应用程序使用,而不是实际分配的卷大小。

PV 是当时在磁盘上分配并可供使用的实际卷。为了使用这些 PV,用户需要创建 PersistentVolumeClaims,这不过是对 PV 的请求。声明必须指定访问模式和存储容量,一旦创建声明,PV 将自动绑定到此声明。

在您的情况下,您的 PV 大小分别为 5 GB 和 3 GB,并且您已经启动了两个分别具有 3 GB 和 1 GB 的 PVC accessmode: ReadWriteOnce,这意味着只能有一个 PV 附加到一个PVC。

现在可用的 PV 容量大于请求的容量,因此它将更大的 PV 分配给 PVC。

PVC.spec.capacity is user's request for storage, "I want 10 GiB volume". PV.spec.capacity is actual size of the PV. PVC can bind to a bigger PV when there is no smaller available PV, so the user can get actually more than he wants.

同样,动态配置通常以更大的块工作。因此,如果用户在 PVC 中请求 0.5GiB,他将获得 1 GiB PV,因为这是 AWS 可以提供的最小值。

没有错。另外,你不应该在 PVC 大小中输入任何随机数,它应该根据你的应用需要和缩放比例很好地计算。