Bootstrap

20 k8s之持久性存储卷

PV(PersistentVolume)PVC(PersistentVolumeClaim)就是在用户与存储服务之间添加的一个中间层,管理员事先根据PV支持的存储卷插件及适配的存储方案(目标存储系统)细节定义好可以支撑存储卷的底层存储空间,而后由用户通过PVC声明要使用的存储特性来绑定符合条件的最佳PV定义存储卷,从而实现存储系统的使用与管理职能的解耦,大大简化了用户使用存储的方式。

PV是由集群管理员于全局级别配置的预挂载存储空间,它通过支持的存储卷插件及给定的配置参数关联至某个存储系统上可用数据存储的一段空间,这段存储空间可能是Ceph存储系统上的一个存储映像、一个文件系统(CephFS)或其子目录,也可能是NFS存储系统上的一个导出目录等。PV将存储系统之上的存储空间抽象为Kubernetes系统全局级别的API资源,由集群管理员负责管理和维护

PV和PVC是一对一的关系:一个PVC仅能绑定一个PV,而一个PV在某一时刻也仅可被一个PVC所绑定。为了能够让用户更精细地表达存储需求,PV资源对象的定义支持存储容量、存储类、卷模型和访问模式等属性维度的约束。相应地,PVC资源能够从访问模式、数据源、存储资源容量需求和限制、标签选择器、存储类名称、卷模型和卷名称等多个不同的维度向PV资源发起匹配请求并完成筛选。

Retain(保留):删除PVC后将保留其绑定的PV及存储的数据,但会把该PV置为Released状态,它不可再被其他PVC所绑定,且需要由管理员手动进行后续的回收操作:首先删除PV,接着手动清理其关联的外部存储组件上的数据,最后手动删除该存储组件或者基于该组件重新创建PV。

Delete(删除):对于支持该回收策略的卷插件,删除一个PVC将同时删除其绑定的PV资源以及该PV关联的外部存储组件;动态的PV回收策略继承自StorageClass资源,默认为Delete。多数情况下,管理员都需要根据用户的期望修改此默认策略,以免导致数据非计划内的删除。

PVC保护机制,其目的在于,用户删除了仍被某Pod对象使用中的PVC时,Kubernetes不会立即移除该PVC,而是会推迟到它不再被任何Pod对象使用后方才真正执行删除操作。处于保护阶段的PVC资源的status字段值为Termination,并且其Finalizers字段值中包含有kubernetes.io/pvc-protection

PersistentVolume是隶属于Kubernetes核心API群组中的标准资源类型,它的目标在于通过存储卷插件机制,将支持的外部存储系统上的存储组件定义为可被PVC声明所绑定的资源对象。但PV资源隶属于Kubernetes集群级别,因而它只能由集群管理员进行创建。这种由管理员手动定义和创建的PV被人们习惯地称为静态PV资源

PersistentVolumeClaim也是Kubernetes系统上标准的API资源类型之一,它位于核心API群组,属于名称空间级别。用户提交新建的PVC资源最初处于Pending状态,由PV控制器找寻最佳匹配的PV并完成二者绑定后,两者都将转入Bound状态,随后Pod对象便可基于persistentVolumeClaim存储卷插件配置使用该PVC对应的持久存储卷。

动态PV预配功能的使用有两个前提条件:支持动态PV创建功能的卷插件,以及一个使用了对应于该存储卷插件的后端存储系统的StorageClass资源。不过,Kubernetes并非内置支持所有的存储卷插件的PV动态预配功能