存储持久化相关三个概念:
- PersistentVolume (PV)
是对具体存储资源的描述,比如NFS、Ceph、GlusterFS等,通过PV可以访问到具体的存储资源; - PersistentVolumeClaim (PVC)
Pod想要使用具体的存储资源需要对接到PVC,PVC里会定义好Pod希望使用存储的属性,通过PVC再去申请合适的存储资源(PV),匹配到合适的资源后PVC和PV会进行绑定,它们两者是一一对应的; - StorageClass (SC)
PV可以手动创建,也可以自动创建,当PV需求量非常大时,如果靠手动创建PV就非常麻烦了,SC可以实现自动创建PV,并且会将PVC和PV绑定。
SC会定义两部分内容:
- pv的属性,比如存储类型、大小;
- 创建该PV需要用到的存储插件(provisioner),这个provisioner是实现自动创建PV的关键。
API资源对象PV和PVC
- PV YAML示例:
vi testpv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: testpv
spec:
storageClassName: test-storage
accessModes:
- ReadWriteOnce
capacity:
storage: 500Mi ##提供500Mi空间
hostPath:
path: /tmp/testpv/
说明:
storageClassName: 定义存储类名称,PV和PVC中都会有该字段,目的是为了方便两者匹配绑定在一起。
accessModes定义该pv的访问权限模式,有三种:
- ReadWriteOnce:存储卷可读可写,但只能被一个节点上的 Pod 挂载;
- ReadOnlyMany:存储卷只读不可写,可以被任意节点上的 Pod 多次挂载;
- ReadWriteMany:存储卷可读可写,也可以被任意节点上的 Pod 多次挂载;
capacity 定义该存储大小。
hostPath 定义该存储访问路径,这里指的是本地的磁盘。
- PVC YAML示例:
vi testpvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: testpvc
spec:
storageClassName: test-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi ##期望申请100Mi空间
应用pv和pvc的YAML
kubectl apply -f testpv.yaml -f testpvc.yaml
查看状态
kubectl get pv,pvc
查看状态是否Bound,如果不是,详细查看:
kubectl describe puv testpvc
实验:
将testpvc的期望100Mi改为1000Mi,查看PV的STATUS
- PV和PVC匹配规则
PV创建好后,会等待PVC与其进行绑定