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

一种本地存储卷动态创建方法及设备与流程

2022-04-09 10:26:19 来源:中国专利 TAG:


1.本发明涉及云计算技术领域,更具体地说,它涉及一种本地存储卷动态创建方法及设备。


背景技术:

2.hostpath volume为pod挂载宿主机上的目录或文件(hostpath:本地卷类型的数据卷将pod所在节点的文件系统上某一个文件或者目录挂载到容器组或容器内部),使得容器可以使用宿主机的高速文件系统进行存储。缺点是,在k8s中(kubernetes,简称k8s,是用8代替名字中间的8个字符“ubernete”而成的缩写,是一个开源的,用于管理云平台中多个主机上的容器化的应用),pod都是动态在各node节点上调度,当一个pod在当前node节点上启动并通过hostpath存储了文件到本地以后,下次调度到另一个节点上启动时,就无法使用在之前节点上存储的文件。目前开源社区如rancher提供了hostpath动态分配的方式,该方式虽然提供了hostpath动态申请,且支持多个节点多个路径的存储池扩展,但是无法支持多个存储池根据不同节点及不同存储性能需求的存储池选择方案。


技术实现要素:

3.本发明要解决的技术问题是针对现有技术的上述不足,本发明的目的一是提供一种可以根据节点及存储性能选择不同存储类的本地存储卷动态创建方法。
4.本发明的目的二是提供一种可以根据节点及存储性能选择不同存储类的本地存储卷动态创建设备。
5.为了实现上述目的一,本发明提供一种本地存储卷动态创建方法,包括:
6.步骤1:创建本地存储提供器hostpath provisioner为k8s用户提供使用每个节点的本地存储,provisioner部署为守护进程集daemonset,以确保部分或全部节点上各运行一个pod的副本;
7.步骤2:生成provisioner的服务账户serviceaccount、角色绑定clusterrolebinding、角色规范clusterrole,并进行自定义配置;
8.步骤3:创建hostpath存储类storageclass,通过创建storageclass来动态生成一个存储卷,配置存储类的provisioner参数为example.io/hostpath,配置存储类的volumebindingmode绑定模式为waitforfirstconsumer;
9.步骤4:创建test-pvc并绑定hostpath存储类,pvc通过storageclassname请求特定的存储类。
10.作为进一步地改进,步骤1中的hostpath provisioner是一个csi插件名称,每个storageclass都有一个provisioner,用于指定使用哪个csi插件用于pvc创建,provisioner csi插件的具体工作步骤如下:
11.步骤11:用户创建pvc资源后,pvc指定存储大小及storageclass;
12.步骤12:存储卷控制器persistentvolumecontroller检查到集群中新创建的pvc
没有匹配的pv,且pvc使用的是非集群内置的存储类型,则为pvc打上annotation注释;
13.步骤13:provisioner组件检查pvc的annotation中包含的标签内容指向的是自己,则开始存储卷创建流程;
14.步骤14:provisioner获取与其绑定的storageclass资源中的parameters参数,parameters提取并解析节点及存储路径参数;
15.步骤15:provisioner检查当前节点是否在parameters中的指定节点列表中,如果不在指定节点列表中则直接返回错误;否则开始创建pv;
16.步骤16:如果parameters中的存储路径参数为多个,则随机选择一个用于pv创建;
17.步骤17:当pvc删除时,provisioner检查到pv的annotation注释中包含"nodename"信息并且"nodename"指向的是当前节点,则删除pv挂载点绝对路径内容。
18.进一步地,pv创建的具体步骤如下:
19.a.计算存储路径,挂载点拼接存储路径;
20.b.在选择的存储路径下以pv名称创建同名目录,并设置“0777”权限,如果创建失败则返回错误;
21.c.根据节点及存储路径生成pv的规格,并增加pv annotation标名节点信息"nodename":nodename;
22.d.通过k8s api接口创建pv;
23.e.返回成功。
24.进一步地,在步骤1中,当有节点加入集群时,为加入的节点新增一个pod;当有节点从集群移除时,移除的节点对应的pod被回收。
25.进一步地,在步骤1中,daemonset配置挂载系统根目录“/”到容器中,daemonset配置环境变量node_name并通过容器上下文赋值为pod所在节点。
26.进一步地,在步骤3中,当pvc被pod使用时,才触发pv和后端存储的创建,同时实现pvc/pv的绑定。
27.进一步地,在步骤3中,配置parameters参数用于节点及存储路径设置,其中,节点及存储路径均可以选择多个路径,节点参数之间及路径参数之间用“;”间隔开来。
28.进一步地,节点参数可以为空,当节点列表为空时表示该节点可任意调度到其他节点。
29.进一步地,hostpath provisioner将根据配置好的parameters参数创建volume存储,作为使用约束,禁止使用根目录“/”作为存储路径。
30.为了实现上述目的二,本发明提供一种电子设备,所述设备包括处理器以及存储器:
31.所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
32.所述处理器用于根据所述程序代码中的指令执行上述的本地存储卷动态创建方法。
33.有益效果
34.本发明与现有技术相比,具有的优点为:
35.本发明支持多个storageclass创建,可以通过创建新的storageclass或者增加存储路径的方式扩展存储;支持一个存储类对应一个节点,根据节点存储类定向调度到指定
节点;支持一个存储类对应多个节点的多个路径;支持一个存储类对应一个或多个节点的ssd或hdd磁盘分区路径,可以根据存储性能需求选择对应的存储类。
附图说明
36.图1为本发明的工作流程图;
37.图2为本发明中provisioner csi插件的具体工作流程图。
具体实施方式
38.下面结合附图中的具体实施例对本发明做进一步的说明。
39.参阅图1、2,一种本地存储卷动态创建方法,包括:
40.步骤1:创建本地存储提供器hostpath provisioner为k8s用户提供使用每个节点的本地存储,provisioner部署为守护进程集daemonset,以确保部分或全部节点上各运行一个pod的副本;pod是所有业务类型的基础,也是k8s管理的最小单位级,它是一个或多个容器的组合;
41.步骤2:生成provisioner的服务账户serviceaccount、角色绑定clusterrolebinding、角色规范clusterrole,并进行自定义配置;
42.步骤3:创建hostpath存储类storageclass,通过创建storageclass来动态生成一个存储卷,配置存储类的provisioner参数为example.io/hostpath,配置存储类的volumebindingmode绑定模式为waitforfirstconsumer;
43.步骤4:创建test-pvc并绑定hostpath存储类,pvc通过storageclassname请求特定的存储类。
44.步骤1中的hostpath provisioner是一个csi插件名称,每个storageclass都有一个provisioner,用于指定使用哪个csi插件用于pvc创建,provisioner csi插件的具体工作步骤如下:
45.步骤11:用户创建pvc资源后,pvc指定存储大小及storageclass;
46.步骤12:存储卷控制器persistentvolumecontroller检查到集群中新创建的pvc没有匹配的pv,且pvc使用的是非集群内置的存储类型,即第三方csi插件,则为pvc打上annotation注释;注释如:volume.beta.kubernetes.io/storage-provisioner=[csi插件名称]的标签(本示例中第三方插件名称为example.io/hostpath);
[0047]
步骤13:provisioner组件检查pvc的annotation中包含的标签内容指向的是自己,则开始存储卷创建流程;
[0048]
步骤14:provisioner获取与其绑定的storageclass资源中的parameters参数,parameters提取并解析节点及存储路径参数;
[0049]
步骤15:provisioner检查当前节点(即步骤1中的node_name环境变量)是否在parameters中的指定节点列表中,如果不在指定节点列表中则直接返回错误;否则开始创建pv;
[0050]
步骤16:如果parameters中的存储路径参数为多个,则随机选择一个用于pv创建;
[0051]
步骤17:当pvc删除时,provisioner检查到pv的annotation注释中包含"nodename"信息并且"nodename"指向的是当前节点,则删除pv挂载点绝对路径内容。
[0052]
步骤16中pv创建的具体步骤如下:
[0053]
a.计算存储路径,挂载点拼接存储路径;
[0054]
b.在选择的存储路径下以pv名称创建同名目录,并设置“0777”权限,如果创建失败则返回错误;
[0055]
c.根据节点及存储路径生成pv的规格,并增加pv annotation标名节点信息"nodename":nodename;
[0056]
d.通过k8s api接口创建pv;
[0057]
e.返回成功。
[0058]
在步骤1中,当有节点加入集群时,为加入的节点新增一个pod;当有节点从集群移除时,移除的节点对应的pod被回收。daemonset配置挂载系统根目录“/”到容器中,daemonset配置环境变量node_name并通过容器上下文赋值为pod所在节点。
[0059]
在步骤3中,当pvc被pod使用时,才触发pv和后端存储的创建,同时实现pvc/pv的绑定。配置parameters参数用于节点及存储路径设置,其中,节点及存储路径均可以选择多个路径,节点参数之间及路径参数之间用“;”间隔开来。节点参数可以为空,当节点列表为空时表示该节点可任意调度到其他节点。hostpath provisioner将根据配置好的parameters参数创建volume存储,作为使用约束,禁止使用根目录“/”作为存储路径。
[0060]
一种电子设备,所述设备包括处理器以及存储器:
[0061]
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
[0062]
所述处理器用于根据所述程序代码中的指令执行上述的本地存储卷动态创建方法。
[0063]
具体应用1
[0064]
本发明应用于基于kubernetes的动态存储类管理方法,包括如下步骤:
[0065]
1.创建并配置kubernetes集群,集群包括一个或多个控制节点和计算节点;
[0066]
2.创建hostpath provisioner。provisioner部署为daemonset。daemonset配置挂载系统根目录“/”到容器中,如挂载到挂载点“/host”。daemonset配置环境变量node_name并通过容器上下文赋值为pod所在节点。
[0067][0068][0069]
3.部署provisioner的serviceaccount,clusterrolebinding,clusterrole。
[0070]
4.创建hostpath存储类storageclass,配置存储类provisioner参数为example.io/hostpath,配置volumebindingmode绑定模式为waitforfirstconsumer。配置
parameters参数用于节点及存储路径设置,其中,节点及存储路径均可以选择多个路径,节点参数之间及路径参数之间用“;”间隔开来;节点参数可以为空,当节点列表为空时则说明可任意调度到所有节点。作为使用约束,禁止使用根目录“/”作为存储路径。hostpath provisioner将根据这些参数创建volume存储。
[0071]
以下是存储类创建的一种示例:示例中创建的存储类支持pvc绑定到node1或者node2节点上的/hostpath/ssd路径中。
[0072][0073][0074]
5.创建test-pvc绑定hostpath存储类,pvc通过storageclassname请求特定的存储类,以下是pvc创建方式:
[0075][0076][0077]
以上仅是本发明的优选实施方式,应当指出对于本领域的技术人员来说,在不脱离本发明结构的前提下,还可以作出若干变形和改进,这些都不会影响本发明实施的效果和专利的实用性。
再多了解一些

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

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

相关文献