返回顶部
首页 > 资讯 > 精选 >为什么Kubernetes的存储如此艰难?
  • 507
分享到

为什么Kubernetes的存储如此艰难?

2023-06-04 16:06:17 507人浏览 安东尼
摘要

  随着像kubernetes这样的容器编排工具的大火,应用程序的开发与部署方式正经历着一场巨大的变革。微服务体系结构的兴起,以及从开发人员的角度,将基础架构与应用程序逻辑间相互解耦,使得开发人员越来越关注于构建软件和交付价值。  Kube

  随着像kubernetes这样的容器编排工具的大火,应用程序的开发与部署方式正经历着一场巨大的变革。微服务体系结构的兴起,以及从开发人员的角度,将基础架构与应用程序逻辑间相互解耦,使得开发人员越来越关注于构建软件和交付价值。

  Kubernetes能够将它所管理的物理机抽象出来,借此,开发人员可以通过描述所需的内存数量和计算能力,获取相应的资源,而不必考虑底层基础设施。

  在管理Docker映像时,Kubernetes还能够为应用程序提供可移植性。一旦使用Kubernetes的容器架构开发应用程序,它们就可以部署到任何地方——公共云、混合云、本地——而且不需要对底层代码进行任何更改。

  虽然Kubernetes在许多方面非常有优势,比如可伸缩性、可移植性和管理能力,但它也存在一个问题,就是不支持状态存储。几乎所有的生产应用都是有状态的,即需要某种外部存储。

为什么Kubernetes的存储如此艰难?

  而Kubernetes的架构是动态的,容器的创建和销毁取决于负载以及开发人员规范,Pod和容器可以自我修复和复制。本质上来说,它们的生命是短暂的。

  然而,持久存储解决方案无法承受这种动态行为,持久存储不能被绑定到动态创建和销毁的规则上。

  当需要将有状态的应用程序部署到另一个基础设施(可能是另一个云服务提供商、本地或混合云)上时,它们在可移植性上面临着挑战。持久存储解决方案会被捆绑到特定的云提供商上。

  此外,云原生应用程序的存储环境并不容易理解。Kubernetes的存储术语可能会令人纲到困惑,因为许多术语都有复杂的含义和微妙的变化。此外,在原生Kubernetes、开源框架和托管或付费服务之间有许多选项,开发人员在做出决定之前必须考虑这些选项。

  下面是CNCF(云原生计算基金会)公布的云原生存储解决方案一览图(其中一部分,具体可点击链接查看):

为什么Kubernetes的存储如此艰难?

  可能大家首先想到的是在Kubernetes中部署数据库:选择满足你需要的数据库解决方案,将其容器化以在本地磁盘上运行,并将其作为另一个工作负载部署到集群中。然而,由于数据库的固有属性,这并不能很好地工作。

  容器是基于无状态原则构建的,这使得容器的spin up和spin down更容易。由于没有要保存和迁移的数据,所以集群不需要处理磁盘读写这种通常来说非常密集的工作。

  对于数据库,状态往往需要被保存。如果以容器方式部署在集群上的数据库没有迁移,或者没有频繁地spin up,那么数据存储的物理特性就会发挥作用。理想情况下,使用数据的容器应该与数据库位于同一个Pod中。

  这并不是说在容器中部署数据库是一个坏主意——在某些用例中,这种方法就足够了。在测试环境中,或者对于那些不需要生产级别的数据量的任务,集群中的数据库是有意义的,因为所保存的数据规模很小。

  在生产环境中,开发人员通常比较依赖外部存储。

  Kubernetes如何与存储通信?使用控制平面接口。这些接口将Kubernetes与外部存储连接起来。这些连接到Kubernetes的外部存储解决方案称为卷插件(Volume Plugin),卷插件支持抽象存储并赋予存储可移植性。

  以前,卷插件是与核心的Kubernetes代码库一起构建、链接、编译和发布的。这大大限制了开发人员的灵活性,并带来了额外的维护成本。添加新的存储选项需要更改Kubernetes代码库。

  随着CSI和Flexvolume的引入,卷插件可以部署在集群上,而无需更改代码库。

为什么Kubernetes的存储如此艰难?

  原生Kubernetes及存储

  原生Kubernetes如何处理存储?Kubernetes提供了一些管理存储的解决方案:临时选项、持久卷的持久存储、持久卷声明、存储类或状态集……等等。

  持久卷(PV)是由管理员提供的存储单元,它们独立于任何单个Pod,这样可以将它们从Pod短暂的生命周期中解放出来。

  另外,持久卷声明(PVC)是对存储的请求。使用PVC可以将存储绑定到特定节点,使该节点能够使用存储。

  处理存储的方法有两种:静态或动态。

  通过静态配置,管理员提供了他们认为Pod在发出实际请求之前可能需要的PV,并且这些PV通过显式PVC手动绑定到特定的Pod。

  在实践中,静态定义的PV与Kubernetes的可移植结构不兼容,因为所使用的存储可能与环境相关,比如AWS EBS或GCE持久磁盘。手动绑定需要更改YAML文件以指向特定于提供商的存储解决方案。

  在开发人员如何考虑资源方面,静态配置也违背了Kubernetes的思想:CPU和内存不是预先分配的,而是绑定到Pod或容器中,它们是动态授予的。

  动态配置是通过存储类完成的。集群管理员不需要预先手动创建PV,而是创建多个存储配置文件,就像模板一样。当开发人员创建PVC时,根据请求的要求,其中一个模板在请求时创建,并附加到Pod。

为什么Kubernetes的存储如此艰难?

  以上只是对外部存储一般如何使用原生Kubernetes进行处理的一个非常宽泛的概述,除此之外,还有许多其他选择需要考虑。

  容器存储接口

  首先介绍一下容器存储接口(Container Storage Interface,CSI),CSI是由CNCF存储工作组进行的统一工作,旨在定义一个标准的容器存储接口,该接口可以使存储驱动程序在任何容器编排器上工作。

  CSI规范已经被应用到Kubernetes中,许多驱动程序插件可以部署在Kubernetes集群上。开发人员可以在Kubernetes上访问CSI兼容的卷驱动程序与CSI卷类型公开的存储。

  随着CSI的引入,存储可以作为另一个工作负载进行容器化,并部署在Kubernetes集群上。

  开源项目

  围绕云原生技术的工具和项目正在大量涌现。作为生产中最突出的问题之一,有相当一部分开源项目致力于解决“在云原生架构上处理存储”这个问题。

  目前最受欢迎的存储项目是CephRook

  Ceph是一个动态管理的、水平可伸缩的分布式存储集群。Ceph提供了对存储资源的逻辑抽象。它被设计成不存在单点故障、可自我管理和基于软件的。Ceph同时为相同的存储集群提供块、对象或文件系统接口。

  Ceph的架构非常复杂,有许多底层技术,如RADOS、librados、RADOSGW、RDB,它的CRUSH 算法和监视器、OSD和MDS等组件。这里不深入解读其架构,关键在于,Ceph是一个分布式存储集群,它可提供更高的可伸缩性,在不牺牲性能的情况下消除了单点故障,并提供了对对象、块和文件的访问的统一存储。

  很自然地,Ceph已经适应了云原生环境。有许多方法可以部署Ceph集群,例如使用Ansible。你可以使用CSI和PVC部署Ceph集群,并在Kubernetes集群中获得一个接口。

为什么Kubernetes的存储如此艰难?

