一、背景介绍
K8S创建pod资源的过程中,必然涉及到数据存储。因此,K8s 为了使用户能够正常请求存储资源,避免处理存储设施细节,引入了 PVC和 PV。
二、相关概念
(1)PVC(Persistent Volume Claim)是对PV的申请,它描述了用户对持久化存储的需求。使用PVC,用户可以声明对存储资源的要求,如容量、访问模式、存储类别等。PVC会与PV进行绑定,从而使用户可以在容器中使用持久化存储。
(2)PV(Persistent Volume)代表持久化存储的实际资源,它可以是物理存储设备(如磁盘等),也可以是云存储提供商的服务(如弹性文件等)。PV通常由集群管理员预先配置并提供给用户使用。
三、创建PV的yaml文件
说明:yaml文件里创建了三个PV,分别具有不同的accessModes、storage。pv供应方式为静态供应,由用户进行创建。
# vim pvtest1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pvtest1
labels:
name: pvtest1
spec:
nfs:
path: /data/volumes/pvtest1
server: nfs
accessModes: ["ReadWriteMany"]
capacity:
storage: 6Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pvtest2
labels:
name: pvtest2
spec:
nfs:
path: /data/volumes/pvtest2
server: nfs
accessModes: ["ReadWriteOnce"]
capacity:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pvtest3
labels:
name: pvtest3
spec:
nfs:
path: /data/volumes/pvtest3
server: nfs
accessModes: ["ReadWriteMany"]
capacity:
storage: 2Gi
四、创建PVC的yaml文件
说明:yaml文件里创建了一个PVC,accessModes模式为RWX、storage大小为5Gi。
# vim mypvctest1.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvctest1
namespace: dev
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
五、结果展示以及原理分析
[root@master src]# kubectl apply -f mypvctest1.yaml
persistentvolumeclaim/mypvctest1 created
[root@master src]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvtest1 6Gi RWX Retain Bound dev/mypvctest1 8m4s
pvtest2 5Gi RWO Retain Available 8m4s
pvtest3 2Gi RWX Retain Available
[root@master src]# kubectl get pvc -n dev
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mypvctest1 Bound pvtest1 6Gi RWX 12m
从结果来看,名字为mypvtest1的PVC和名字为pvtest1的PV进行了绑定,绑定的操作是由k8s组件pv controller完成。在绑定的过程中,pv controller需要查看PVC和PV的accessModes模式storage大小等进行匹配,需要特别注意的是,PV的storage大小必须大于等于PVC里申请的storage大小。