k8s–基础–18.5–存储卷–类型–PVC理论
1、pv
- PersistentVolume(PV)是群集中的一块存储,由管理员配置或使用存储类动态配置。
- PV是集群中的资源,就像节点是集群资源一样。
- PV是容量插件,如Volumes,但其生命周期独立于使用PV的任何单个pod。
- 此API对象捕获存储实现的详细信息,包括NFS,iSCSI或特定于云提供程序的存储系统
2、pvc
- PersistentVolumeClaim(PVC)是一个持久化存储卷,我们在创建pod时可以定义这个类型的存储卷。
- pvc类似于一个pod
- Pod消耗节点资源,PVC消耗PV资源。
- Pod可以请求特定级别的资源(CPU和内存),pvc在申请pv的时候也可以请求特定的大小和访问模式。
- 例如:可以单节点读/写
- 例如:可以多节点只读
3、pv和pvc的生命周期
- PV是群集中的资源。
- PVC是对这些资源的请求,并且还充当对资源的索赔检查。
- PV和PVC之间的相互作用遵循以下生命周期
- pv的供应方式
- 绑定
- 使用
- 回收策略
3.1、pv的供应方式
配置PV的两种方式
- 静态
- 动态
3.1.1、静态
- 集群管理员创建了许多PV。它们包含可供群集用户使用的实际存储的详细信息。
- 它们存在于Kubernetes API中,可供使用。
3.1.2、动态
- 当管理员创建的静态PV都不匹配用户的PersistentVolumeClaim时,群集可能会尝试为PVC专门动态配置卷。
- 动态配置卷配置基于StorageClasses
- PVC必须请求存储类,管理员必须已创建并配置该类,以便进行动态配置。
3.2、绑定
- 用户创建pvc并指定需要的资源和访问模式。
- 在找到可用pv之前,pvc会保持未绑定状态
- pvc和pv它们是一一对应的关系,pv如果被pvc绑定了,就不能被其他pvc使用
- 我们在创建pvc的时候,应该确保和底下的pv能绑定,如果没有合适的pv,那么pvc就会处于pending状态。
3.3、使用
- 需要找一个存储服务器,把它划分成多个存储空间
- k8s管理员可以把这些存储空间定义成多个pv
- 创建pvc,通过定义需要使用的pv的大小和对应的访问模式,找到合适的pv
- 在定义pod时使用这个pvc的存储卷
3.4、回收策略
- 使用pvc做为存储卷,当创建pod时:pvc会和pv绑定
- 使用pvc做为存储卷,当删除pod时:pvc和pv绑定就会解绑,pv卷里的数据需要怎么处理
- 保留(Retain)
- 回收(Recycle,不推荐使用,1.15可能被废弃了)
- 删除(Delete)
3.4.1、Retain
- 当删除pvc的时候,pv仍然存在,处于released状态,但是它不能被其他pvc绑定使用,里面的数据还是存在的,当我们下次再使用的时候,数据还是存在的
- 是默认的回收策略,管理员能够通过下面的步骤手工回收存储卷
- 删除PV:在PV被删除后,在外部设施中相关的存储资产仍然还在
- 手工删除遗留在外部存储中的数据
- 手工删除存储资产,如果需要重用这些存储资产,则需要创建新的PV。
3.4.2、Delete
删除pvc时即会从Kubernetes中移除PV,也会从相关的外部设施中删除存储资产,例如AWS EBS, 或者Cinder存储卷。
4、注意
- 我们每次创建pvc的时候,需要事先有划分好的pv,可能不方便,那么可以在创建pvc的时候直接动态创建一个pv这个存储类,pv事先是不存在的
- pvc和pv绑定,如果使用默认的回收策略retain,那么删除pvc之后,pv会处于released状态,我们想要继续使用这个pv,需要手动删除pv,kubectl delete pv pv_name,删除pv,不会删除pv里的数据,当我们重新创建pvc时还会和这个最匹配的pv绑定,数据还是原来数据,不会丢失。