一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种实现有状态应用的存储卷隔离性分配的方法和系统与流程

2021-11-25 02:28:00 来源:中国专利 TAG:


1.本发明涉及kubernetes存储领域,具体来说,涉及一种实现有状态应用的存储卷隔离性分配的方法和系统。


背景技术:

2.kubernetes是基于容器的集群管理系统,它构建于docker、container等容器运行环境之上,用于管理容器化的工作负载和服务,是一个可移植的、可扩展的开源平台,拥有一个庞大且快速增长的生态系统,其服务、支持和工具广泛可用。
3.pod是kubernetes中创建和管理的、最小的可部署的计算单元,包含一个或多个容器,这些容器共享存储、网络、以及怎样运行这些容器的声明。pod 所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器,这些容器是相对紧密的耦合在一起的。
4.pv(persistentvolume,持久卷)是集群中的一块存储,可以由管理员事先供应,或者使用存储类(storage class)来动态供应。持久卷是集群资源,就像节点也是集群资源一样。pv持久卷和普通的volume一样,也是使用卷插件来实现的,只是它们拥有独立于任何使用 pv的 pod 的生命周期。
5.pvc(persistentvolumeclaim,持久卷请求)表达的是用户对存储的请求。概念上与 pod 类似。pod会耗用节点资源,而pvc申领会耗用pv资源。pod可以请求特定数量的资源(cpu和内存);同样pvc申领也可以请求特定的大小和访问模式。
6.storageclass为管理员提供了描述存储“类”的方法。不同的类型可能会映射到不同的服务质量等级或备份策略,或是由集群管理员制定的任意策略。
7.有状态的应用(stateful application)是指应用会在会话中保存客户端的数据,并在客户端下一次的请求中来使用那些数据。以服务器端组件为例,判断它是有状态的还是无状态的,其依据是两个来自相同发起者的请求在服务器端是否具备上下文关系。
8.但是,现有的kubernetes存储子系统管理功能无法分配满足同一个有状态应用(比如数据库、大数据库等)对多个存储卷请求的自动化分配,只能通过人工方式来完成,同时,既使这样也无法满足除容量大小之外,诸如是否加速、不同磁盘介质、不同节点及io性能指标等隔离性需求。
9.针对相关技术中的问题,目前尚未提出有效的解决方案。


技术实现要素:

