K8S持久卷和持久卷声明

时间:2019-02-21 04:41:56

标签: kubernetes storage

我正在针对存储主题练习k8s。我不明白为什么第二步:当教程在第三步中配置PersistentVolume时,PersistenVolumeClaim具有不同的存储大小

例如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. 如果不使用它们。在storage yaml中将任意数字放在PersistenVolumeClaim上是否安全?

1 个答案:

答案 0 :(得分:3)

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

PV是当时在磁盘上分配并可以使用的实际卷。为了使用这些PV,用户需要创建PersistentVolumeClaims,这仅是对PV的请求。声明创建后,声明必须指定访问方式和存储容量。PV已自动绑定到该声明。

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

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

  

PVC.spec.capacity是用户的存储请求,“我要10 GiB卷”。 PV.spec.capacity是PV的实际大小。当没有可用的PV时,PVC可以绑定到更大的PV,因此用户实际上可以获得比他想要的更多的东西。

类似地,动态预配置通常在更大的块中工作。因此,如果用户要求在PVC中使用0.5GiB,他将获得1 GiB PV,因为这是AWS可以提供​​的最小PV。

这没有错。另外,您不应在PVC尺寸中放置任何随机数,应根据您的应用需求和缩放比例对其进行正确计算。