文章目录
1. pv与pvc
1.1 区别
存储的管理是一个与计算实例的管理完全不同的问题。PersistentVolume 子系统为用户 和管理员提供了一组 API,将存储如何供应的细节从其如何被使用中抽象出来。 为了实现这点,我们引入了两个新的 API 资源:
PersistentVolume
和PersistentVolumeClaim
- 持久卷(PersistentVolume,PV)是集群中的一块存储,可以由管理员事先供应,或者 使用存储类(Storage Class)来动态供应。 持久卷是集群资源,就像节点也是集群资源一样。PV 持久卷和普通的 Volume 一样,也是使用 卷插件来实现的,只是它们拥有独立于任何使用 PV 的 Pod 的生命周期。 此 API 对象中记述了存储的实现细节,无论其背后是 NFS、iSCSI 还是特定于云平台的存储系统。
- 持久卷声明(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。概念上与 Pod 类似。 Pod 会耗用节点资源,而 PVC 申领会耗用 PV 资源。Pod 可以请求特定数量的资源(CPU 和内存);同样 PVC 申领也可以请求特定的大小和访问模式 (例如,可以要求 PV 卷能够以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一来挂载,参见访问模式)。
1.2 声明周期
PV 卷是集群中的资源。PVC 声明是对这些资源的请求,也被用来执行对资源的申领检查。
pv卷的提供方式:
- 静态:集群管理员创建若干 PV 卷。这些卷对象带有真实存储的细节信息,并且对集群 用户可用(可见)。PV 卷对象存在于 Kubernetes API 中,可供用户消费(使用)
- 动态:当管理员创建的静态PV都不匹配用户的PVC时,集群可能会尝试专门地供给volume给PVC。这种供给基于StorageClass
绑定:
PVC与PV的绑定是一对一的映射。没找到匹配的PV,那么PVC会无限期得处于unbound未绑定状态。
使用:
Pod使用PVC就像使用volume一样。集群检查PVC,查找绑定的PV,并映射PV给Pod。对于支持多种访问模式的PV,用户可以指定想用的模式。一旦用户拥有了一个PVC,并且PVC被绑定,那么只要用户还需要,PV就一直属于这个用户。 用户调度Pod,通过在Pod的volume块中包含PVC来访问PV。
释放:
当用户使用PV完毕后,他们可以通过API来删除PVC对象。当PVC被删除后,对应的PV就被认为是已经是“released" 了,但还不能再给另外一个PVC使用。 前一个PVC的属于还存在于该PV中,必须根据策略来处理掉。
回收:
PV的回收策略告诉集群,在PV被释放之后集群应该如何处理该PV。当前,PV可以被Retained (保留) 、Recycled (再利用)或者Deleted (删除)。保留允许手动地再次声明资源。对于支持删除操作的PV卷,删除操作会从Kubemetes中移除PV对象,还有对应的外部存储(如AWS EBS,GCE PD,Azure Disk,或者 Cinder volume)。动态供给的卷总是会被删除。
2. pv持久卷
每个 PV 对象都包含:
spec
:卷的规约status
:卷的状态。
2.1 容量 capacity
一般而言,每个 PV 卷都有确定的存储容量。 容量属性是使用 PV 对象的 capacity
属性来设置的。
目前,存储大小是可以设置和请求的唯一资源。 未来可能会包含 IOPS、吞吐量等属性。
2.2 卷模式 volumeModes
针对 PV 持久卷,Kuberneretes 支持两种卷模式(volumeModes):
- Filesystem(文件系统) (默认):volumeMode 属性设置为 Filesystem 的卷会被 Pod 挂载(Mount) 到某个目录。 如果卷的存储来自某块设备而该设备目前为空,Kuberneretes 会在第一次挂载卷之前 在设备上创建文件系统。
- Block(块):可以将 volumeMode 设置为 Block,以便将卷作为原始块设备来使用。 这类卷以块设备的方式交给 Pod 使用,其上没有任何文件系统。 这种模式对于为 Pod 提供一种使用最快可能方式来访问卷而言很有帮助,Pod 和 卷之间不存在文件系统层。另外,Pod 中运行的应用必须知道如何处理原始块设备。
2.3 访问模式 accessModes
PersistentVolume 卷可以用资源提供者所支持的任何方式挂载到宿主系统上。 如下表所示,提供者(驱动)的能力不同,每个 PV 卷的访问模式都会设置为 对应卷所支持的模式值。 例如,NFS 可以支持多个读写客户,但是某个特定的 NFS PV 卷可能在服务器 上以只读的方式导出。每个 PV 卷都会获得自身的访问模式集合,描述的是 特定 PV 卷的能力。
访问模式有:
- ReadWriteOnce -该volume只能被单个节点以读写的方式映射
- ReadOnlyMany --该volume可以被多个节点以只读方式映射
- ReadWriteMany -该volume可以被多个节点以读写的方式映射
在命令行接口(CLI)中,访问模式可以简写为:
- RWO - ReadWriteOnce
- ROX - ReadOnlyMany
- RWX - ReadWriteMany
重要提醒! 每个卷只能同一时刻只能以一种访问模式挂载,即