CN114296637B - 一种本地存储卷动态创建方法及设备 - Google Patents
一种本地存储卷动态创建方法及设备 Download PDFInfo
- Publication number
- CN114296637B CN114296637B CN202111495573.2A CN202111495573A CN114296637B CN 114296637 B CN114296637 B CN 114296637B CN 202111495573 A CN202111495573 A CN 202111495573A CN 114296637 B CN114296637 B CN 114296637B
- Authority
- CN
- China
- Prior art keywords
- storage
- hostpath
- node
- provisioner
- pvc
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 18
- 230000027455 binding Effects 0.000 claims abstract description 15
- 238000009739 binding Methods 0.000 claims abstract description 15
- 230000001960 triggered effect Effects 0.000 claims description 3
- 239000000284 extract Substances 0.000 claims 1
- 230000000694 effects Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种本地存储卷动态创建方法,涉及云计算技术领域,解决无法支持多个存储池根据不同节点及不同存储性能进行本地存储的技术问题,方法包括:步骤1:创建本地存储提供器hostpath provisioner为k8s用户提供使用每个节点的本地存储,保部分或全部节点上各运行一个pod的副本;步骤2:生成provisioner的服务账户ServiceAccount、角色绑定ClusterRoleBinding、角色规范ClusterRole;步骤3:创建hostpath存储类StorageClass来动态生成一个存储卷,配置存储类的provisioner参数为example.io/hostpath,配置存储类的VolumeBindingMode绑定模式为WaitForFirstConsumer;步骤4:创建test‑pvc并绑定hostpath存储类,pvc通过StorageClassName请求特定的存储类。本发明还公开了一种本地存储卷动态创建设备。
Description
技术领域
本发明涉及云计算技术领域,更具体地说,它涉及一种本地存储卷动态创建方法及设备。
背景技术
HostPath Volume为pod挂载宿主机上的目录或文件(HostPath:本地卷类型的数据卷将pod所在节点的文件系统上某一个文件或者目录挂载到容器组或容器内部),使得容器可以使用宿主机的高速文件系统进行存储。缺点是,在k8s中(kubernetes,简称k8s,是用8代替名字中间的8个字符“ubernete”而成的缩写,是一个开源的,用于管理云平台中多个主机上的容器化的应用),pod都是动态在各node节点上调度,当一个pod在当前node节点上启动并通过hostPath存储了文件到本地以后,下次调度到另一个节点上启动时,就无法使用在之前节点上存储的文件。目前开源社区如rancher提供了hostpath动态分配的方式,该方式虽然提供了hostpath动态申请,且支持多个节点多个路径的存储池扩展,但是无法支持多个存储池根据不同节点及不同存储性能需求的存储池选择方案。
发明内容
本发明要解决的技术问题是针对现有技术的上述不足,本发明的目的一是提供一种可以根据节点及存储性能选择不同存储类的本地存储卷动态创建方法。
本发明的目的二是提供一种可以根据节点及存储性能选择不同存储类的本地存储卷动态创建设备。
为了实现上述目的一,本发明提供一种本地存储卷动态创建方法,包括:
步骤1:创建本地存储提供器hostpath provisioner为k8s用户提供使用每个节点的本地存储,provisioner部署为守护进程集daemonset,以确保部分或全部节点上各运行一个pod的副本;
步骤2:生成provisioner的服务账户ServiceAccount、角色绑定ClusterRoleBinding、角色规范ClusterRole,并进行自定义配置;
步骤3:创建hostpath存储类StorageClass,通过创建StorageClass来动态生成一个存储卷,配置存储类的provisioner参数为example.io/hostpath,配置存储类的volumeBindingMode绑定模式为WaitForFirstConsumer;
步骤4:创建test-pvc并绑定hostpath存储类,pvc通过StorageClassName请求特定的存储类。
作为进一步地改进,步骤1中的hostpath provisioner是一个CSI插件名称,每个StorageClass都有一个provisioner,用于指定使用哪个CSI插件用于pvc创建,provisioner CSI插件的具体工作步骤如下:
步骤11:用户创建pvc资源后,pvc指定存储大小及StorageClass;
步骤12:存储卷控制器PersistentVolumeController检查到集群中新创建的pvc没有匹配的pv,且pvc使用的是非集群内置的存储类型,则为pvc打上annotation注释;
步骤13:provisioner组件检查pvc的annotation中包含的标签内容指向的是自己,则开始存储卷创建流程;
步骤14:provisioner获取与其绑定的storageclass资源中的parameters参数,parameters提取并解析节点及存储路径参数;
步骤15:provisioner检查当前节点是否在parameters中的指定节点列表中,如果不在指定节点列表中则直接返回错误;否则开始创建pv;
步骤16:如果parameters中的存储路径参数为多个,则随机选择一个用于pv创建;
步骤17:当pvc删除时,provisioner检查到pv的annotation注释中包含"nodeName"信息并且"nodeName"指向的是当前节点,则删除pv挂载点绝对路径内容。
进一步地,pv创建的具体步骤如下:
a.计算存储路径,挂载点拼接存储路径;
b.在选择的存储路径下以pv名称创建同名目录,并设置“0777”权限,如果创建失败则返回错误;
c.根据节点及存储路径生成pv的规格,并增加pv annotation标名节点信息"nodeName":nodeName;
d.通过k8s api接口创建pv;
e.返回成功。
进一步地,在步骤1中,当有节点加入集群时,为加入的节点新增一个pod;当有节点从集群移除时,移除的节点对应的pod被回收。
进一步地,在步骤1中,daemonset配置挂载系统根目录“/”到容器中,daemonset配置环境变量NODE_NAME并通过容器上下文赋值为pod所在节点。
进一步地,在步骤3中,当pvc被pod使用时,才触发PV和后端存储的创建,同时实现pvc/pv的绑定。
进一步地,在步骤3中,配置parameters参数用于节点及存储路径设置,其中,节点及存储路径均可以选择多个路径,节点参数之间及路径参数之间用“;”间隔开来。
进一步地,节点参数可以为空,当节点列表为空时表示该节点可任意调度到其他节点。
进一步地,hostpath Provisioner将根据配置好的parameters参数创建volume存储,作为使用约束,禁止使用根目录“/”作为存储路径。
为了实现上述目的二,本发明提供一种电子设备,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行上述的本地存储卷动态创建方法。
有益效果
本发明与现有技术相比,具有的优点为:
本发明支持多个storageclass创建,可以通过创建新的storageclass或者增加存储路径的方式扩展存储;支持一个存储类对应一个节点,根据节点存储类定向调度到指定节点;支持一个存储类对应多个节点的多个路径;支持一个存储类对应一个或多个节点的ssd或hdd磁盘分区路径,可以根据存储性能需求选择对应的存储类。
附图说明
图1为本发明的工作流程图;
图2为本发明中provisioner CSI插件的具体工作流程图。
具体实施方式
下面结合附图中的具体实施例对本发明做进一步的说明。
参阅图1、2,一种本地存储卷动态创建方法,包括:
步骤1:创建本地存储提供器hostpath provisioner为k8s用户提供使用每个节点的本地存储,provisioner部署为守护进程集daemonset,以确保部分或全部节点上各运行一个pod的副本;pod是所有业务类型的基础,也是k8s管理的最小单位级,它是一个或多个容器的组合;
步骤2:生成provisioner的服务账户ServiceAccount、角色绑定ClusterRoleBinding、角色规范ClusterRole,并进行自定义配置;
步骤3:创建hostpath存储类storageclass,通过创建storageclass来动态生成一个存储卷,配置存储类的provisioner参数为example.io/hostpath,配置存储类的volumeBindingMode绑定模式为WaitForFirstConsumer;
步骤4:创建test-pvc并绑定hostpath存储类,pvc通过storageClassName请求特定的存储类。
步骤1中的hostpath provisioner是一个CSI插件名称,每个StorageClass都有一个provisioner,用于指定使用哪个CSI插件用于pvc创建,provisioner CSI插件的具体工作步骤如下:
步骤11:用户创建pvc资源后,pvc指定存储大小及StorageClass;
步骤12:存储卷控制器PersistentVolumeController检查到集群中新创建的pvc没有匹配的pv,且pvc使用的是非集群内置的存储类型,即第三方csi插件,则为pvc打上annotation注释;注释如:volume.beta.kubernetes.io/storage-provisioner=[CSI插件名称]的标签(本示例中第三方插件名称为example.io/hostpath);
步骤13:provisioner组件检查pvc的annotation中包含的标签内容指向的是自己,则开始存储卷创建流程;
步骤14:provisioner获取与其绑定的storageclass资源中的parameters参数,parameters提取并解析节点及存储路径参数;
步骤15:provisioner检查当前节点(即步骤1中的NODE_NAME环境变量)是否在parameters中的指定节点列表中,如果不在指定节点列表中则直接返回错误;否则开始创建pv;
步骤16:如果parameters中的存储路径参数为多个,则随机选择一个用于pv创建;
步骤17:当pvc删除时,provisioner检查到pv的annotation注释中包含"nodeName"信息并且"nodeName"指向的是当前节点,则删除pv挂载点绝对路径内容。
步骤16中pv创建的具体步骤如下:
a.计算存储路径,挂载点拼接存储路径;
b.在选择的存储路径下以pv名称创建同名目录,并设置“0777”权限,如果创建失败则返回错误;
c.根据节点及存储路径生成pv的规格,并增加pv annotation标名节点信息"nodeName":nodeName;
d.通过k8s api接口创建pv;
e.返回成功。
在步骤1中,当有节点加入集群时,为加入的节点新增一个pod;当有节点从集群移除时,移除的节点对应的pod被回收。daemonset配置挂载系统根目录“/”到容器中,daemonset配置环境变量NODE_NAME并通过容器上下文赋值为pod所在节点。
在步骤3中,当pvc被pod使用时,才触发pv和后端存储的创建,同时实现pvc/pv的绑定。配置parameters参数用于节点及存储路径设置,其中,节点及存储路径均可以选择多个路径,节点参数之间及路径参数之间用“;”间隔开来。节点参数可以为空,当节点列表为空时表示该节点可任意调度到其他节点。hostpath Provisioner将根据配置好的parameters参数创建volume存储,作为使用约束,禁止使用根目录“/”作为存储路径。
一种电子设备,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行上述的本地存储卷动态创建方法。
具体应用1
本发明应用于基于kubernetes的动态存储类管理方法,包括如下步骤:
1.创建并配置kubernetes集群,集群包括一个或多个控制节点和计算节点;
2.创建hostpath provisioner。Provisioner部署为daemonset。DaemonSet配置挂载系统根目录“/”到容器中,如挂载到挂载点“/host”。DaemonSet配置环境变量NODE_NAME并通过容器上下文赋值为pod所在节点。
3.部署Provisioner的ServiceAccount,ClusterRoleBinding,ClusterRole。
4.创建hostpath存储类StorageClass,配置存储类provisioner参数为example.io/hostpath,配置VolumeBindingMode绑定模式为WaitForFirstConsumer。配置parameters参数用于节点及存储路径设置,其中,节点及存储路径均可以选择多个路径,节点参数之间及路径参数之间用“;”间隔开来;节点参数可以为空,当节点列表为空时则说明可任意调度到所有节点。作为使用约束,禁止使用根目录“/”作为存储路径。hostpathProvisioner将根据这些参数创建volume存储。
以下是存储类创建的一种示例:示例中创建的存储类支持pvc绑定到node1或者node2节点上的/hostpath/ssd路径中。
5.创建test-pvc绑定hostpath存储类,pvc通过storageClassName请求特定的存储类,以下是pvc创建方式:
以上仅是本发明的优选实施方式,应当指出对于本领域的技术人员来说,在不脱离本发明结构的前提下,还可以作出若干变形和改进,这些都不会影响本发明实施的效果和专利的实用性。
Claims (8)
1.一种本地存储卷动态创建方法,其特征在于,包括:
步骤1:创建本地存储提供器hostpath provisioner为k8s用户提供使用每个节点的本地存储,本地存储提供器hostpath provisioner部署为守护进程集daemonset,以确保部分或全部节点上各运行一个pod的副本;
步骤2:生成本地存储提供器hostpath provisioner的服务账户ServiceAccount、角色绑定ClusterRoleBinding、角色规范ClusterRole,并进行自定义配置;
步骤3:创建hostpath存储类StorageClass,通过创建hostpath存储类StorageClass来动态生成一个存储卷,配置hostpath存储类StorageClass的provisioner参数为example.io/hostpath,配置hostpath存储类StorageClass的VolumeBindingMode绑定模式为WaitForFirstConsumer;
步骤4:创建test-pvc并绑定hostpath存储类StorageClass,test-pvc通过hostpath存储类StorageClass的StorageClassName请求特定的存储类;
步骤1中的本地存储提供器hostpath provisioner是一个CSI插件名称,每个hostpath存储类StorageClass都有一个provisioner,用于指定使用哪个CSI插件用于test-pvc创建,CSI插件的具体工作步骤如下:
步骤11:用户创建test-pvc资源后,test-pvc指定存储大小及hostpath存储类StorageClass;
步骤12:存储卷控制器PersistentVolumeController检查到集群中新创建的test-pvc没有匹配的pv,且test-pvc使用的是非集群内置的存储类型,则为test-pvc打上annotation注释;
步骤13:本地存储提供器hostpath provisioner组件检查test-pvc的annotation注释中包含的标签内容指向的是自己,则开始存储卷创建流程;
步骤14:本地存储提供器hostpath provisioner获取与其绑定的hostpath存储类StorageClass资源中的parameters参数,parameters参数提取并解析节点及存储路径参数;
步骤15:本地存储提供器hostpath provisioner检查当前节点是否在parameters参数中的指定节点列表中,如果不在指定节点列表中则直接返回错误;否则开始创建pv;
步骤16:如果parameters参数中的存储路径参数为多个,则随机选择一个用于pv创建;
步骤17:当test-pvc删除时,本地存储提供器hostpath provisioner检查到pv的annotation注释中包含"nodeName"信息并且"nodeName"指向的是当前节点,则删除pv挂载点绝对路径内容;
pv创建的具体步骤如下:
a.计算存储路径,挂载点拼接存储路径;
b.在选择的存储路径下以pv名称创建同名目录,并设置“0777”权限,如果创建失败则返回错误;
c.根据节点及存储路径生成pv的规格,并增加pv annotation注释标名节点信息"nodeName":nodeName;
d.通过k8s api接口创建pv;
e.返回成功。
2.根据权利要求1所述的一种本地存储卷动态创建方法,其特征在于,在步骤1中,当有节点加入集群时,为加入的节点新增一个pod;当有节点从集群移除时,移除的节点对应的pod被回收。
3.根据权利要求1所述的一种本地存储卷动态创建方法,其特征在于,在步骤1中,守护进程集daemonset配置挂载系统根目录“/”到容器中,守护进程集daemonset配置环境变量NODE_NAME并通过容器上下文赋值为pod所在节点。
4.根据权利要求1所述的一种本地存储卷动态创建方法,其特征在于,在步骤3中,当test-pvc被pod使用时,才触发pv和后端存储的创建,同时实现test-pvc/pv的绑定。
5.根据权利要求1所述的一种本地存储卷动态创建方法,其特征在于,在步骤3中,配置parameters参数用于节点及存储路径设置,其中,节点及存储路径均可以选择多个路径,节点参数之间及路径参数之间用“;”间隔开来。
6.根据权利要求5所述的一种本地存储卷动态创建方法,其特征在于,节点参数可以为空,当节点列表为空时表示该节点可任意调度到其他节点。
7.根据权利要求5所述的一种本地存储卷动态创建方法,其特征在于,本地存储提供器hostpath provisioner将根据配置好的parameters参数创建volume存储,作为使用约束,禁止使用根目录“/”作为存储路径。
8.一种电子设备,其特征在于,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行权利要求1-7任一项所述的本地存储卷动态创建方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111495573.2A CN114296637B (zh) | 2021-12-09 | 2021-12-09 | 一种本地存储卷动态创建方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111495573.2A CN114296637B (zh) | 2021-12-09 | 2021-12-09 | 一种本地存储卷动态创建方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114296637A CN114296637A (zh) | 2022-04-08 |
CN114296637B true CN114296637B (zh) | 2024-05-17 |
Family
ID=80966009
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111495573.2A Active CN114296637B (zh) | 2021-12-09 | 2021-12-09 | 一种本地存储卷动态创建方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114296637B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106383666A (zh) * | 2016-09-07 | 2017-02-08 | 东信和平科技股份有限公司 | 一种数据存储方法及装置 |
CN107908372A (zh) * | 2017-12-14 | 2018-04-13 | 南京云创大数据科技股份有限公司 | 一种异地异构的多融合存储方法 |
CN111966305A (zh) * | 2020-10-22 | 2020-11-20 | 腾讯科技(深圳)有限公司 | 持久卷分配方法、装置、计算机设备和存储介质 |
CN111966450A (zh) * | 2020-07-17 | 2020-11-20 | 苏州浪潮智能科技有限公司 | 一种国产化容器云平台存储卷动态创建方法及装置 |
CN112230847A (zh) * | 2020-09-18 | 2021-01-15 | 苏州浪潮智能科技有限公司 | 一种监控K8s存储卷的方法、系统、终端及存储介质 |
CN113126922A (zh) * | 2021-04-09 | 2021-07-16 | 浪潮软件科技有限公司 | 基于Kubernetes的动态存储类管理方法及装置 |
CN113485786A (zh) * | 2021-06-29 | 2021-10-08 | 济南浪潮数据技术有限公司 | 一种基于云物理机实现pod挂载cinder卷的方法及系统 |
CN113495681A (zh) * | 2020-04-07 | 2021-10-12 | 杭州萤石软件有限公司 | 一种nand flash文件数据存取方法、装置及存储介质 |
CN113742033A (zh) * | 2021-09-08 | 2021-12-03 | 广西东信数建信息科技有限公司 | 一种kubernetes集群联邦系统及其实现方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7840730B2 (en) * | 2008-06-27 | 2010-11-23 | Microsoft Corporation | Cluster shared volumes |
US10402100B2 (en) * | 2016-03-23 | 2019-09-03 | Netapp Inc. | Techniques for path optimization in storage networks |
US11003372B2 (en) * | 2018-05-31 | 2021-05-11 | Portworx, Inc. | Protecting volume namespaces from corruption in a distributed container orchestrator |
JP6751423B2 (ja) * | 2018-07-31 | 2020-09-02 | 株式会社日立製作所 | ストレージ装置及びその制御方法 |
US11113158B2 (en) * | 2019-10-04 | 2021-09-07 | Robin Systems, Inc. | Rolling back kubernetes applications |
US11200082B2 (en) * | 2019-10-31 | 2021-12-14 | EMC IP Holding Company LLC | Data storage system employing dummy namespaces for discovery of NVMe namespace groups as protocol endpoints |
-
2021
- 2021-12-09 CN CN202111495573.2A patent/CN114296637B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106383666A (zh) * | 2016-09-07 | 2017-02-08 | 东信和平科技股份有限公司 | 一种数据存储方法及装置 |
CN107908372A (zh) * | 2017-12-14 | 2018-04-13 | 南京云创大数据科技股份有限公司 | 一种异地异构的多融合存储方法 |
CN113495681A (zh) * | 2020-04-07 | 2021-10-12 | 杭州萤石软件有限公司 | 一种nand flash文件数据存取方法、装置及存储介质 |
CN111966450A (zh) * | 2020-07-17 | 2020-11-20 | 苏州浪潮智能科技有限公司 | 一种国产化容器云平台存储卷动态创建方法及装置 |
CN112230847A (zh) * | 2020-09-18 | 2021-01-15 | 苏州浪潮智能科技有限公司 | 一种监控K8s存储卷的方法、系统、终端及存储介质 |
CN111966305A (zh) * | 2020-10-22 | 2020-11-20 | 腾讯科技(深圳)有限公司 | 持久卷分配方法、装置、计算机设备和存储介质 |
CN113126922A (zh) * | 2021-04-09 | 2021-07-16 | 浪潮软件科技有限公司 | 基于Kubernetes的动态存储类管理方法及装置 |
CN113485786A (zh) * | 2021-06-29 | 2021-10-08 | 济南浪潮数据技术有限公司 | 一种基于云物理机实现pod挂载cinder卷的方法及系统 |
CN113742033A (zh) * | 2021-09-08 | 2021-12-03 | 广西东信数建信息科技有限公司 | 一种kubernetes集群联邦系统及其实现方法 |
Non-Patent Citations (1)
Title |
---|
基于Ceph的云存储应用研究;谢超群;;洛阳师范学院学报;20190225(02);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114296637A (zh) | 2022-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107580083B (zh) | 一种容器ip地址分配的方法和系统 | |
CN113296792B (zh) | 存储方法、装置、设备、存储介质和系统 | |
CN102710814B (zh) | 虚拟机ip地址的控制方法及装置 | |
US9246762B1 (en) | NTP client-side automatic configuration | |
US11429568B2 (en) | Global namespace for a hierarchical set of file systems | |
CN104301338A (zh) | 基于云平台的应用系统自动部署方法 | |
CN108270626A (zh) | 一种升级服务器固件的方法、装置、设备及可读存储介质 | |
US10783073B2 (en) | Chronologically ordered out-of-place update key-value storage system | |
CN113961520A (zh) | 动态文件挂载方法、系统、计算机设备及可读存储介质 | |
CN113805969A (zh) | 参数配置的获取方法、装置、存储介质和电子设备 | |
CN113419813B (zh) | 一种基于容器平台部署裸机管理服务的方法及装置 | |
CN114296637B (zh) | 一种本地存储卷动态创建方法及设备 | |
US10579598B2 (en) | Global namespace for a hierarchical set of file systems | |
CN114911421B (zh) | 基于csi插件的数据存储方法、系统、装置及存储介质 | |
CN106528196B (zh) | 智能设备的app加载方法及应用该方法的智能设备、系统 | |
CN115174529B (zh) | 一种网络处理方法、装置、电子设备及存储介质 | |
CN115048187A (zh) | 一种基于Operator的pvc文件导入方法、设备及存储介质 | |
Cisco | Configuring the TrueView Management Station | |
Cisco | Configuring the TrueView Management Station | |
Cisco | Configuring the TrueView Management Station | |
Cisco | Configuring the TrueView Management Station | |
Cisco | Configuring the TrueView Management Station | |
Cisco | Configuring the TrueView Management Station | |
Cisco | Configuring the TrueView Management Station | |
CN107357634A (zh) | 一种参数配置管理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |