一、概述
在Kubenetes中,对存储资源的管理方式和计算资源(CPU/内存),截然不同。为了能够屏蔽底层存储实现的细节,让用户方便使用及管理员方便管理,Kubernetes从1.0版本就已经引入了Persistent Volume(PV)和Persistent Volume Claim(PVC)
两个资源对象来实现存储管理系统。
PV(持久卷)是对存储资源的抽象,将存储定义为一种容器应用可以使用的资源,PV由管理员创建和配置,它与存储提供商的具体实现直接相关,例如:GlusterFS、iSCSI、RBD或GCE和AWS公有云提供的共享存储,通过插件式的机制进行管理,供应用访问和使用。除EmptyDir类型存储卷,PV的生命周期独立使用它的Pod。
PVC是用户对存储资源的一个申请。就像Pod消耗Node的资源一样,PVC消耗PV的资源。PVC可以申请存储空间的大小(Size)和访问模式(例如ReadWriteOnce、ReadOnlyMany或ReadWriteMany)。
使用PVC申请的存储空间仍然不满足应用对存储设备的各种需求。在很多情况下,应用程序对存储设备的特性和性能都有不同的要求,包括读写速度、并发性能、数据冗余等要求。Kubernetes从1.4版本开始引入一个新的资源对象StorageClass,用于标记存储资源和性能,根据PVC的需求动态供给合适的PV资源。在kubernetes1.6版本时,StorageClass和存储资源动态供应的机制得到完善,实现了存储卷的按需创建,在共享存储的自动化管理进程中实现了重要的一步。
通过StorageClass的定义,管理员可以将存储资源定义为某种类型(Class),正如存储设备对自身的配置描述(Profile),例如快速存储、慢速存储、有数据冗余、无数据冗余等。用户可以根据StorageClass的描述就可以直观的得知各种存储资源的特性,根据应用对存储资源的需求去申请存储资源了。
Kubernetes从1.9版本开始引入容器存储接口Container Storage Interface(CSI)机制,目标是在Kubernetes和外部存储系统之间建立一套标准的存储管理接口,具体的存储驱动由存储提供商在Kubenetes之外提供,并通过该标准接口为容器提供存储服务类似CRI和CNI,目标是将Kubernetes代码和存储相关代码解耦。
二、PV和PVC的工作原理
可以将PV看做可用的存储资源,PVC则是对存储资源的需求。PV