K8s 持久化存储有几种方式?一文了解本地盘/CSI 外接存储/K8s 原生存储的优缺点

news2024/12/22 4:01:59

当今云原生环境中,Kubernetes(K8s)已成为既定的容器编排工具。随着 K8s 的普及,存储也成为 K8s 用户关注的一个重要问题:为了满足不同的场景需求,K8s 可以支持基于不同架构的多种存储方案。这些方案间有什么区别?用户应如何选择?本文将从架构角度出发,详细介绍本地磁盘、CSI 外接商用存储、K8s 原生存储 3 种 K8s 持久化存储方案,并在文末对比分析各个方案的能力与优劣势。

01_k8s-storage-architecture-comparison.png

本地磁盘

首先,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 原生支持**等方面的能力,供读者参考。

02_k8s-storage-architecture-comparison.png

* 指支持有状态应用跨节点灵活调度、多 Pod 存储同时读写。
** 指与 K8s 紧密集成,可充分发挥 K8s 轻量化、自动化、标准化、敏捷等优势。

由此可见,K8s 原生存储对 K8s 环境有状态应用的支持能力,总体来说更具优势。目前,国内首款 K8s 原生的企业级分布式存储是志凌海纳 SmartX 推出的 IOMesh。IOMesh 以 SmartX 自主研发并经过生产环境验证的分布式块存储为核心,基于容器化部署模式,可无缝融入 K8s 原生的开发和运维体系,对 K8s 集群内的存储资源进行整合与管理,为运行在 K8s 集群上的各类有状态应用提供稳定、高性能的持久化存储资源。欲了解方案详情,您可阅读博客、观看产品解读视频,或点击获取《IOMesh 用户指南》。

参考文章:

1. Key Criteria for Evaluating Kubernetes Data Storage Solutions v4.0,GigaOm,2023
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 Deployments,Gartner,2022
https://www.gartner.com/document/4013517

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/954500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

easyCode代码插件

1、安装插件 2、连接数据库 3、修改模板 4、生成代码

怎么把pdf压缩的小一点?

怎么把pdf压缩的小一点?在我们日常的学习和工作中,PDF文件是一个非常常见和有用的文件格式,并且受到很多小伙伴的喜欢。有时候,一些PDF文件可能会很大,造成pdf文件较大的原因其实很明确,主要是因为pdf文件中…

Nginx笔记(安装+使用)

Nginx开源版安装、启动 版本区别 Nginx开源版 Nginx plus 商业版 openresty Tengine 安装 将.tar.gz放到linux系统下, 使用tar -zxvf减压 进入减压目录>>>命令安装指令:安装到usr/local/nginx路径下 ./configure --prefix/usr/local/nginxmake &…

西门子V20变频器外部端子功能说明

西门子V20变频器外部端子功能说明 如下图所示,为V20变频器的实物图, 如下图,为西门子V20变频器的外部端子编号和对应功能的基本说明: 具体的端子功能说明可参考以下内容: 更多关于V20变频器的信息可以参考以下链接中的内容:

测试-控制流测试

参考:ysu老师课件(测试老师和软件工程老师的结合了一下) 本文章总结了控制流测试的知识点和习题练习,没有总结如何画控制流图,很简单,跟着思路走就行,但是要注意一定要画合并结点。 目录 路径…

vue引入本地js文件时报错net::ERR_ABORTED 500 (Internal Server Error)

完整报错内容: GET http://192.168.0.000:8080/src/assets/js/websockets.js net::ERR_ABORTED 500 (Internal Server Error) 报错原因: js文件此时放在静态资源文件assets下 解决办法 应该放在public目录下 关联文章

15. 查看开源项目

15.1 parser.add_argument ① 像运行Tensorboar一样,在Terminal终端,可以命令运行.py文件。 ② 如下图所示,Terminal终端运行.py文件时,--变量 后面的值是给变量进行赋值,赋值后再在.py文件中运行。例如 ./datasets/…

msvcp140.dll重新安装的五解决方法及步骤分享(亲测可修复)