10.针对相关技术中的问题,本发明提出一种实现有状态应用的存储卷隔离性分配的方法和系统,以克服现有相关技术所存在的上述技术问题。
11.为此,本发明采用的具体技术方案如下:根据本发明的一个方面,提供了一种实现有状态应用的存储卷隔离性分配的方法,该方法包括以下步骤:接收有状态应用对存储卷的申请需求;
根据需求中对存储的容量大小和存储读写性能指标的要求,对若干个存储节点进行过滤,筛选出满足存储卷需求的存储节点列表;根据需求中对存储节点和硬盘组的隔离性的要求,对存储节点列表进行再次过滤;根据需求中指定的存储选择策略,对再次过滤筛选出的存储节点列表进行打分,选出满足存储卷需求的节点和硬盘组;在选出的节点上创建满足需求的存储卷;将存储卷以存储服务的方式提供给有状态应用进行挂载使用。
12.进一步的,所述接收有状态应用对存储卷的申请需求包括对容量大小、存储读写性能、主机隔离、硬盘组隔离、是否需加速及存储选择策略的需求进行接收,并对这些申请需求进行预处理。
13.进一步的,所述根据需求中对存储的容量大小和存储读写性能指标的要求,对若干个存储节点进行过滤,筛选出满足存储卷需求的存储节点列表包括以下步骤:对存储节点列表进行排查,并过滤掉不具备加速能力的存储;调用存储节点接口,查询存储容量和存储读写性能的可用资源信息;根据容量大小和存储读写性能指标,对存储节点列表再进行过滤,得到容量和性能均满足存储卷需求的存储节点列表。
14.进一步的,采用如下公式对存储节点列表进行过滤:其中,io_acceleration表示存储节点满足是否加速需求,free_size表示存储节点的空闲容量大小,needed_size表示所需存储大小,io_perf表示存储节点上目前可提供的性能指标能力,needed_io_perf表示所需存储的存储读写性能。
15.进一步的,所述根据需求中指定的存储选择策略,对再次过滤筛选出的存储节点列表进行打分,选出满足存储卷需求的节点和硬盘组包括以下步骤:根据需求的存储容量大小,对再次过滤筛选出的存储节点的所有硬盘组进行容量分值计算;根据需求的存储性能指标,对再次过滤筛选出的存储节点的所有硬盘组进行性能分值计算;根据需求中指定的存储选择策略,选出满足存储卷需求的节点和硬盘组。
16.进一步的,所述容量分值计算公式如下:其中,dg_space_score表示硬盘组的容量最终得分,该值小于1,dg_free_size表示硬盘组剩余可用容量大小,needed_size表示所需存储大小;所述性能分值计算计算公式如下:
其中,dg_perf_score表示硬盘组的性能最终得分,该值小于1,dg_free_perf表示硬盘组剩余可用性能指标大小,io_perf表示存储节点上目前可提供的性能指标能力,needed_io_perf表示所需存储的存储读写性能;所述满足存储卷需求的节点和硬盘组的筛选公式如下:其中,fun_best_node_select()为最佳存储节点选择函数,array(dg_space_score)为所有容量最终得分大于0的硬盘组的数组,array(dg_perf_score)为所有性能最终得分大于0的硬盘组的数组。
17.进一步的,所述在选出的节点上创建满足需求的存储卷包括以下步骤:通过api接口访问利用打分选出的满足存储卷需求的节点,并传递存储卷创建的需求对象到该节点;解析存储卷创建需求,在对应的硬盘组上分配所需的存储卷存储空间;对存储卷是否需要加速进行判断,若存储卷需要加速,对上述步骤分配的存储卷存储空间进行存储读写加速设置,否则进入下一步骤;根据该存储卷性能需求,对上述步骤分配的存储卷存储空间进行性能指标设置。
18.进一步的,所述将存储卷以存储服务的方式提供给有状态应用进行挂载使用包括以下步骤:根据存储卷存储服务协议需求,将存储卷存储空间以存储服务的方式对外进行映射;在有状态应用所在的kubernetes宿主机上,通过上述步骤所采用的存储服务协议的客户端挂载方式,将该存储卷挂载到该宿主机;将kubernetes的宿主机上的该存储卷映射给有状态应用所在的pod使用。
19.根据本发明的又一个方面,还提供了一种实现有状态应用的存储卷隔离性分配的系统,该系统包括存储资源需求解析模块、存储资源筛选模块、存储资源打分模块、存储端管理模块及存储资源访问模块;其中,所述存储资源需求解析模块,用于接收有状态应用对存储卷的申请需求;所述存储资源筛选模块,用于根据需求中对存储的容量大小和存储读写性能指标的要求,对若干个存储节点进行过滤,筛选出满足存储卷需求的存储节点列表;所述存储资源筛选模块,用于根据需求中对存储节点和硬盘组的隔离性的要求,对存储节点列表进行再次过滤;所述存储资源打分模块,用于根据需求中指定的存储选择策略,对再次过滤筛选出的存储节点列表进行打分,选出满足存储卷需求的节点和硬盘组;所述存储资源访问模块,用于在选出的节点上创建满足需求的存储卷。
20.进一步的,所述存储资源打分模块所支持的存储选择策略包括哈希算法、随机算
法、轮询调度算法及最少使用算法中的至少一种。
21.本发明的有益效果为:(1)、本发明采用的存储资源筛选方法,能够有效的对存储层资源进行过滤,筛选掉无法满足隔离性和有状态应用对存储需求的存储节点资源,避免了在存储资源创建阶段因资源不足所引起的存储资源创建失败,保证了能够成功自动分配具备隔离性的存储资源。
22.(2)、本发明采用存储资源打分策略,在能够成功自动分配具备隔离性的存储资源的基础上,通过存储选择策略在若干存储节点之间实现容量和性能两个资源维度的均匀分布,避免因存储节点数量不足导致存储资源无法正常分配,保证了自动分配的具备隔离性的存储资源的均衡性。
附图说明
23.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
24.图1是根据本发明实施例的一种实现有状态应用的存储卷隔离性分配的方法的流程示意图;图2是根据本发明实施例的一种实现有状态应用的存储卷隔离性分配的系统的原理框图之一;图3是根据本发明实施例的一种实现有状态应用的存储卷隔离性分配的方法的流程框图;图4是根据本发明实施例的一种实现有状态应用的存储卷隔离性分配的系统的原理框图之二;图5是根据本发明实施例的一种实现有状态应用的存储卷隔离性分配的系统中控制器服务单元的工作原理图。
25.图中:1、存储资源需求解析模块;2、存储资源筛选模块;3、存储资源打分模块;4、存储端管理模块;5、存储资源访问模块。
具体实施方式
26.为进一步说明各实施例,本发明提供有附图,这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理,配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点,图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。
27.根据本发明的实施例,提供了一种实现有状态应用的存储卷隔离性分配的方法和系统。
28.现结合附图和具体实施方式对本发明进一步说明,如图1,图3所示,根据本发明实施例的实现有状态应用的存储卷隔离性分配的方法,该方法包括以下步骤:
步骤s1、收有状态应用对存储卷(volume)的申请需求;在一个实施例中,所述接收有状态应用对存储卷的申请需求包括对容量大小、存储读写性能、主机隔离、硬盘组隔离、是否需加速及存储选择策略(若需要,则还包括加速比)的需求进行接收,并对这些申请需求进行预处理。
29.具体的,实时监听kubernetes发起的有状态应用pod的请求,一旦接受到请求,则对请求做合理性检查,保证请求的有效性,此步骤接受的接受到的储卷申请需求包含的关键参数信息如下表1所示:表1 关键参数信息最后,根据round

