k8s - 一文通透理解PV、PVC、storageClass的使用
一文通透理解PV、PVC、storageClass
·
一、PV-持久卷
持久卷-PersistentVolume 是集群中的一块存储资源,可以由管理员事先制备, 或者使用存储类(Storage Class)来动态制备
1. pv使用时需要理解的几个重要概念
- 存储能力 - capacity
- 访问模式 - accessModes (读写权限)
- 所属存储类 - storageClassName
- 后端存储类型 - 参考内置支持的一些类型(nfs、HostPath、Local等)
- 回收策略 - persistentVolumeReclaimPolicy
- 节点亲和性 - Affinity
2. PV-配置文件样例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
# 预绑定-声明只能被如下的PVC绑定
claimRef:
name: nlp-pvc-inquery
namespace: nlp
capacity: #容量
storage: 5Gi
accessModes: #访问模式
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle #回收策略
storageClassName: slow
nfs:
path: /
server: 172.17.0.2
二、PVC-持久卷申领
持久卷申领(PersistentVolumeClaim,PVC) 表达的是用户对存储的请求。即:PV 卷是集群中的资源,PVC 申领是对这些资源的请求 PVC和PV是一对一绑定的
1. pvc使用时需要理解的几个重要概念
- 资源请求 - Resources
- 访问模式 - AccessModes
- 存储卷模式 - volumeMode
- PV选择条件 - Selector
- 所属存储类 - StorageClass
2. pvc-配置文件样例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nlp-pvc-inquery
#命名空间
namespace: nlp
spec:
# 绑定选择器
selector:
matchLabels:
name: nlp-pv-inquery
# 预绑定-静态绑定-强制绑定(绑定指定名为如下的PV)
volumeName: nlp-pv-inquery
accessModes:
- ReadWriteMany
volumeMode: Filesystem
resources:
requests:
storage: 5Gi
# 所属存储类
storageClassName: nlp
volumes:
- name: pv
persistentVolumeClaim:
claimName: pvc
三、StorageClass-存储类
StorageClass作为对存储资源的抽象定义,对用户设置的PVC申请屏蔽后端存储的细节,由系统自动完成PV的创建和绑定,实现了动态的资源供应。存储类实际可以理解为提供了三个功能:
1、声明所需PV的配置信息用来动态生成pv;
2、声明所属pv的绑定模式
3、作为一种pvc和pv绑定查找的索引
1. StorageClass使用时需要理解的几个重要概念
- 存储制备器 | 提供者 - Privisioner (指定制备 PV的插件类型)
- 参数 - Parameters (不同的Provisioner包括不同的参数设置)
- 回收策略 - reclaimPolicy(动态生成pv的回收策略)
- 设为默认的StorageClass - (需要启动准入控制器DefaultStorageClass)**
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
# 设置为默认存储类
annotations:
storageclass.beta.kubernetes.io/is-default-class="true"
# 无制备器
privisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
四、PV 和 PVC 绑定方式
PV 和 PVC 绑定流程:实际上就是PV 控制器分别对 PV & PVC 不断进行独立的协调同步判断操作
1. PV 和 PVC静态绑定 | 预绑定
1.1 - 静态绑定具体使用
通过在 PV 的 Spec.ClaimRef 或者 PVC 的 Spec.VolumeName 字段下预填配置信息,进行预绑定
实际使用中,需结合具体需求采取一种方法,或两种方法同时进行预绑定操作。
1.2 - PVC 协调同步过程
- 对于未绑定的 PVC ,先看 PVC 的 VolumeName 是否为空。
- 若为空,寻找匹配的 PV 。若发现某一个 PV 的 ClaimRef 已经指向该 PVC ,则直接使用。
- 若不为空,寻找对应的 PV 并尝试与之绑定
- 对于已经绑定的 PVC,尝试检查绑定状态,并更新对象当发现问题时,比如关联的 PV 已经不存在等。
1.3 - PV 协调同步过程
- 若 ClaimRef 为空,只是将自己更新为 Avaiable 状态,等待被 PVC 消费
- 若 ClaimRef 不为空。以 ClaimRef.UID 是否设置,来区分是 PV 是否被绑定完全。
2. PV 和 PVC 通过storageClass 动态绑定
-
使用内部制备器-填写所需配置信息
参考:动态卷制备 -
使用外部驱动需要先创建制备器
参考:nfs动态制备:NFS Ganesha 服务器和外部驱动
五、参考:
PV 和 PVC 绑定流程及预绑定 (Pre-Binding)
PV、PVC、StorageClass概念详解
官网链接
更多推荐
已为社区贡献1条内容
所有评论(0)