在使用电脑的过程中,大概率都会遇到这样的问题,由于找不到msvcp140.dll,无法继续执行代码“,又或者丢失msvcp100.dll,msvcp120.dll等等 我将和大家分享一个关于msvcp140.dll重新安装的解决方法及步骤。这对于经常遇到系…

spring安全代码学习

源代码地址 登录的时候调用整个代码的过程为: 1.在注入的时候,先运行两个Bean注入PasswordEncoder和AuthenticationManagerBean,然后运行configure函数 Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {…

Ceph基础知识和基础架构认识

1 Ceph基础介绍 Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目…

鲁棒优化入门(6)—Matlab+Yalmip两阶段鲁棒优化通用编程指南(上)

0.引言 上一篇博客介绍了使用Yalmip工具箱求解单阶段鲁棒优化的方法。这篇文章将和大家一起继续研究如何使用Yalmip工具箱求解两阶段鲁棒优化(默认看到这篇博客时已经有一定的基础了,如果没有可以看看我专栏里的其他文章)。关于两阶段鲁棒优化与列与约束生成算法的原…

恒运资本:意外!房地产板块风云突变

今天上午,A股震动调整,半导体工业链走强,光刻胶、国家大基金持股、先进封装等板块涨幅居前。 房地产板块开盘小幅冲高后忽然大跳水,之后继续跌落,到上午收盘,板块内逾30只个股跌超5%。珠江股份、首开股份、…

2023年信息安全管理与评估(赛项)评分标准第三阶段夺旗挑战CTF(网络安全渗透)

全国职业院校技能大赛 高职组 信息安全管理与评估 (赛项) 评分标准 第三阶段 夺旗挑战CTF(网络安全渗透) 竞赛项目赛题 本文件为信息安全管理与评估项目竞赛-第三阶段赛题,内容包括:夺旗挑战CTF&#xff08…

京东通过RPA+智能问答,实现微信端智能客服

一 背景 由于业务发展迅速,服务的商家越来越多,目前京东的售后团队都是通过企业微信群和客户进行沟通,平时客户的相关问题也是在企业微信中来讨论解决; 但是售后团队资源有限,而且有的问题客户会重复问,周…

ATA-2022B高压放大器的电子实验案例(案例合集)

ATA-2022B是一款可放大交直流信号的双通道高压放大器。最大输出200Vp-p电压,输出电压范围可根据输出轨调节;直流偏置电压三档可调,连续变化最大可输出160V,可以实现输出非对称信号需求,驱动高压型负载。凭借其优异的指…

项目-IM

zk 启动类实现CommandLineRunner接口,重写run()方法 单聊 群聊 离线消息

uniapp 微信小程序仿抖音评论区功能,支持展开收起

最近需要写一个评论区功能,所以打算仿照抖音做一个评论功能,支持展开和收起, 首先我们需要对功能做一个拆解,评论区功能,两个模块,一个是发表评论模块,一个是评论展示区。接下来对这两个模块进行…

论文于祥读及复现——《Multi-level Map Construction for Dynamic Scenes》

论文祥读之——动态场景的多层次地图构建 0. 出发点(暨摘要)1. 引言2. 相关工作3.主要内容概括3.1 几何地图的构建3.1.1 密集点云地图和八叉图的构建3.1.2 平面地图的构建 3.2 对象地图的构建3.2.1 对象参数化和数据关联3.2.2 对象的更新与优化 4. 实验4…

数组——双指针法

双指针法 用两个同向或者反向的指针来代替两重循环。 提醒&#xff1a;不要老想着用同向双指针&#xff0c;有时候&#xff0c;相向双指针更容易解决问题。 LeetCode 27 class Solution {public int removeElement(int[] nums, int val) {int j0;for(int i0;i<nums.leng…

Hibernate(Spring-Data)3种实体继承创建表方式指南

文章目录 引言1. Hibernate 实体继承概述1.1 继承的概念和作用1.2 Hibernate 中的实体继承方式1.3 基础注解 2. 单表继承策略2.1 概述2.2 表结构设计2.3 实体类映射配置 3. 具体类继承策略3.1 概述3.2 表结构设计3.3 实体类映射配置 4. 映射超类策略(每个类一张表)4.1 概述4.2 …