但同时,本地磁盘方案也在可用性和扩容方面存在着巨大的缺陷:
- 本地磁盘无法提供节点级别的高可用,当物理节点发生故障时,应用无法被恢复到其他节点。如果业务系统有节点级高可用的要求,则必须由业务系统自己实现数据层面的高可用,这***大地增加了业务系统的复杂度。
- 本地磁盘也无法满足 K8s 环境下的业务敏捷性需求:业务使用的存储空间受限于本地磁盘的大小,达到磁盘空间的上限后,增加磁盘的操作步骤复杂,要想使用新增的硬盘空间,必须手工修改 Pod 中的配置,难以实现敏捷的平滑扩容。此外,要想对物理节点内的硬盘实现高可用,就需要部署 RAID,这也是相当费时、费力、费钱的方案,难以实现在短时间内为大量的应用系统配置足够的存储容量。
总的来说,本地磁盘的方案只适合在业务容器化的初期阶段进行小规模试用,或者作为较低重要性的数据存储使用,难以在大规模生产场景下被广泛使用。
商用存储既包括软件定义式存储(如分布式存储),也包括传统的集中式存储。与专为 K8s 环境而设计的 K8s 原生存储不同,商用存储通常情况下主要为裸金属和虚拟化环境服务,由于在企业中被广泛使用,通过 CSI 插件让商用存储获得容器存储支持能力,是***方便且经济的选择。
然而,正因为商用存储在本质上更侧重虚拟化时代的功能特性,一些厂商推出的存储方案对云原生环境的支持能力仍有欠缺。另外值得注意的是,CNCF 认可的“云原生存储”不仅包含 K8s 原生存储,也包含基于不同架构的商用存储方案,产品间特性与性能差异较大,因此需要用户多加甄别。
然而,传统集中式存储的架构(存储控制器加盘柜的形式)决定了它不能很好满足云原生高并发与敏捷性需求:
- 尽管集中式存储可以为单个业务系统提供较高的性能***,但是当面临大量业务并发访问时,存储控制器则成为了性能瓶颈。如果想要满足大量业务对性能需求,需要采用多套集中式存储系统,存储系统的管理成本也会急剧上升。
- 有碍于盘柜形式,集中式存储扩展能力较差,运维工作量较大,也难以应对短时间内大量 Volume 的并发创建和销毁需求,缺少云原生敏捷性。
不过,市面上可用于 K8s 的分布式存储方案鱼龙混杂,一些产品仅基于开源技术简单包装,其性能、稳定性以及对 K8s 环境的支持能力都难以达到生产级别的标准。建议用户关注具备自研技术的存储方案,并以“生产级”为标准全方位评估产品性能、可用性、可靠性、安全性和可维护性。
更多关于 K8s 原生存储的特性与能力,请参考这篇内容:一文看懂 K8s 持久化存储、云原生存储、容器原生存储、K8s 原生存储有何区别。
目前,主流 K8s 原生存储主要有两种类型:开源产品(以 Rook(基于 Ceph)和 Longhorn 为代表)和闭源商用产品(以 Portworx 和 IOMesh 为代表)。这两种方案都能提供 K8s 原生的数据存储功能,也各有利弊:开源产品没有采购成本,具有技术实力的客户可以自行开发,具有社区支持,但若出现严重故障或漏洞,很难像商业厂商那样通过专业团队提供快速相应、深度解决问题的服务支持。
另外,通过性能测试可以看出,目前基于自研闭源技术的 K8s 存储方案,在性能和稳定性方面要优于开源产品。