Ceph架构

  另一个有趣且非常受欢迎的项目是Rook,这是一个旨在聚合Kubernetes和Ceph的工具——将计算和存储放在一个集群中。

  Rook是一个云原生存储编排器,它扩展了Kubernetes的功能。Rook本质上允许将Ceph放入容器中,并提供集群管理逻辑,使得在Kubernetes上能够可靠地运行Ceph。Rook能够自动化部署、引导、配置、伸缩、再平衡,即集群管理员会做的一系列工作。

  Rook允许从YAML部署Ceph集群,像Kubernetes一样。YAML文件用作集群管理员希望在集群中实现的高级声明。Rook会启动集群,并开始积极监视。Rook充当控制器,确保YAML文件中声明的所需状态是支持的。Rook运行在一个协调循环中,该循环会观察状态并根据检测到的差异进行操作。

  Rook没有自己的持久状态,无需管理,可见它确实是按照Kubernetes的原则建立的。

为什么Kubernetes的存储如此艰难?

  Rook将Ceph和Kubernetes结合在一起,是最受欢迎的云原生存储解决方案之一,在GitHub上拥有近4000颗星,1630万次下载,以及100多名贡献者。

  作为被CNCF接受的首个存储项目,Rook近期已进入孵化阶段。

  最后,对于应用程序中的任何问题,重要的是确定需求,并相应地设计系统或选择工具。云原生环境中的存储也不例外。虽然问题相当复杂,但是有很多工具和方法。随着云计算的发展,无疑也会不断出现新的解决方案。

  来源:Software Engineering Daily 作者:Gokhan Simsek

--结束END--

本文标题: 为什么Kubernetes的存储如此艰难?

