openebs

1. 简介

OpenEBS是一款使用Go语言编写的基于容器的块存储开源软件。OpenEBS使得在容器中运行关键性任务和需要数据持久化的负载变得更可靠。

OpenEBS是一组存储引擎,允许您为有状态工作负载(StatefulSet)和Kubernetes平台类型选择正确的存储解决方案。 在高层次上,OpenEBS支持两大类卷——本地卷和复制卷

OpenEBSKubernetes本地超融合存储解决方案,它管理节点可用的本地存储,并为有状态工作负载提供本地或高可用的分布式持久卷。

1.1 两大类卷

OpenEBS管理k8s节点上存储,并为k8s有状态负载(StatefulSet)提供本地存储卷或分布式存储卷。

  • 本地卷(Local Storage

    • OpenEBS可以使用宿主机裸块设备或分区,或者使用Hostpaths上的子目录,或者使用LVMZFS来创建持久化卷
    • 本地卷直接挂载到Stateful Pod中,而不需要OpenEBS在数据路径中增加任何开销
    • OpenEBS为本地卷提供了额外的工具,用于监控、备份/恢复、灾难恢复、由ZFSLVM支持的快照等
  • 对于分布式卷(即复制卷)

    • OpenEBS使用其中一个引擎(MayastorcStorJiva)为每个分布式持久卷创建微服务
    • 有状态Pod将数据写入OpenEBS引擎,OpenEBS引擎将数据同步复制到集群中的多个节点。 OpenEBS引擎本身作为pod部署,并由Kubernetes进行协调。 当运行Stateful Pod的节点失败时,Pod将被重新调度到集群中的另一个节点,OpenEBS将使用其他节点上的可用数据副本提供对数据的访问
    • 有状态的Pods使用iSCSI (cStorJiva)或NVMeoF (Mayastor)连接OpenEBS分布式持久卷
    • OpenEBS cStorJiva专注于存储的易用性和持久性。它们分别使用自定义版本的ZFSLonghorn技术将数据写入存储。 OpenEBS Mayastor是最新开发的以耐久性和性能为设计目标的引擎,高效地管理计算(大页面、核心)和存储(NVMe Drives),以提供快速分布式块存储

1.2 与传统分布式存储对比

OpenEBS与其他传统存储解决方案不同的几个关键方面:

  • 使用微服务体系结构构建,就像它所服务的应用程序一样。 OpenEBS本身作为一组容器部署在Kubernetes工作节点上。使用Kubernetes本身来编排和管理OpenEBS组件
  • 完全建立在用户空间,使其高度可移植性,以运行在任何操作系统/平台。
  • 完全意图驱动,继承了Kubernetes易用性的相同原则
  • OpenEBS支持一系列存储引擎,因此开发人员可以部署适合于其应用程序设计目标的存储技术。

1.3 使用场景

应用需求存储类型OpenEBS卷类型
低时延、高可用性、同步复制、快照、克隆、精简配置SSD/云存储卷OpenEBS Mayastor
高可用性、同步复制、快照、克隆、精简配置机械/SSD/云存储卷OpenEBS cStor
高可用性、同步复制、精简配置主机路径或外部挂载存储OpenEBS Jiva
低时延、本地PV主机路径或外部挂载存储Dynamic Local PV - Hostpath, Dynamic Local PV - Rawfile
低时延、本地PV本地机械/SSD/云存储卷等块设备Dynamic Local PV - Device
低延迟,本地PV,快照,克隆本地机械/SSD/云存储卷等块设备OpenEBS Dynamic Local PV - ZFS , OpenEBS Dynamic Local PV - LVM

总的来说:

  • 多机环境,如果有额外的块设备(非系统盘块设备)作为数据盘,选用OpenEBS MayastorOpenEBS cStor
  • 多机环境,如果没有额外的块设备(非系统盘块设备)作为数据盘,仅单块系统盘块设备,选用OpenEBS Jiva
  • 单机环境,建议本地路径Dynamic Local PV - Hostpath, Dynamic Local PV - Rawfile,由于单机多用于测试环境,数据可靠性要求较低。

1.4 CAS介绍

OpenEBS是一个容器附加存储(Container Attached Storage, CAS)的例子。

如上图所示 ,Container Attached Storage是包含由Kubernetes编排的、基于微服务的存储控制器的软件。这些存储控制器可以在Kubernetes运行的任何地方运行,即任何云甚至裸机服务器,或者传统共享存储系统之上,数据本身也通过容器访问。

CAS使您能够利用云原生应用程序的灵活性和可伸缩性。 定义Kubernetes PV (Persistent Volume)的存储软件是基于微服务架构的。 存储软件的控制平面(存储控制器)和数据平面(存储副本)作为Kubernetes Pods运行,因此,使您能够将云原生的所有优势应用到CAS

CAS优势

  • 敏捷

CAS中的每个存储卷都有一个容器化的存储控制器和相应的容器化副本。 因此,围绕这些组件的资源的维护和调优是真正敏捷的。 Kubernetes滚动升级功能可以实现存储控制器和存储副本的无缝升级。可以使用容器cGroups调优CPU和内存等资源配额。

  • 存储策略粒度化

将存储软件容器化并将存储控制器专用于每个卷可以带来最大的存储策略粒度。 在CAS体系结构中,可以按卷配置所有存储策略。 此外,您可以监视每个卷的存储参数,并动态更新存储策略,以实现每个工作负载的预期结果。 随着卷存储策略中这种额外粒度级别的增加,存储吞吐量、IOPS和延迟的控制也会增加。

  • 云原生

CAS将存储软件装入容器,并使用Kubernetes自定义资源定义(CRDs)来声明低级存储资源,如磁盘和存储池。 这个模型使存储能够无缝地集成到其他云原生工具中。 可以使用Prometheus、Grafana、Fluentd、Weavescope、Jaeger等云原生工具来供应、监控和管理存储资源

  • PVCAS中的一个微服务

如上图所示,在CAS架构中,存储控制器和副本的软件完全是基于微服务的,因此不涉及内核组件。 通常,存储控制器POD被调度在与持久卷相同的节点上,以提高效率,副本POD可以被调度在集群节点上的任何位置。 每个副本使用本地磁盘、SAN磁盘和云磁盘的任意组合完全独立于其他副本进行配置。 这为大规模管理工作负载的存储分配提供了巨大的灵活性。

  • 超融合非分布式

CAS架构没有遵循典型分布式存储架构。通过从存储控制器到存储副本的同步复制,存储变得高度可用。 卷副本的元数据不是在节点之间共享的,而是在每个本地节点上独立管理。 如果一个节点故障,存储控制器(在本例中是一个无状态容器)将在一个节点上轮转,该节点上运行着第二个或第三个副本,数据仍然可用。

与超融合系统类似,CAS中的卷的存储和性能是可扩展的。由于每个卷都有自己的存储控制器,因此存储可以在一个节点的存储容量允许的范围内进行扩展。 在给定的Kubernetes集群中,随着容器应用程序数量的增加,会增加更多的节点,从而提高存储容量和性能的整体可用性,从而使存储对新的应用程序容器可用。 这一过程与Nutanix等成功的超融合系统非常相似。

2. 架构

OpenESB遵循容器附加存储(CAS)模型,每个卷都有一个专用的控制器POD和一组副本PODOpenEBS操作和使用都很简单,因为它看起来和感觉上就像其他云原生和Kubernetes友好的项目。
在这里插入图片描述
OpenEBS有许多组件,可以分为以下类别:

  • 控制面组件 - Provisioner, API Server, volume exports,volume sidecars

  • 数据面组件 - JivacStor

  • 节点磁盘管理器 - Discover, monitor, 管理连接k8s的媒介

    2.1 控制面

    OpenEBS集群的控制平面通常被称为Maya

    OpenEBS控制平面负责提供卷、相关的卷操作,如快照、克隆、创建存储策略、执行存储策略、导出Prometheus/grafana使用的卷指标,等等。

    2.1.1 OpenEBS PV Provisioner

此组件作为POD运行,并做出配置决策,它的使用方式是:

开发人员用所需的卷参数构造一个声明,选择适当的存储类,并在YAML规范上调用kubeletOpenEBS PV动态提供程序与maya-apiserver交互,在适当的节点上为卷控制器pod和卷副本pod创建部署规范。 可以使用PVC规范中的注释来控制卷Pod(控制器/副本)的调度。

目前,OpenEBS Provisioner只支持一种绑定类型,即iSCSI

2.1.2 OpenEBS PV Provisioner

m-apiserver作为POD运行。顾名思义,m-apiserver公开OpenEBS REST api

m-apiserver还负责创建创建卷pod所需的部署规范文件。 在生成这些规范文件之后,它将调用kube-apiserver来相应地调度这些pods

m-apiserver的另一个重要任务是卷策略管理。OpenEBS为表示策略提供了非常细粒度的规范。 m-apiserver解释这些YAML规范,将它们转换为可执行的组件,并通过容量管理sidecar来执行它们
在这里插入图片描述
Maya卷导出器是每个存储控制器podsidecar`

这些sidecar将控制平面连接到数据平面以获取统计信息。统计信息的粒度在卷级别。一些统计数据示例如下:

  • 卷读取延迟
  • 卷写入延迟
  • 卷每秒读取速度
  • 卷每秒写入速度
  • 读取块大小
  • 写入块大小
  • 容量统计

    2.1.4 卷管理sidecar

Sidecars还用于将控制器配置参数和卷策略传递给卷控制器pod(卷控制器pod是一个数据平面), 并将副本配置参数和副本数据保护参数传递给卷副本pod

2.2 数据面

OpenEBS数据平面负责实际的卷IO路径。存储引擎在数据平面实现实际的IO路径。 目前,OpenEBS提供了两个可以轻松插入的存储引擎。它们被称为JivacStor。 这两个存储引擎都完全运行在Linux用户空间中,并基于微服务架构。

  • Jiva
    Jiva存储引擎基于Rancher's LongHorngotgt开发实现, 使用go语言开发,并运行于用户命名空间下。 LongHorn控制器将输入的IO同步复制到LongHorn副本。该副本将Linux稀疏文件视为构建存储特性(如精简配置、快照、重建等)的基础。

  • cStor
    cStor数据引擎使用C语言编写,具有高性能的iSCSI targetCopy-On-Write块系统,提供数据完整性、数据弹性和时间点的快照和克隆。 cStor有一个池特性,它以条带、镜像或RAIDZ模式聚合一个节点上的磁盘,以提供更大的容量和性能单位。 cStor还可以跨区域将数据同步复制到多个节点,从而避免节点丢失或节点重启导致数据不可用。

  • LocalPV

对于那些不需要存储级复制的应用程序,LocalPV可能是很好的选择,因为它能提供更高的性能。 OpenEBS LocalPVKubernetes LocalPV类似,不同之处在于它是由OpenEBS控制平面动态提供的, 就像任何其他常规PV一样。

OpenEBS LocalPV有两种类型:hostpath LocalPVdevice LocalPVhostpath LocalPV指的是主机上的子目录,LocalPV指的是在节点上发现的磁盘(可以是直接连接的,也可以是网络连接的)。 OpenEBS引入了一个LocalPV提供者,用于根据PVC和存储类规范中的一些标准选择匹配的磁盘或主机路径。

2.3 节点磁盘管理器

节点磁盘管理器(NDM)是OpenEBS体系结构中的一个重要组件。 NDM将块设备视为需要监视和管理的资源,就像CPU、内存和网络等其他资源一样。 它是一个在每个节点上运行的守护进程,基于过滤器检测附加的块设备,并将它们作为块设备自定义资源加载到Kubernetes中。这些定制资源旨在通过提供类似于:

  • 轻松访问Kubernetes集群中可用的块设备清单
  • 预测磁盘的故障,以帮助采取预防措施
  • 允许动态地将磁盘挂载/卸载到存储Pod中,而无需重新启动在磁盘挂载/卸载的节点上运行的相应NDM Pod
    在这里插入图片描述
    尽管做了上述所有工作,NDM还是有助于提供持久卷的总体简化。
    NDM是在OpenEBS安装期间作为守护进程部署的。NDM daemonset发现每个节点上的磁盘,并创建一个名为Block DeviceBD的自定义资源。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧城市排水系统,管网水位监测仪怎么监测

地下排水管网应用于城市的多个环境之中,比如排放雨水,污水或者是地表水等,总之是在维护城市的安全运行,并且保护城市地下生命线处于正常状态。但是一旦排水系统面对各种极端天气,便有可能会突发安全事故,导…

Linux学习第33天:Linux INPUT 子系统实验(二):Linux 自带按键驱动程序的使用

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本节笔记主要内容是学会如何使用Linux自带的按键驱动程序。 一、自带按键驱动程序源码简析 配置选项路径如下: -> Device Drivers ->…

人工智能师求职面试笔试题及答案汇总

人工智能师求职面试笔试题及答案汇总 1.如何在Python中实现一个生成器? 答:在Python中,生成器是一种特殊类型的迭代器。生成器允许你在需要时才生成值,从而节省内存。生成器函数在Python中是通过关键字yield来实现的。例如&…

英语——分享篇——每日200词——1-200

1——ball——[bɔːl]——n.球——ball——ba爸(拼音)ll筷子(象形)——爸爸用筷子夹球——The kid is playing the ball. ——孩子在玩皮球。 2——boat——[bəʊt]——n.船——boat——bo60(象形)at在(熟词)——60个人在船上——I have 60 boats.——我有60艘船。 3——bag—…

GCC编译器

一:GCC编译器介绍 在Linux上写过C并且编译过的同学想必一定要和GCC打交道,可能刚接触的同学只知道GCC是一款编译工具。其实GCC发展至今并不是一开始作者就想把GCC打造成如今一统江山的一个工具,而是给他的另一个宏伟计划的一个配套&#xff0…

【Orangepi Zero2 全志H616】驱动蜂鸣器

一、用户手册对应的I/O 二、wiringPi库示例代码 三、代码实现 四、创建shell脚本 五、接线和运行结果 一、用户手册对应的I/O 二、wiringPi库示例代码 1 #include <stdio.h>2 #include <wiringPi.h>34 #define NUM 17 //26pin5 //#define NUM 18 //26pin6 //#…

工作数字化的中国历程 | 从 OA 到 BPM 到数字流程自动化

业务流程是由“活动”&#xff08;或称“工作任务”&#xff09;构成的&#xff0c;在企业里的所有工作是不是都叫流程&#xff0c;或者属于流程的一部分&#xff0c;这个概念很绕&#xff0c;我觉得没有必要去做学究气的辨析。我曾经提出过一个从工作的两个特性&#xff08;产…

伪随机序列——m序列及MATLAB仿真

文章目录 前言一、m 序列1、m 序列的产生2、m 序列的性质①、均衡性②、游程分布③、移位相加特性④、自相关函数⑤、功率谱密度⑥、伪噪声特性 二、M 序列1、m 序列的产生2、m 序列的性质 三、MATLAB 中 m 序列1、m 序列生成函数的 MATLAB 代码2、MATLAB 仿真 前言 在通信系统…

白标软件:时间与金钱的双赢助手

白标的好处是你不需要从零开始构建一个应用程序。供应商提供软件解决方案&#xff0c;而你提供品牌&#xff0c;并将应用程序包装、市场推广和盈利。 白标软件帮助节省时间和金钱的六种方式&#xff1a; 1、不需要招募软件开发组织或专业人员 传统上&#xff0c;软件开发需要…

strongswan:configure: error: OpenSSL Crypto library not found

引子 在配置strongswan时&#xff0c;有时会遇到以下错误&#xff08;其实所有需要openssl的软件configure时都有可能遇到该问题&#xff09;&#xff1a; configure: error: OpenSSL Crypto library not found 解决方法 crypto是什么呢? 是OpenSSL 加密库(lib), 这个库需要op…

深度学习_4 数据训练之线性回归

训练数据 线性回归 基本原理 比如我们要买房&#xff0c;机器学习深度学习来预测房价。房价的影响因素有&#xff1a;卧室数量&#xff0c;卫生间数量&#xff0c;居住面积。此外&#xff0c;还需要加上偏差值来计算。我们要找到一个正确率高的计算方法来计算。 首先&#…

Solidity入门第一步之数据类型

各种类型介绍 数值类型(Value Type)&#xff1a;包括布尔型(bool)&#xff0c;整数型(int、uint、uint256)等等&#xff0c;这类变量赋值时候直接传递数值。引用类型(Reference Type)&#xff1a;包括数组和结构体&#xff0c;这类变量占空间大&#xff0c;赋值时候直接传递地…

Python---字符串中的count()方法

count()方法 主要功能&#xff1a;求子串在字符串中出现的次数 count 英 /kaʊnt/ v. &#xff08;按顺序&#xff09;数数&#xff1b;计数&#xff0c;点数目&#xff1b;把……算入&#xff0c;包括&#xff1b;重要&#xff1b;被允许&#xff0c;被接受&#xff1b;…

[自学记录08*]LDR、HDR与ToneMapping

一、Dynamic Range—动态范围 Dynamic Range表示动态范围&#xff0c;检测DR&#xff0c;DR又分为LDR&#xff08;Low Dynamic Range&#xff09;和HDR&#xff08;High Dynamic Range&#xff09;。它们都是表示亮度值范围的一种方式&#xff0c;那么有什么区别呢。 1.LDR …

ke9案例三:页面提交文件,我服务器端接收

案例三:页面提交文件,我服务器端接收 ProcessFile.java 1value "/process-file" 2获取邮件消息的所有部分part--Collection<Part> partsrequest.getParts(); 3遍历每一个part 4之后可以打印头文件等String headerpart.getHeader("content-disposition&q…

Hive【Hive(八)自定义函数】

自定义函数用的最多的是单行函数&#xff0c;所以这里只介绍自定义单行函数。 Coding 导入依赖 <dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>3.1.3</version></dependency>…

Flow-based models(NICE);流模型+NICE+代码实现

参考&#xff1a; 李宏毅春季机器学习NICE: Non-linear Independent Components Estimationhttps://github.com/gmum/nice_pytorch 文章目录 大致思想数学预备知识Jacobian矩阵行列式以及其几何意义Change of Variable Theorem Flow-based modelNICE理论代码 大致思想 Flow-B…

Solidity数据类型之函数类型

solidity中函数的形式 function <function name>(<parameter types>) {internal|external|public|private} [pure|view|payable] [returns (<return types>)]每个关键字的意思&#xff08;方括号里面的写不写都可以&#xff09; function&#xff1a; 声明函…

【0基础学Java第七课】-- 类和对象01

7. 类和对象 7.1 面向对象的初步认知7.1.1 什么是面向对象7.1.2 面向对象与面向过程 7.2 类定义和使用7.2.1 简单认识类7.2.2 类的定义格式7.2.3 定义一个狗类7.2.4 定义一个学生类 7.3 类的实例化7.3.1 什么是实列化7.3.2 引用只能指向对象&#xff0c;且不能同时指向多个对象…

服务器基本命令

nohup python3 ./download-all-2023-11-01_12-08-11.py > T85_download.log & 标准输出重定向到文件 nohup bash test.sh > stdout.txt & 标准错误输出重定向到文件 nohup bash test.sh 2> stderr.txt & 重定向到不同文件 nohup bash test.sh > …