概述
持久卷(PersistentVolume,PV)是表示与集群中后端存储卷映射关系的 Kubernetes API 资源。是集群中的资源,由管理员统一配置创建,负责将实际的存储资源抽象化,成为集群的存储基础设施。
持久卷拥有独立于 Pod 的生命周期,可实现 Pod 数据的持久化存储。
管理员可手动创建静态(static)持久卷,或基于存储类生成动态持久卷;开发人员若需要为应用获取存储资源,可通过持久卷声明(PersistentVolumeClaim,PVC)请求,匹配绑定适合的持久卷。
动态持久卷与静态持久卷
平台支持管理员管理两类持久卷,即动态(dynamic)持久卷与静态(static)持久卷。
-
动态持久卷:基于存储类(storageclass)实现。存储类是由管理员创建的,定义“描述”存储资源类别的 Kubernetes 资源,是一种集群相关资源。开发人员创建了关联存储类的持久卷声明后,平台将根据持久卷声明和存储类的参数配置,动态创建适合的持久卷,与持久卷声明绑定,从而实现存储资源的动态分配。
-
静态持久卷:管理员手动创建的持久卷,目前支持创建 HostPath 或 NFS 共享存储 类型的静态持久卷。开发人员创建了不使用存储类的持久卷声明后,平台将根据持久卷声明的参数配置,匹配绑定适合的静态持久卷。
-
HostPath:以节点主机上的文件目录(不支持 local storage)为后端存储,例如:
/etc/kubernetes
。一般仅适用于单计算节点集群下的测试场景。 -
NFS 共享存储:即网络文件系统(Network File System),是较常见的持久卷后端存储。用户和程序可以像访问本地文件一样访问远端系统上的文件。
-
持久卷的生命周期
-
创建(provision):管理员手动创建静态持久卷,创建完成后,持久卷进入 可用 状态;或平台根据关联了存储类的持久卷声明,动态创建适合的持久卷。
-
绑定(bound):静态持久卷被持久卷声明匹配绑定后,进入 已绑定 状态;动态持久卷是匹配持久卷声明的请求而动态创建的,创建成功后即进入 已绑定 状态。
-
使用(use):开发人员将持久卷声明与计算组件的容器实例相关联,使用持久卷映射的后端存储资源。
-
释放(release):开发人员删除持久卷声明后,持久卷被释放。
-
回收(reclaim):持久卷被释放后,根据持久卷或存储类的回收策略参数,对持久卷执行回收操作。