本文链接: https://lsjlt.com/news/238584.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 为什么Kubernetes的存储如此艰难?
      随着像Kubernetes这样的容器编排工具的大火,应用程序的开发与部署方式正经历着一场巨大的变革。微服务体系结构的兴起,以及从开发人员的角度,将基础架构与应用程序逻辑间相互解耦,使得开发人员越来越关注于构建软件和交付价值。  Kube...
    99+
    2023-06-04
  • 10个艰难的Java面试题是什么
    本篇内容介绍了“10个艰难的Java面试题是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.为什么等待和通知是在 Object 类而不...
    99+
    2023-06-16
  • Go函数的存储和索引:为什么它们如此重要?
    Go语言是一种快速、简单、高效的编程语言,它被广泛应用于Web开发、系统编程等领域。在Go语言中,函数是一种非常重要的概念,它们在程序中扮演着非常重要的角色。在本文中,我们将讨论Go函数的存储和索引,以及它们为什么如此重要。 一、函数的存储...
    99+
    2023-07-05
    函数 存储 索引
  • 为什么选择使用NoSQL数据库开发如此困难
    今天就跟大家聊聊有关为什么选择使用NoSQL数据库开发如此困难,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。传统观念中NoSQL数据库非常适合某些数...
    99+
    2024-04-02
  • 为什么服务器防御DDOS攻击变得如此困难
    为什么服务器防御DDOS攻击变得如此困难?在当前的数字时代,随着互联网的迅猛发展,网络安全问题已经变得举足轻重。其中,DDoS 攻击(分布式拒绝服务攻击)作为一种常见的网络攻击手段,给网络运营商和企业带来了巨大的威胁。而作为抵御 DDoS...
    99+
    2024-01-24
    为什么服务器防御DDOS攻击变得如此困难 服务器防御 服务器防御DDOS攻击 云服务器知识
  • Kubernetes和Docker容器的存储方式是什么
    Kubernetes和Docker容器的存储方式是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。目前,容器存储是容器离不开的一个话题,对于无状态的Docke...
    99+
    2023-06-05
  • 为什么要用云存储
    要用云存储的原因:1、云存储属于分布式的,因此可用性比较好;2、云存储一般都是三副本模式,当数据丢失后,可通过副本恢复,可靠性高;3、云存储能够提高系统的安全性;4、云存储网络资源丰富,能够提供BGP多线骨干网络,使全国各地访问流程;5、云...
    99+
    2024-04-02
  • 如何分析Spark in action on Kubernetes的存储
    今天就跟大家聊聊有关如何分析Spark in action on Kubernetes的存储,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言今天我们会讨论一个在大数据领域中最重要的...
    99+
    2023-06-04
  • 为什么Java Spring中的缓存编程算法如此重要?
    Java Spring框架中的缓存编程算法是非常重要的。缓存是一种将数据存储在更快速、更容易访问的存储器中的技术。在Java Spring中,我们可以使用缓存技术来提高应用程序的性能和响应速度。然而,如果我们不使用正确的缓存编程算法,我们可...
    99+
    2023-09-03
    spring 缓存 编程算法
  • Kubernetes存储的设计与基本架构方法是什么
    这篇文章主要讲解了“Kubernetes存储的设计与基本架构方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kubernetes存储的设计与基本架构...
    99+
    2024-04-02
  • Kubernetes持久化卷与动态存储的方法是什么
    Kubernetes持久化卷(Persistent Volumes)和动态存储(Dynamic Provisioning)是Kube...
    99+
    2024-05-07
    Kubernetes
  • Python性能为什么如此的强大
    Python性能为什么如此的强大,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python性能十分的强大,相关的技术为什么会如此的强大呢?下面我们就详细的看看相关技术问题。问题...
    99+
    2023-06-17
  • C++存储区域分为什么
    本篇内容介绍了“C++存储区域分为什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们在程序开发中将C++存储区域分为以下几步:栈区(st...
    99+
    2023-06-17
  • HTTP 协议为什么如此重要?
    HTTP(HyperText Transfer Protocol)是一种用于传输万维网上数据的应用层协议。它是客户端和服务器之间进行通信的基本协议。HTTP 协议的设计目标是保证客户端和服务器之间的通信快速、简便和可靠。HTTP 协议的重...
    99+
    2023-08-31
    bash numy http
  • Python编程为什么如此重要?
    Python编程为什么如此重要? Python作为一种高级的通用编程语言,在近年来得到了越来越广泛的应用,成为了许多开发者、数据分析师和科学家的首选工具。那么,Python编程为什么如...
    99+
    2024-04-02
  • NPM 缓存:为什么它对 PHP 异步编程如此重要?
    NPM(Node Package Manager)是一个用于管理 Node.js 模块的工具,它允许开发者分享和重用代码。NPM 缓存是一个重要的功能,它可以帮助我们在安装依赖包时加速速度。在 PHP 的异步编程中,NPM 缓存也起到了重...
    99+
    2023-08-01
    npm 缓存 异步编程
  • 为什么ASP对象开发技术中的缓存是如此重要?
    ASP(Active Server Pages)是一种广泛使用的Web应用程序框架,它主要用于创建动态Web页面和Web服务。在ASP开发中,缓存是一项非常重要的技术。本文将探讨为什么ASP对象开发技术中的缓存是如此重要,并演示如何在ASP...
    99+
    2023-08-15
    对象 开发技术 缓存
  • Go语言为什么如此受欢迎?
    Go语言为什么如此受欢迎? 自从Go语言在2009年由Google推出以来,它就迅速成为了互联网开发领域中的一颗耀眼的新星。虽然Go语言并不是第一种编程语言,但其简洁、高效、强大的特性...
    99+
    2024-03-09
    性能高 简洁易学 并发支持 go语言 区块链 网络编程 垃圾回收器 标准库
  • 为什么 gourl.ParseQuery 方法的结果如此意外?
    在PHP开发中,gourl.ParseQuery方法被广泛应用于解析URL查询字符串。然而,有时候我们会发现该方法的结果出乎意料,出现了一些令人困惑的情况。为什么会出现这种意外?php...
    99+
    2024-02-10
  • 为什么 ASP 打包技术在 http 缓存方面如此重要?
    ASP打包技术是一种用于优化Web应用程序的技术,在HTTP缓存方面起着至关重要的作用。本文将深入探讨ASP打包技术在HTTP缓存方面的重要性,并且为读者演示一些相关的代码。 在ASP中,打包技术是通过将多个脚本文件合并成一个文件来实现的。...
    99+
    2023-08-28
    打包 缓存 http
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作