1、PV 引入场景:
① Deployment 管理的 pod,在做镜像升级的过程中,会产生新的 pod并且删除旧的 pod ,新旧 pod 之间如何复用数据?
② 宿主机宕机的时候,如何实现带卷迁移?
③ 多个 pod 之间,如果想要共享数据,应该如何去声明?
2、PV 和 PVC 概念:
PV(持久卷):PV 独立于 Pod 存在,是集群中的一块网络存储资源。
PVC(持久卷声明):PVC是用户请求存储的一种方式,定义了所需存储的属性,例如存储大小和访问模式。
( PV是实际的存储资源 ;PVC是用户对存储资源的需求描述 )
3、PV 产生方式:
(1) 静态产生方式 - 静态 Provisioning:
静态 Provisioning:由集群管理员事先去规划这个集群中的用户会怎样使用存储,它会先预先创建一些 PV;然后用户提交自己的存储需求(也就是 PVC)的时候,K8s 内部相关组件会帮助它把 PVC 和 PV 做绑定 ;之后用户再通过 pod 去使用存储的时候,就可以通过 PVC 找到相应的 PV。
(2) 动态 Dynamic Provisioning:
集群管理员不预分配 PV,而是写了一个模板文件,这个模板文件是用来表示创建某一类型存储(块存储,文件存储等)所需的一些参数。用户只需要提交自身的存储需求,也就是 PVC 文件,并在 PVC 中指定使用的存储模板(StorageClass)。
K8s 集群中的管控组件,会结合 PVC 和 StorageClass 的信息动态,生成用户所需要的存储(PV),将 PVC 和 PV 进行绑定后,pod 就可以使用 PV 了。通过 StorageClass 配置生成存储所需要的存储模板,再结合用户的需求动态创建 PV 对象,做到按需分配。
4、PV Spec 重要字段解析:
Capacity:存储对象的大小;
AccessModes:使用这个 PV 的方式,它有三种:
- 一种是单 node 读写访问;
- 第二种是多个 node 只读访问,是常见的一种数据的共享方式;
- 第三种是多个 node 上读写访问。
ReclaimPolicy:用户方 PV 的 PVC 在删除之后, PV 应该做如何处理?
- delete,也就是说 PVC 被删除之后,PV 也会被删除;
- Retain,就是保留,保留之后,后面这个 PV 需要管理员来手动处理。
5、PV 流转状态:
首先在创建 PV 对象后,它会处在短暂的pending 状态;等真正的 PV 创建好之后,它就处在 available 状态。
available 状态意思就是可以使用的状态,用户在提交 PVC 之后,被 K8s 相关组件做完 bound(即:找到相应的 PV),这个时候 PV 和 PVC 就结合到一起了,此时两者都处在 bound 状态。
当用户在使用完 PVC,将其删除后,这个 PV 就处在 released 状态,之后它应该被删除还是被保留呢就会依赖 ReclaimPolicy。