PersistentVolume(PV)

持久卷(PersistentVolume,PV)是集群中的一块存储,可以由管理员事先制备, 或者使用存储类(Storage Class)来动态制备

  • PV 持久卷是集群资源,就像节点也是集群资源一样。

  • PV 持久卷拥有独立于任何使用 PV 的 Pod 的生命周期,管理员可以单独对PV进行增删改查,不受Pod的影响。

  • 和单独配置Volume类似,PV也可以使用NFS、GFS、CEPH等常用的存储后端,并且可以提供更加高级的配置,比如访问模式、空间大小以及回收策略等。

持久卷申领(PersistentVolumeClaim,PVC) 表达的是用户对存储的请求。概念上与 Pod 类似:

  • Pod 会耗用节点资源,而 PVC 申领会耗用 PV 资源

  • Pod 可以请求特定数量的资源(CPU 和内存);同样 PVC 申领也可以请求特定的大小和访问模式 (例如,可以要求 PV 卷能够以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一来挂载)

PV回收策略

当用户使用完Volume时,可以从API中删除PVC对象,从而允许回收资源。回收策略会告诉PV如何处理该Volume。目前回收策略可以设置为RetainRecycleDelete

保留(Retain)

回收策略 Retain 使得用户可以手动回收资源:

  • 当 PersistentVolumeClaim 对象被删除时,PersistentVolume 卷仍然存在,对应的数据卷被视为"已释放(released)"。

  • 由于卷上仍然存在这前一申领人的数据,该卷还不能用于其他申领。

管理员可以通过下面的步骤来手动回收该卷:

  1. 删除 PersistentVolume 对象。与之相关的、位于外部基础设施中的存储资产 (例如 AWS EBS 或 GCE PD 卷)在 PV 删除之后仍然存在。

  2. 根据情况,手动清除所关联的存储资产上的数据

  3. 手动删除所关联的存储资产。

如果你希望重用该存储资产,可以基于存储资产的定义创建新的 PersistentVolume 卷对象。

删除(Delete)

对于支持 Delete 回收策略的卷插件,删除动作会将 PersistentVolume 对象从 Kubernetes 中移除,同时也会从外部基础设施(如 AWS EBS 或 GCE PD 卷)中移除所关联的存储资产

动态制备的卷会继承其 StorageClass 中设置的回收策略, 该策略默认为 Delete

回收(Recycle)

回收策略 Recycle 已被废弃,取而代之的建议方案是使用动态制备。

PV访问策略

目前支持的访问策略如下:

  • ReadWriteOnce:可以被单节点读写模式挂载,命令行中可以被缩写为RWO。

  • ReadOnlyMany:可以被多个节点只读模式挂载,命令行中可以被缩写为ROX。

  • ReadWriteMany:可以被多个节点读写模式挂载,命令行中可以被缩写为RWX。

  • ReadWriteOncePod:只能被一个Pod读写的模式挂载,命令中可以被缩写为RWOP。

虽然PV在创建时可以指定不同的访问策略,但是也要后端的存储支持才行。比如一般情况下大部分块存储是不支持ReadWriteMany的。

PV的状态

在创建PV后,可以通过kubectl get pv查看已经创建的PV的状态:

$ kubectl get pv
NAME          CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS    REASON   AGE
hostpath-pv   5Gi        RWO            Delete           Available           slow-hostpath            4s

字段STATUS表示当前PV的状态,会有以下几种状态:

  • Available:可用,没有被PVC绑定的空闲资源。

  • Bound:已绑定,已经被PVC绑定。

  • Released:已释放,PVC被删除,但是资源还未被重新使用。

  • Failed:失败,自动回收失败。

最后更新于