写点什么

20 k8s 之持久性存储卷

  • 2021 年 11 月 20 日
  • 本文字数:1274 字

    阅读完需:约 4 分钟

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 动态预配功能


发布于: 1 小时前阅读数: 5
用户头像

InfoQ签约作者 2018.11.30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
20 k8s之持久性存储卷