设计师接单的网站,网站建设首先要学会什么,长沙服务好的网络营销,老外做的汉字网站当今云原生环境中#xff0c;Kubernetes#xff08;K8s#xff09;已成为既定的容器编排工具。随着 K8s 的普及#xff0c;存储也成为 K8s 用户关注的一个重要问题#xff1a;为了满足不同的场景需求#xff0c;K8s 可以支持基于不同架构的多种存储方案。这些方案间有什么… 当今云原生环境中KubernetesK8s已成为既定的容器编排工具。随着 K8s 的普及存储也成为 K8s 用户关注的一个重要问题为了满足不同的场景需求K8s 可以支持基于不同架构的多种存储方案。这些方案间有什么区别用户应如何选择本文将从架构角度出发详细介绍本地磁盘、CSI 外接商用存储、K8s 原生存储 3 种 K8s 持久化存储方案并在文末对比分析各个方案的能力与优劣势。 本地磁盘
首先K8s 支持用户直接将本地盘插到服务器上作为存储设备。由于磁盘和应用系统中间的 I/O 路径最短本地磁盘可以提供最佳的性能。同时 RAID 提供了一定程度的可靠性的保证可以避免因单个磁盘故障而导致的数据丢失。因此目前有大量用户采用这种方式为有状态的应用提供存储服务。
但同时本地磁盘方案也在可用性和扩容方面存在着巨大的缺陷
本地磁盘无法提供节点级别的高可用当物理节点发生故障时应用无法被恢复到其他节点。如果业务系统有节点级高可用的要求则必须由业务系统自己实现数据层面的高可用这极大地增加了业务系统的复杂度。本地磁盘也无法满足 K8s 环境下的业务敏捷性需求业务使用的存储空间受限于本地磁盘的大小达到磁盘空间的上限后增加磁盘的操作步骤复杂要想使用新增的硬盘空间必须手工修改 Pod 中的配置难以实现敏捷的平滑扩容。此外要想对物理节点内的硬盘实现高可用就需要部署 RAID这也是相当费时、费力、费钱的方案难以实现在短时间内为大量的应用系统配置足够的存储容量。
此外该方案无论是部署还是故障后的修复都需要大量人力的参与这使得本地存储方案的运维成本大大提高。同时由于节点间的存储空间无法共享也很容易造成存储空间的浪费。
总的来说本地磁盘的方案只适合在业务容器化的初期阶段进行小规模试用或者作为较低重要性的数据存储使用难以在大规模生产场景下被广泛使用。
CSI 外接商用存储
为 K8s 提供持久化存储的另一种方式是通过容器存储接口CSI将 K8s 平台与底层存储基础设施连接起来从而允许 K8s 动态调配和配置存储、实现存储操作自动化。国际分析机构 GigaOm 将这些外接存储方案进一步划分为商用存储Enterprise Storage和 K8s 原生存储Kuernetes-Native Storage两个类型。
商用存储既包括软件定义式存储如分布式存储也包括传统的集中式存储。与专为 K8s 环境而设计的 K8s 原生存储不同商用存储通常情况下主要为裸金属和虚拟化环境服务由于在企业中被广泛使用通过 CSI 插件让商用存储获得容器存储支持能力是非常方便且经济的选择。
然而正因为商用存储在本质上更侧重虚拟化时代的功能特性一些厂商推出的存储方案对云原生环境的支持能力仍有欠缺。另外值得注意的是CNCF 认可的“云原生存储”不仅包含 K8s 原生存储也包含基于不同架构的商用存储方案产品间特性与性能差异较大因此需要用户多加甄别。
外接集中式存储
K8s 集群外接集中式存储提供了可远程访问共享存储的能力。和本地磁盘的方案相比集中式存储解决了应用系统高可用的问题当业务 Pod 所在的服务器发生故障时可以通过共享存储在其他节点上把应用拉起来很多基于集中式存储的商用存储方案也提供快照、克隆、容灾等高级功能。此外由于数据集中存储也一定程度解决了本地存储对磁盘空间浪费的问题。
然而传统集中式存储的架构存储控制器加盘柜的形式决定了它不能很好满足云原生高并发与敏捷性需求
尽管集中式存储可以为单个业务系统提供较高的性能保证但是当面临大量业务并发访问时存储控制器则成为了性能瓶颈。如果想要满足大量业务对性能需求需要采用多套集中式存储系统存储系统的管理成本也会急剧上升。有碍于盘柜形式集中式存储扩展能力较差运维工作量较大也难以应对短时间内大量 Volume 的并发创建和销毁需求缺少云原生敏捷性。
外接分布式存储
通过将数据分散存储在网络上的多台独立设备上分布式存储具有优秀的横向扩展能力和敏捷性在对接基于分布式计算架构的云原生应用时性能和高可用方面也远优于集中式存储。Gartner 在《如何在容器与 Kubernetes 环境进行存储选型和实践》分析报告中也强调云原生数据服务应该使用的存储必须“基于分布式架构可以任意规模部署”。
不过市面上可用于 K8s 的分布式存储方案鱼龙混杂一些产品仅基于开源技术简单包装其性能、稳定性以及对 K8s 环境的支持能力都难以达到生产级别的标准。建议用户关注具备自研技术的存储方案并以“生产级”为标准全方位评估产品性能、可用性、可靠性、安全性和可维护性。
K8s 原生存储
K8s 原生存储是专为支持容器而构建的存储方案。这种存储与 K8s 的集成程度更深具有容器级别的数据服务粒度和自动化存储资源运维能力也因此能够为 K8s 上的容器应用提供灵活扩展能力与自动化运维能力。
更多关于 K8s 原生存储的特性与能力请参考这篇内容一文看懂 K8s 持久化存储、云原生存储、容器原生存储、K8s 原生存储有何区别。
目前主流 K8s 原生存储主要有两种类型开源产品以 Rook基于 Ceph和 Longhorn 为代表和闭源商用产品以 Portworx 和 IOMesh 为代表。这两种方案都能提供 K8s 原生的数据存储功能也各有利弊开源产品没有采购成本具有技术实力的客户可以自行开发具有社区支持但若出现严重故障或漏洞很难像商业厂商那样通过专业团队提供快速相应、深度解决问题的服务支持。另外通过性能测试可以看出目前基于自研闭源技术的 K8s 存储方案在性能和稳定性方面要优于开源产品。欲了解测试详情请阅读主流 K8s 持久化存储方案特性与性能对比Longhorn / Rook / OpenEBS / Portworx / IOMesh。
总结不同架构的 K8s 持久存储方案优劣势分析 基于以上分析结合 K8s 支撑生产级核心应用系统的存储需求以常见的数据服务为业务场景我们通过下面的表格整理了各个存储方案在架构、性能、存储资源共享*、扩展性、高可用、安全性、运维难度、K8s 原生支持**等方面的能力供读者参考。 * 指支持有状态应用跨节点灵活调度、多 Pod 存储同时读写。 ** 指与 K8s 紧密集成可充分发挥 K8s 轻量化、自动化、标准化、敏捷等优势。 由此可见K8s 原生存储对 K8s 环境有状态应用的支持能力总体来说更具优势。目前国内首款 K8s 原生的企业级分布式存储是志凌海纳 SmartX 推出的 IOMesh。IOMesh 以 SmartX 自主研发并经过生产环境验证的分布式块存储为核心基于容器化部署模式可无缝融入 K8s 原生的开发和运维体系对 K8s 集群内的存储资源进行整合与管理为运行在 K8s 集群上的各类有状态应用提供稳定、高性能的持久化存储资源。欲了解方案详情您可阅读博客、观看产品解读视频或点击获取《IOMesh 用户指南》。 参考文章
1. Key Criteria for Evaluating Kubernetes Data Storage Solutions v4.0GigaOm2023 https://research.gigaom.com/report/key-criteria-for-evaluating-kubernetes-data-storage-solutions/
2. How Do I Approach Storage Selection and Implementation for Containers and Kubernetes DeploymentsGartner2022 https://www.gartner.com/document/4013517