> 文章列表 > 叶工好容1-kubernetes存储

叶工好容1-kubernetes存储

叶工好容1-kubernetes存储

Volume

数据持久化存储, pod与外部存储、pod与pod间、pod内多容器间的一种数据共享方式。

根据真实存储位置与Node的关系分为本地存储( emptyDir / hostPath)和外部存储( NFS/Ceph)。

本地存储:
emptyDir:与Pod同生同死的pod内使用的空存储。
hostPath: 本质是带状态的emptyDir,是拿node上的目录做为emptyDir存储。

外部存储,也是独立存储:
为了扩展和安全,我们也可以将数据存储到外部的远程磁盘上,需要依赖于分布式存储的基础设施。

Persistent Volume

PV是一种独立的k8s资源,它与pod没任何关系,是pod中通过PVC(Persistent Volume Claim)选择一个合适的PV与自身绑定的。不要简单认为PVC是为PV绑定做服务的,恰恰相反,PV只是PVC的一种实现。Pod在PVC中声明了所需存储资源的要求(存储大小、可读写权限等),PV Controller根据算法为其寻找匹配的PV并挂载到pod中。

PV根据使用方式分为3类:
Static PV (静态):运维人员提前声明好PV,使用时创建PVC,然后由pod来绑定。这里关注的主体是PV具体的对象。
Dynamic PV (动态):当PVC规模上去以后,静态方式已经无法维护,需要根据PVC使用需求直接创建PV。运维人员提前声明好StorageClass(PV模板),使用时创建PVC,然后由pod来绑定。这里关注的主体是PV的模板。
Local PV (本地):如果PV依赖于NFS、Ceph这种分布式存储,因为网络上的开销会带来性能损耗。像数据库这种对磁盘有高要求的场景,可以通过LocalPV的方式直接将PVC映射到宿主机的磁盘上。

hostPath VS Local PV
可以看到两者的本质是一样的,都是pod利用了宿主机的磁盘,功能上存在重复性,那么两者有什么区别呢?
简单说,Local PV就是为了解决hostPath的缺陷而存在的,因为当生产规模复杂度上去后,运维人员根本不会记得什么node上有什么样的目录文件,也就做不到hostPath的精准调度了,而通过Local PV将这些复杂目录以k8s对象形式来管理,简单明了了很多。

关于分布式存储

NFS:一种分布式的共享文件系统,有点像windows的共享文件夹,适合大文件、视频、图像的存储。这里不再赘述,因为对于k8s来说,NFS已经趋于被抛弃了。
Ceph:适合跨集群小文件存储,是一个最有名的私有云存储解决方案。但它本身的作用不仅仅在于对于k8s提供服务。
支持多种存储格式:
1、块存储RBD,应用于磁盘映射。
2、对象存储RGW,键值存储,上传下载数据
3、文件系统存储ceph-fs,共享文件形式来使用。

k8s存储解决方案

Rook:一种开源的云原生存储编排框架,可以在k8s中通过operator的方式来使用分布式存储,其本身是一种框架,除开Ceph以外可以对接多种存储,但Rook已经将对nfs以及cassandra的标记为移除,意味着Ceph是它当前唯一仍然在支持的方案。