0%

Kubernets 之 Persistent Volume 和 Persistent Volume Claim 的生命周期

PV 和 PVC的生命周期可以分为4个阶段:Provisioning(置备)、Binding(绑定)、Using(使用)和Reclaiming(回收)。
本文主要介绍这四个阶段。

Provisioning(置备)

这个阶段主要的任务就是去置备PV给后续的阶段使用。总共有两种方式置备PV:静态和动态。

静态方式:集群管理员创建一定数量可以被集群用户使用的PV。
动态方式:根据PVC创建动态创建PV。当没有任何静态的PV能够匹配到PVC的时候,集群就会根据PVC去创建PV。这种方式需要集群管理员提前创建和配置StorageClass。如果不希望根据PVC动态创建PV,可以将PVC中的spec.storageClassName设置为””。

Binding(绑定)

这个阶段是将PV绑定到PVC上,这种绑定关系是一对一的,通过ClaimRef来实现PV和PVC的双向绑定。

当创建一个新的PVC的时候,会先查找是否有未绑定的PV,如果有,就将其与改PVC绑定。如果没有则会根据PVC去尝试动态置备PV(不一定会成功),这样的话,这个PVC和其动态置备的PV会始终绑定在一起。
当PVC没有任何可以匹配到的PV的时候,其状态为unbound。当它匹配到PV的时候,其状态为bound

Using(使用)

Pod会将PVC作为volume。集群会更通过PVC找到其绑定的PV,然后其挂载到Pod上。当使用PVC的Pod存在时,该PVC就会处于活动状态。

为了保证PVC处于活动状态以及该PVC绑定的PV不会从系统中删除,因为一旦被删除,数据可能会丢失。Kubernetes提供了一个功能:使用中的存储对象保护(Storage Object in Use Protection)。因此,当用户删除一个处于活动状态的PVC的时候,该PVC并不会被删除,直到PVC没有被任何pod使用。同样,如果删除一个已经绑定了PVC的PV,PV也不会被删除,直到PV没有被任何PVC绑定。

Reclaiming(回收)

这个阶段主要指的是PV的回收。当PV被PVC释放之后(解除绑定),集群将会根据回收策略回收PV。
当前,支持3个策略:Retain(保留)、Recycle(再利用)、Delete(删除)

Retained(保留):该策略允许手动回收这些存储资源。当其绑定的PVC删除之后,PV仍然保留,但是不会被其它的PVC再次绑定。
Delete(删除): 该策略将会删除PV以及其关联的外部存储资源,比如AWS EBS、Azure Disk。StorageClass默认的回收策略是Delete,根据其动态置备的PV也会继承该值。
Recycle(再利用,已弃用):该策略会删除PV上的所有数据,然后使其可以再次被PVC绑定。