robin策略得到一个最佳存储节点和硬盘组,表2所示打分结果,再按round

robin策略得到的最佳存储节点和硬盘组为<stor03,data01>。
30.步骤s2、根据需求中对存储的容量大小和存储读写性能(io)指标的要求,对若干个存储节点进行过滤,筛选出满足存储卷需求的存储节点列表,首先按照按是否加速,对存储节点列表进行第一次筛选,过滤掉不具备加速能力的存储节点。然后再执行存储节点接口调用,查询存储容量和io性能的可用资源信息,并按查询到的字样信息过滤掉不满足容量大小和io性能指标要求的存储节点,从而得到满足申请需求的存储节点列表;在一个实施例中,所述根据需求中对存储的容量大小和存储读写性能指标的要求,对若干个存储节点进行过滤,筛选出满足存储卷需求的存储节点列表包括以下步骤:步骤s21、对存储节点列表进行排查,并过滤掉不具备加速能力的存储;步骤s22、调用存储节点接口,查询存储容量和存储读写性能的可用资源信息;步骤s23、根据容量大小和存储读写性能指标,对存储节点列表再进行过滤,得到容量和性能均满足存储卷需求的存储节点列表。
31.在一个实施例中,采用如下公式对存储节点列表进行过滤:其中,io_acceleration表示存储节点满足是否加速需求,free_size表示存储节点的空闲容量大小,needed_size表示所需存储大小,io_perf表示存储节点上目前可提供的性能指标能力,needed_io_perf表示所需存储的存储读写性能。
32.步骤s3、根据需求中对存储节点和硬盘组的隔离性的要求,对存储节点列表进行再次过滤;
具体的,通过将需求的隔离性标签(label)与存储节点的标签作对比,两者比较结果为假的存储节点或硬盘组将被过滤掉,从而最终得到满足申请需求的存储节点列表。
33.步骤s4、根据需求中指定的存储选择策略,对再次过滤筛选出的存储节点列表进行打分,选出满足存储卷需求的节点和硬盘组;在一个实施例中,所述根据需求中指定的存储选择策略,对再次过滤筛选出的存储节点列表进行打分,选出满足存储卷需求的节点和硬盘组包括以下步骤:步骤s41、根据需求的存储容量大小,对再次过滤筛选出的存储节点的所有硬盘组进行容量分值计算;步骤s42、根据需求的存储性能指标,对再次过滤筛选出的存储节点的所有硬盘组进行性能分值计算;步骤s43、根据需求中指定的存储选择策略,选出满足存储卷需求的节点和硬盘组。
34.在一个实施例中,所述容量分值计算公式如下:其中,dg_space_score表示硬盘组的容量最终得分,该值小于1,dg_free_size表示硬盘组剩余可用容量大小,needed_size表示所需存储大小;所述性能分值计算计算公式如下:其中,dg_perf_score表示硬盘组的性能最终得分,该值小于1,dg_free_perf表示硬盘组剩余可用性能指标大小,io_perf表示存储节点上目前可提供的性能指标能力,needed_io_perf表示所需存储的存储读写性能;所述满足存储卷需求的节点和硬盘组的筛选公式如下:其中,fun_best_node_select()为最佳存储节点选择函数,array(dg_space_score)为所有容量最终得分大于0的硬盘组的数组,array(dg_perf_score)为所有性能最终得分大于0的硬盘组的数组。
35.通过打分得到可用于分配所申请存储卷的<存储节点,硬盘组>的分值列表,如下表2所示,此处存储券需求的大小needed_size为204800mb,io性能指标io_perf为12000iops:表2 分值列表
步骤s5、在选出的节点上创建满足需求的存储卷;在一个实施例中,所述在选出的节点上创建满足需求的存储卷包括以下步骤:步骤s51、通过api接口访问利用打分选出的满足存储卷需求的节点,并传递存储卷创建的需求对象到该节点;步骤s52、解析存储卷创建需求,在对应的硬盘组上分配所需的存储卷存储空间;步骤s53、对存储卷是否需要加速进行判断,若存储卷需要加速,对上述步骤分配的存储卷存储空间进行存储读写加速设置,否则进入下一步骤;步骤s54、根据该存储卷性能需求,对上述步骤分配的存储卷存储空间进行性能指标设置。
36.步骤s6、将存储卷以存储服务的方式提供给有状态应用进行挂载使用。
37.在一个实施例中,所述将存储卷以存储服务的方式提供给有状态应用进行挂载使用包括以下步骤:步骤s61、根据存储卷存储服务协议需求,将存储卷存储空间以存储服务的方式对外进行映射,此处存储服务协议主要是iscsi 和nvme over fabric;步骤s62、在有状态应用所在的kubernetes宿主机上,通过上述步骤所采用的存储服务协议的客户端挂载方式,将该存储卷挂载到该宿主机;步骤s63、将kubernetes的宿主机上的该存储卷映射给有状态应用所在的pod使用。
38.如图2所示,根据本发明的又一个实施例,还提供了一种实现有状态应用的存储卷隔离性分配的系统,该系统包括存储资源需求解析模块1、存储资源筛选模块2、存储资源打分模块3、存储端管理模块4及存储资源访问模块5;其中,所述存储资源需求解析模块1,用于接收有状态应用对存储卷的申请需求;所述存储资源筛选模块2,用于根据需求中对存储的容量大小和存储读写性能指标的要求,对若干个存储节点进行过滤,筛选出满足存储卷需求的存储节点列表;所述存储资源筛选模块2,还用于根据需求中对存储节点和硬盘组的隔离性的要求,对存储节点列表进行再次过滤;所述存储资源打分模块3,用于根据需求中指定的存储选择策略,对再次过滤筛选出的存储节点列表进行打分,选出满足存储卷需求的节点和硬盘组;具体的,如图4所示,按系统的部署运行形态包括控制器服务单元、节点服务单元、
存储管理服务单元。
39.(1)系统的初始化存储管理服务单元:首先,需要对每个存储节点进行逻辑卷(vg)的配置,如果存在加速cache硬盘,亦需要进行vg配置;接着需要部署ise存储加速软件,用于存储卷(volume)的加速;最后启动存储管理rpc服务,用于接收其他服务单元对本存储节点的存储资源管理api请求。
40.节点服务单元:首先,需要打通kubernetes宿主机与存储节点之间的存储网络,便于对存储节点的存储卷进行挂载和卸载等访问操作;其次,配置系统服务模块,用于保证诸如iscsi、nvme over fabric等存储服务协议的正常运行;最后,是运行在每个需要自动分配存储资源的宿主机上运行包含节点服务的pod,其类型为daemonset。
41.控制器服务单元:首先,如图5所示,需要配置存储节点资源池的json格式的config文件,用于控制器服务单元向其发起volume创建申请;其次,向kubernetes注册用于对volume进行创建、删除及其他管理操作的grpc(由google 发起的一种开源远程过程调用系统,该系统基于 http/2 协议传输)接口服务,用于有状态pod调用这些grpc接口服务发起volume相关的操作;最后,需要在kubernetes中运行包含控制器服务的pod,其类型为statefulset(kubernets用来管理有状态应用的工作负载的一种pod类型),且在生产环境下,statefulset的replicas(副本数量)需要至少2个,以保证控制器服务单元所提供grpc接口服务的安全性。
42.(2)控制器服务单元:存储资源需求解析模块,用于对有状态应用对volume的申请需求进行合理性的判断,保证需求的合理合法;存储资源筛选模块,通过并行的从存储管理服务单元中的存储节点实时查询各节点的容量、io性能等信息,并根据需求中存储的容量、io性能及资源隔离等要求,对存储管理服务单元中的存储节点资源进行精准过滤,选出满足volume申请需求的存储节点列表;存储资源打分模块,通过对上存储资源筛选模块选出的存储节点列表的硬盘组可用的容量和性能指标进行打分(按照步骤s4的打分公式规则),并按照存储选择策略对打分后的存储资源进行择优选择,选择出满足需求的最佳存储节点和硬盘组;(3)节点服务单元:存储资源访问模块,通过volume指定的存储服务协议,挂载最佳存储节点的volume,并将该volume挂载到本宿主机的有状态应用pod中,供其使用。
43.(4)存储管理服务单元:存储端管理模块,通过grpc接口服务,对其他单元提供存储端资源的创建、删除、修改、状态查询等能力,同时负责已创建volume资源的本地持久化和动态更新。
44.在一个实施例中,所述存储资源打分模块4所支持的存储选择策略包括哈希算法(hash)、随机算法(random)、轮询调度算法(round

robin)及最少使用算法(least

used)中的至少一种。
45.所述存储资源访问模块5,用于在选出的节点上创建满足需求的存储卷。
46.本发明提供的一种实现有状态应用的存储卷隔离性分配的方法和系统,主要涉及对有状态应用对volume的申请需求的接受和解析、存储资源筛选的方法、存储资源打分策略、存储资源管理的方法、存储资源访问的方法等,旨在实现对同一个有状态应用(比如数据库、大数据库等)对多个存储卷请求的自动化分配,并实现其多个存储卷之间的隔离性。基于存储的容量大小、io性能指标的要求、隔离性的要求等,通过存储选择策略,保证能够自动化的按需分配能够满足有状态应用的存储卷。以本发明作为关键技术开发实现的kubernetes csi插件(csi,全称是container storage interface,即容器存储接口,用于将任意块和文件存储系统暴露给诸如kubernetes之类的容器编排系统(co)上的容器化工作负载的标准,为容器编排引擎和存储系统间建立了一套标准的存储调用接口,通过该接口能为容器编排引擎提供存储服务),不仅能够实现有状态应用pod的存储动态分配,同时能够满足有状态应用pod对存储的隔离性 (诸如是否加速、不同磁盘介质、不同节点及io性能指标等) 要求,是目前kubernetes存储插件在有状态应用存储场景下的首选之一。
47.综上所述,借助于本发明的上述技术方案,本发明采用的存储资源筛选方法,能够有效的对存储层资源进行过滤,筛选掉无法满足隔离性和有状态应用对存储需求的存储节点资源,避免了在存储资源创建阶段因资源不足所引起的存储资源创建失败,保证了能够成功自动分配具备隔离性的存储资源。
48.此外,本发明采用存储资源打分策略,在能够成功自动分配具备隔离性的存储资源的基础上,通过存储选择策略在若干存储节点之间实现容量和性能两个资源维度的均匀分布,避免因存储节点数量不足导致存储资源无法正常分配,保证了自动分配的具备隔离性的存储资源的均衡性。
49.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献