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

存储卷的挂载方法及装置、存储介质及电子设备与流程

2022-11-19 16:52:08 来源:中国专利 TAG:

1.本技术实施例涉及计算机领域,具体而言,涉及一种存储卷的挂载方法及装置、存储介质及电子设备。


背景技术:

2.随着容器技术的兴起,一大批容器编排项目也应运而生,比较有代表性的有docker、swarm、openshift、kubernetes等;其中kubernetes以其服务发现和负载均衡、存储编排、自动部署和回滚、自我修复、密钥与配置管理以及高可扩展性等优秀特性在容器编排工具的竞争中脱颖而出,成为云原生时代的引领者,越来越多的用户正在将其业务框架切换到kubernetes,使用场景也变得更加复杂,很多地方需要用到数据持久化。
3.针对这一需求场景,kubernetes提出了一种volume(存储卷)的概念,volume是对各种存储资源的抽象、虚拟化,为管理、控制、使用存储资源提供了统一的接口。其中,hostpath类型的volume可以将主机节点的文件系统中的文件或目录挂载到kubernetes集群中,让pod可以通过挂载的方式读取到主机上的文件,为相应业务开发和部署提供了极大的便利。
4.然而,用户的业务场景是多变的,kubernetes虽然是一个优秀的容器编排工具,但由于其标准化的要求,从而只能发行一些标准版本,并不能满足使用者所有的诉求,因此这些诉求也成为了用户的痛点。例如,当pod(相当于上述第一部署单元)运行之后,如果想要修改volume,只能将业务重启才可以实现;这对于一些将pod当做虚拟机使用的场景将会使其易用性严重降低。特别地,对于一些在pod中运行深度学习训练任务的场景,由于训练脚本众多,可能需要不同的数据集进行训练,如果单独的往pod管理的容器中拷贝,操作过程将会非常繁琐,而且如果对该容器进行保存镜像操作时,将会导致保存的镜像占用存储过大等问题。
5.针对相关技术中,在pod运行之后,用户无法在不重启pod的情况下修改容器挂载的存储卷,导致pod的易用性严重降低等问题,尚未提出有效的解决方案。
6.因此,有必要对相关技术予以改良以克服相关技术中的所述缺陷。


技术实现要素:

7.本技术实施例提供了一种存储卷的挂载方法及装置、存储介质及电子设备,以至少解决相关技术中在pod运行之后,用户无法在不重启pod的情况下修改volume,导致pod的易用性严重降低的问题。
8.根据本技术的一个实施例,提供了一种存储卷的挂载方法,包括:为第一部署单元创建目标资源实例,其中,所述目标资源实例用于记录所述存储卷的配置信息和所述第一部署单元的标识信息;在确定所述目标资源实例的状态为第一状态的情况下,根据所述配置信息和所述标识信息创建目标任务,其中,所述第一状态是所述目标资源实例被创建时初始设置的准备状态;执行所述目标任务,以将所述存储卷挂载到目标载体中,其中,所述
目标载体为所述第一部署单元管理的容器。
9.在一个示例性实施例中,在所述为第一部署单元创建目标资源实例之前,所述方法还包括:获取部署单元集合,并获取所述部署单元集合中的各个部署单元的状态信息,其中,所述状态信息用于指示所述各个部署单元所处的状态;在所述部署单元集合中查找所述状态信息指示的状态为运行状态的部署单元,并将查找到的所述状态信息指示的状态为运行状态的部署单元确定为所述第一部署单元。
10.在一个示例性实施例中,在所述将查找到的所述状态信息指示的状态为运行状态的部署单元确定为所述第一部署单元之后,所述方法还包括:获取所述第一部署单元的标识信息,其中,所述标识信息至少包括:所述第一部署单元的名称,所述第一部署单元的命名空间,所述命名空间用于存储所述第一部署单元管理的所述目标载体的容器文件;将所述标识信息记录在所述第一部署单元对应的资源实例模板,其中,所述资源实例模板用于创建所述目标资源实例。
11.在一个示例性实施例中,所述为第一部署单元创建目标资源实例,包括:响应于获取到的配置指令,配置所述存储卷的配置信息,其中,所述配置信息至少包括:所述存储卷的类别;将所述配置信息记录在所述资源实例模板中,得到所述目标资源实例。
12.在一个示例性实施例中,在所述为第一部署单元创建目标资源实例之后,所述方法还包括:查找与所述目标资源实例中记录的所述标识信息对应的所述第一部署单元;在查找不到所述第一部署单元的情况下,将所述目标资源实例确定为待删除的资源实例。
13.在一个示例性实施例中,在将所述目标资源实例确定为待删除的资源实例之后,所述方法还包括:在预设时长内均查找不到所述第一部署单元的情况下,删除所述待删除的资源实例。
14.在一个示例性实施例中,在所述为第一部署单元创建目标资源实例之后,所述方法还包括:根据所述第一部署单元的创建时间和所述目标资源实例的创建时间,确定所述第一部署单元是否发生漂移事件,其中,所述漂移事件用于指示所述第一部署单元自动重启;在确定出所述第一部署单元发生漂移事件的情况下,发送提示信息,其中,所述提示信息用于提示为所述第一部署单元管理的所述目标载体重新挂载所述存储卷。
15.在一个示例性实施例中,所述根据所述第一部署单元的创建时间和所述目标资源实例的创建时间,确定所述第一部署单元是否发生漂移事件,包括:在所述第一部署单元的创建时间晚于所述目标资源实例的创建时间的情况下,确定所述第一部署单元发生所述漂移事件。
16.在一个示例性实施例中,在所述为第一部署单元创建目标资源实例之后,所述方法还包括:查询所述目标资源实例中的目标字段是否为空,其中,所述目标字段用于指示所述目标资源实例的状态;在查询到所述目标字段为空的情况下,将所述目标资源实例中的所述目标字段设置为所述第一状态。
17.在一个示例性实施例中,在查询所述目标资源实例中的目标字段是否为空之后,所述方法还包括:在查询到所述目标字段不为空、且所述目标字段所指示的状态不为第二状态的情况下,根据所述目标资源实例中记录的所述标识信息查询所述目标任务的执行状态,其中,所述第二状态为成功态或失败态;在所述执行状态指示所述目标任务执行完毕的情况下,将所述目标资源实例中的所述目标字段设置为用于指示所述第二状态。
18.在一个示例性实施例中,所述执行所述目标任务,包括:在所述配置信息用于指示所述存储卷的类别为本地存储卷的情况下,获取所述存储卷的第一路径信息;在所述第一部署单元的命名空间下创建容器文件,并获取所述容器文件的第二路径信息,其中,所述容器文件用于挂载所述存储卷;在所述第二路径信息指示的所述容器文件中配置所述第一路径信息对应的挂载信息,以将所述存储卷挂载到所述目标载体中。
19.在一个示例性实施例中,所述执行所述目标任务,包括:在所述配置信息用于指示所述存储卷的类别为网络存储卷的情况下,导出所述存储卷的存储空间,并获取所述存储空间的第三路径信息;获取所述目标载体的命名空间的第四路径信息;在所述第四路径信息指示的所述目标载体的命名空间下配置所述第三路径信息对应的挂载信息,以将所述存储卷挂载到所述目标载体中。
20.在一个示例性实施例中,所述执行所述目标任务,以将所述存储卷挂载到目标载体中,包括:在目标业务处于运行状态下,执行所述目标任务,以将所述存储卷挂载到目标载体中,其中,所述目标业务运行在所述第一部署单元中,所述存储卷是允许被所述目标业务使用的存储卷。
21.根据本技术的另一个实施例,提供了一种存储卷的挂载装置,包括:第一创建模块,用于为第一部署单元创建目标资源实例,其中,所述目标资源实例用于记录所述存储卷的配置信息和所述第一部署单元的标识信息;第二创建模块,用于在确定所述目标资源实例的状态为第一状态的情况下,根据所述配置信息和所述标识信息创建目标任务;执行模块,用于执行所述目标任务,以将所述存储卷挂载到目标载体中,其中,所述目标载体为所述第一部署单元管理的容器。
22.根据本技术的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
23.根据本技术的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
24.通过本技术,为第一部署单元创建目标资源实例,该目标资源实例可以详细记录存储卷的挂载状态,且所述目标资源实例还用于记录所述存储卷的配置信息和所述第一部署单元的标识信息;解析目标资源实例的信息,在解析出目标资源实例的状态为第一状态情况下,根据所述配置信息和所述标识信息创建目标任务;从而可以在第一部署单元处于运行状态的情况下,通过执行所述目标任务,以将所述存储卷挂载到目标容器(相当于上述目标载体)中;因此,可以解决相关技术中,在pod运行之后,用户无法在不重启pod的情况下修改容器挂载的存储卷,导致pod的易用性严重降低的问题,达到可以对pod管理的容器进行存储卷的自动化动态调整的技术效果。
附图说明
25.图1是根据本技术实施例的存储卷的挂载方法的计算机终端的硬件结构框图;图2是根据本技术实施例的存储卷的挂载方法的流程图;图3是根据本技术实施例的一种可选的crd实例的创建方法的流程图;
图4是根据本技术实施例的一种可选的crd实例的删除方法的流程图;图5是根据本技术实施例的一种可选的pod发生漂移的处理方法的流程图;图6是根据本技术实施例的一种可选的crd实例状态的更新方法的流程图;图7是根据本技术实施例的存储卷的挂载装置的结构框图。
具体实施方式
26.下文中将参考附图并结合实施例来详细说明本技术的实施例。
27.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
28.本技术实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本技术实施例的一种存储卷的挂载方法的计算机终端的硬件结构框图。如图1所示,计算机终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)和用于存储数据的存储器104,其中,上述计算机终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机终端的结构造成限定。例如,计算机终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
29.存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本技术实施例中的存储卷的挂载方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
30.传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(network interface controller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(radio frequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。
31.在本实施例中提供了一种运行于上述计算机终端的存储卷的挂载方法,图2是根据本技术实施例的存储卷的挂载方法的流程图,如图2所示,该流程包括如下步骤:步骤s202,为第一部署单元创建目标资源实例,其中,所述目标资源实例用于记录所述存储卷的配置信息和所述第一部署单元的标识信息;需要说明的是,存储卷是定义在pod资源之上,可被其内部的所有容器挂载的共享目录,它关联至某外部的存储设备之上的存储空间,从而独立于容器自身的文件系统。
32.步骤s204,在确定所述目标资源实例的状态为第一状态的情况下,根据所述配置信息和所述标识信息创建目标任务,其中,所述第一状态是所述目标资源实例被创建时初始设置的准备状态;步骤s206,执行所述目标任务,以将所述存储卷挂载到目标载体中,其中,所述目
标载体为所述第一部署单元管理的容器。
33.通过上述步骤,为第一部署单元创建目标资源实例,该目标资源实例可以详细记录存储卷的挂载状态,且所述目标资源实例还用于记录所述存储卷的配置信息和所述第一部署单元的标识信息;解析目标资源实例的信息,在解析出目标资源实例的状态为第一状态情况下,根据所述配置信息和所述标识信息创建目标任务;从而可以在第一部署单元处于运行状态的情况下,通过执行所述目标任务,以将所述存储卷挂载到目标载体中;因此,可以解决相关技术中,在pod运行之后,用户无法在不重启pod的情况下修改容器挂载的存储卷,导致pod的易用性严重降低的问题,达到可以对pod管理的容器进行存储卷的自动化动态调整的技术效果。
34.需要说明的是,kubernetes是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。
35.需要说明的是,kubernetes并不直接运行容器,而是使用一个抽象的资源对象来封装一个或者多个容器,这个抽象即为pod,它也是kubernetes的最小调度单元,也即最小部署单元。同一pod中的容器共享网络名称空间和存储资源,这些容器可经由本地回环节口lo直接通信,但彼此之间又在mount、user及pid等名称空间上保持了隔离。尽管pod中可以包含多个容器,但是作为最小调度单元,它应该尽可能地保持“小”,即通常只应该包含一个主容器,以及必要的辅助性容器(sidecar)。
36.其中,上述步骤的执行主体可以为计算机终端等,但不限于此。
37.可选的,上述存储卷的挂载方法还可以通过其他方法来实现,以下结合可选实施例对上述存储卷的挂载方法进行描述:步骤1:为pod(相当于上述第一部署单元)创建一种用于描述volume(相当于上述存储卷)动态调整的crd资源(相当于上述目标资源实例),该crd资源相当于一种对象描述,需要对该crd资源进行实例化以实现,而crd实例将会详细记述volume动态调整的信息;步骤2:设计一种operator模式,该operator中存在crd监听模块,operator会为每个pod都初始化一个crd实例,并且当pod被删除后,也会相应的销毁pod伴生的crd实例;步骤3:如果想动态更新目标pod管理的容器所挂载的volume时,需要对目标pod伴生的crd实例进行更新操作,operator会监听到该更新操作,并交由相应的kubernetes job(相当于上述目标任务)去处理,并且operator会实时监听这些job的状态,从而更新crd实例的状态信息;步骤4:kubernetes job被赋予了管理员的权限,从而可以对目标pod管理的容器的linux namespace(相当于上述命名空间)进行操作,从而执行具体的volume动态调整操作。
38.通过上述步骤,通过为pod创建一个伴生的crd实例,在需要对pod管理的容器进行volume动态调整时,只需对crd实例进行更新操作,从而根据更新后的crd实例创建一个kubernetes job,执行该kubernetes job以完成对pod管理的容器的volume的动态调整操作;从而解决了相关技术中,在pod运行之后,用户无法在不重启pod的情况下修改容器挂载的存储卷,导致pod的易用性严重降低的问题,达到可以对pod管理的容器进行存储卷的自动化动态调整的技术效果。
39.可选的,执行上述步骤s202:为第一部署单元创建目标资源实例之前,所述方法还
包括:获取部署单元集合,并获取所述部署单元集合中的各个部署单元的状态信息,其中,所述状态信息用于指示所述各个部署单元所处的状态;在所述部署单元集合中查找所述状态信息指示的状态为运行状态的部署单元,并将查找到的所述状态信息指示的状态为运行状态的部署单元确定为所述第一部署单元。
40.在本方案中,可以通过operator来管理crd实例的生成,但对于业务pod(相当于上述部署单元),需要在其创建并运行之后随即创建一个crd实例;因此,需要先通过定期调用api server接口获取kubernetes集群内的所有的业务pod列表(相当于上述部署单元集合),遍历该业务pod列表,判断每个业务pod的状态是否为running状态(相当于上述运行状态),若是,则需要为该业务pod创建crd实例,因此将查找到的状态信息指示的状态为运行状态的部署单元确定为第一部署单元。通过上述方案,实现了为每一个处于运行状态的pod创建伴生crd实例的技术效果。
41.需要说明的是,api server负责输出restful风格的kubernetes api,它是发往集群的所有rest操作命令的接入点,并负责接收、校验并响应所有的rest请求,结果状态被持久存储于etcd中。因此,api server是整个集群的网关。
42.基于上述步骤,在执行完上述确定步骤:将查找到的所述状态信息指示的状态为运行状态的部署单元确定为所述第一部署单元之后,所述方法还包括:获取所述第一部署单元的标识信息,其中,所述标识信息至少包括:所述第一部署单元的名称,所述第一部署单元的命名空间,所述命名空间用于存储所述第一部署单元管理的所述目标载体的容器文件;将所述标识信息记录在所述第一部署单元对应的资源实例模板,其中,所述资源实例模板用于创建所述目标资源实例。
43.确定出第一部署单元后,需要获取该第一部署单元的标识信息,标识信息至少包括该第一部署单元的名称和命名空间,该命名空间用于存储该第一部署单元管理的目标载体的容器文件;将该标识信息记录在该第一部署单元对应的资源实例模板中,该资源实例模板用于创建目标资源实例。通过上述方案,可以根据第一部署单元的标识信息为第一部署单元构建一个crd实例模板(相当于上述资源实例模板),进而可以根据crd实例模板创建出crd实例。
44.可选的,上述步骤s202:为第一部署单元创建目标资源实例,可以通过以下方案来实现,具体包括以下步骤:响应于获取到的配置指令,配置所述存储卷的配置信息,其中,所述配置信息至少包括:所述存储卷的类别;将所述配置信息记录在所述资源实例模板中,得到所述目标资源实例。
45.在确定需要为该第一部署单元创建目标资源实例以完成对该第一部署单元管理的目标载体进行存储卷挂载的情况下,向用户发出提示,以提示用户为该第一部署单元所要挂载的存储卷进行配置;响应于获取到的配置指令配置该存储卷的配置信息,并将该配置信息记录在该资源实例模板中,以得到该目标资源实例,该配置信息至少包括存储卷的类别。通过上述方案,可以根据用户的需求为第一部署单元配置需要挂载的存储卷的类别等信息。
46.需要说明的是,存储卷大体可分为临时卷、本地卷和网络卷,临时卷和本地卷都位于node本地,一旦pod被调度至其他node,此种类型的存储卷将无法访问到,因此临时卷和本地卷通常用于数据缓存,持久化的数据则需要放置于持久卷之上。
47.持久卷:可以为网络存储系统,如nfs,ceph,glusterfs等,或者为云端存储,如gcepersistentdisk、awselasticblockstore。
48.为了更好地理解上述方案,本技术提供了一种可选的资源实例的创建方法,图3是本技术实施例的一种可选的crd实例的创建方法的流程图,如图3所示,具体包括以下步骤:步骤3.1:operator每隔一段时间调用api server接口获取kubernetes集群内所有的业务pod的pod列表;步骤3.2:遍历pod列表,从中选取一个目标pod,然后跳转至步骤3.3;步骤3.3:判断pod状态是否为running状态(相当于上述运行状态);若是则执行步骤3.4,若否则返回执行步骤3.2,以进入下一个判断周期;步骤3.4:根据pod name(相当于上述第一部署单元的名称)和namespace(相当于上述第一部署单元的命名空间)、目标pod的详细信息、父类资源等信息构造crd实例模板(相当于上述资源实例模板);步骤3.5:根据该crd实例判断该crd是否在集群中存在,如果存在则结束该次迭代,返回执行步骤3.2,如果不存在则执行步骤3.6;步骤3.6:根据crd实例模板,调用api server接口创建crd实例。
49.通过上述步骤,为每一个运行中的pod创建crd实例,从而在用户需要对目标pod管理的容器进行volume挂载的时候,只需要对目标pod对应的crd实例进行更新操作即可自动完成volume的动态挂载。
50.可选的,在为第一部署单元创建目标资源实例之后,所述方法还包括:查找与所述目标资源实例中记录的所述标识信息对应的所述第一部署单元;在查找不到所述第一部署单元的情况下,将所述目标资源实例确定为待删除的资源实例。
51.可以理解的是,pod对象代表了在kubernetes集群节点上运行的进程,它可能曾用于处理生产数据或向用户提供服务等,于是,当pod本身不再具有存在的价值时,它是会被删除的,即pod具有生命周期。而当pod被删除后,与之对应的伴生crd实例(相当于上述目标资源实例)也就没有作用了,因此需要定期查询集群中的crd实例列表,通过查找与crd实例中记录的标识信息对应的第一部署单元,以判断crd实例是否有对应的pod;若不存在与之对应的pod则将该crd实例确定为待删除的资源实例。
52.基于上述步骤,在将所述目标资源实例确定为待删除的资源实例之后,所述方法还包括:在预设时长内均查找不到所述第一部署单元的情况下,删除所述待删除的资源实例。
53.由于pod可能存在重启的情况,因此在确定待删除的资源实例之后,会开启一个时间窗,在时间窗对应的预设时长内若还是找不到与该待删除的资源实例对应的第一部署单元,则确定该pod不是重启,而是已经被删除,则执行删除逻辑,删除该待删除的资源实例。
54.针对上述资源实例的删除过程,本技术提供了一种crd实例的删除方法,如图4所示,图4是本技术实施例的一种可选的crd实例的删除方法,具体包括以下步骤:步骤4.1:operator会每隔一段时间调用api server接口来获取集群内所有的crd实例;步骤4.2:遍历该crd实例列表,从中选取一个目标实例,然后执行步骤4.3;步骤4.3:判断crd实例是否有对应的pod,如果存在对应的pod,则返回执行步骤
4.2,以判断下一个crd实例,若不存在对应的pod,则开启时间窗;步骤4.4:若在等待一定时间后,仍未找到对应的pod,则调用customvolume删除该crd实例;步骤4.5:删除与该crd实例对应的kubernetes job。
55.通过上述步骤,能够在pod被删除后,及时地删除与pod对应的crd实例,从而达到了节省资源的效果。
56.可选的,执行完上述步骤s202:为第一部署单元创建目标资源实例之后,所述方法还包括:根据所述第一部署单元的创建时间和所述目标资源实例的创建时间,确定所述第一部署单元是否发生漂移事件,其中,所述漂移事件用于指示所述第一部署单元自动重启;在确定出所述第一部署单元发生漂移事件的情况下,发送提示信息,其中,所述提示信息用于提示为所述第一部署单元管理的所述目标载体重新挂载所述存储卷。
57.operator具有容错能力,对于已经进行过volume动态调整的pod,如果这些pod因为某些原因导致漂移重启,operator会进行判断识别,并在确定pod发生漂移事件后,提示用户处理该pod;可选的,可以在确定pod发生漂移事件后,crd实例直接重新启动一个kubernetes job去处理这个新的pod;本技术对此不作限制。
58.其中,所述根据所述第一部署单元的创建时间和所述目标资源实例的创建时间,确定所述第一部署单元是否发生漂移事件,包括:在所述第一部署单元的创建时间晚于所述目标资源实例的创建时间的情况下,确定所述第一部署单元发生所述漂移事件。
59.可以理解的是,正常的pod的创建时间必然是早于它的伴生crd实例的创建时间的,而若pod发生了漂移事件而重启,那么重启后的pod的创建时间则会晚于它的伴生crd实例;因此,可以根据创建时间来确定pod是否发生漂移事件。
60.针对上述方案,本技术提供了一种pod发生漂移的处理方法,如图5所示,图5是本技术实施例的一种可选的漂移事件的处理方法,具体包括以下步骤:步骤5.1:operator调用api server接口获取customervolume(相当于上述第一部署单元) crd实例列表;步骤5.2:通过crd实例信息中的pod name和namespace确定目标pod;步骤5.3:判断目标pod是否存在,如果不存在,则跳转至步骤5.4,如果目标pod存在,则跳转至步骤5.5;步骤5.4:判断等待机制是否超时,如果超时,则结束;如果没超时,则跳转至步骤5.5;步骤5.5:休眠10秒钟,等待新的pod的创建时间差,并跳转至步骤5.2;步骤5.6:判断目标pod的创建时间是否晚于crd实例的创建时间,如果是,则跳转至步骤5.7,如果不是,则结束;步骤5.7:创建kubernetes job,执行volume动态调整逻辑。
61.通过上述步骤,实现了对发生漂移事件的pod的容错,判断识别出发生了漂移事件而重启的pod,并重新创建一个kubernetes job去处理这个新的目标pod。
62.可选的,执行上述步骤s202:为第一部署单元创建目标资源实例之后,所述方法还包括:查询所述目标资源实例中的目标字段是否为空,其中,所述目标字段用于指示所述目
标资源实例的状态;在查询到所述目标字段为空的情况下,将所述目标资源实例中的所述目标字段设置为所述第一状态。
63.目标资源实例中的目标字段用于指示该目标资源实例的状态,而目标资源实例的状态指示与该目标资源实例对应的目标任务的执行状态;若查询到该目标字段为空,则说明该目标资源实例为刚创建,还未创建过目标任务;此时将该目标字段设置为第一状态,以让该目标资源实例创建目标任务。
64.基于上述查询步骤,在查询所述目标资源实例中的目标字段是否为空之后,所述方法还包括:在查询到所述目标字段不为空、且所述目标字段所指示的状态不为第二状态的情况下,根据所述目标资源实例中记录的所述标识信息查询所述目标任务的执行状态,其中,所述第二状态为成功态或失败态;在所述执行状态指示所述目标任务执行完毕的情况下,将所述目标资源实例中的所述目标字段设置为用于指示所述第二状态。
65.若查询到目标字段不为空,且该目标字段所指示的状态不为第二状态的情况下,则进一步根据目标资源实例中记录的标识信息查询与该目标资源实例对应的目标任务的执行状态;若执行状态指示该目标任务执行完毕,则将目标字段设置为第二状态,第二状态为成功态或失败态。
66.对于上述监听目标资源实例状态的过程,本技术还提供了一种crd实例状态的更新方法,如图6所示,图6是本技术实施例的一种可选的crd实例状态的更新方法,具体包括以下步骤:步骤6.1:operator定时获取集群中customvolume crd实例;步骤6.2:判断crd实例中status字段(相当于上述目标字段)是否为空,如果为空,表示该crd实例刚被初始化,还没有执行相关volume动态操作,则跳转至步骤6.6;如果不为空,则跳转至步骤6.3;步骤6.3:判断状态是否为succeeded(成功)状态(相当于上述成功态),如果是,则将customvolume crd实例状态标记为succeeded,本次operator对customvolume crd实例的状态维护结束;如果不是,则跳转至步骤6.4;步骤6.4:判断状态是否为failed(失败)状态(相当于上述失败态),如果是,则将customvolume crd实例状态标记为failed,本次operator对customvolume crd实例状态维护结束;如果不是,则跳转至步骤6.5;步骤6.5:根据customvolume crd实例名称查询相应的kubernetes job,并执行步骤6.8;步骤6.6:设置customervolume crd实例状态为prepare(准备)(相当于上述第一状态);步骤6.7:根据customervolume crd实例中的信息创建kubernetes job去执行具体的volume动态调整逻辑;步骤6.8:判断kubernetes job是否还在执行,若还在执行,则跳转至步骤6.1;如果已经执行完毕,则跳转至步骤6.9;步骤6.9:判断kubernetes job是否执行成功,如果成功,则将customvolume crd实例状态标记为succeeded;如果失败,则将customvolume crd实例状态标记为failed。
67.通过上述步骤,通过operator实现了对crd实例的更新和监听,从而在crd实例处
于准备态时创建kubernetes job以执行具体的volume动态调整逻辑,实现了可以对pod管理的容器进行存储卷的自动化动态调整的技术效果。
68.可选的,上述执行步骤s206:执行所述目标任务,可以通过以下方案来实现,具体包括:在所述配置信息用于指示所述存储卷的类别为本地存储卷的情况下,获取所述存储卷的第一路径信息;在所述第一部署单元的命名空间下创建容器文件,并获取所述容器文件的第二路径信息,其中,所述容器文件用于挂载所述存储卷;在所述第二路径信息指示的所述容器文件中配置所述第一路径信息对应的挂载信息,以将所述存储卷挂载到所述目标载体中。
69.在配置信息指示存储卷类别为本地存储卷的情况下,先获取该存储卷的第一路径信息;在该第一部署单元的命名空间下创建容器文件,并获取该容器文件的第二路径信息,该容器文件用于挂载该存储卷;在该第二路径信息指示的容器文件中配置该第一路径信息对应的挂载信息,以将该存储卷挂载到该目标载体中。
70.可选的,可以基于可选实施例对本地存储卷的挂载操作进行说明:步骤1:查询要挂载的volume主机路径属于哪个设备dev;步骤2:在/proc/self/mountinfo文件中筛选信息,找到volume所在设备dev的分区号devdes;步骤3:找到目标pod管理的容器containerid,通过执行docker inspect $containerid筛选出容器主进程的pid;步骤4:执行nsenter
ꢀ‑‑
target $pid
ꢀ‑‑
mount
ꢀ‑‑
uts
ꢀ‑‑
ipc
ꢀ‑‑
net
ꢀ–
pid命令进入容器的linux namespace,$pid为步骤3中筛选出的pid;步骤5:执行mknod
ꢀ‑‑
mode 0600 b $dev $devdes创建设备文件,该文件在容器/dev目录下,$dev和$devdes信息在步骤4.1-2已获取;步骤6:执行mount $dev /tmp/path命令将设备mount(挂载)到一个临时目录下;步骤7:执行mount
ꢀ‑
t bind /tmp/path /container/path命令将主机目录挂载到容器目录。
71.需要说明的是,上述命令仅用作示例,还可以通过其他命令字符串来实现上述功能,本技术对此不作限制。
72.需要说明的是,上述本地存储卷可以理解为节点存储卷,可以包括emptydir、hostpath等类型,本技术对此不作限制。
73.可选的,上述执行步骤s206:执行所述目标任务,还可以通过以下方案来实现,具体包括:在所述配置信息用于指示所述存储卷的类别为网络存储卷的情况下,导出所述存储卷的存储空间,并获取所述存储空间的第三路径信息;获取所述目标载体的命名空间的第四路径信息;在所述第四路径信息指示的所述目标载体的命名空间下配置所述第三路径信息对应的挂载信息,以将所述存储卷挂载到所述目标载体中。
74.在存储卷为网络存储卷的情况下,需要先导出该网络存储卷的存储空间,并获取该存储空间的第三路径信息;获取该目标载体的命名空间的第四路径信息,在该第四路径信息指示的目标载体的命名空间下配置该第三路径信息对应的挂载信息,以将该存储卷挂载到该目标载体中。
75.可选的,可以基于以下实施例对上述网络存储卷的挂载过程进行说明:
步骤1:找到目标pod管理的容器containerid,通过执行docker inspect $containerid筛选出容器主进程的pid;步骤2:执行nsenter
ꢀ‑‑
target $pid
ꢀ‑‑
mount
ꢀ‑‑
uts
ꢀ‑‑
ipc
ꢀ‑‑
net
ꢀ–
pid命令进入容器的linux namespace,$pid为步骤4.2-1中筛选出的pid;步骤3:执行mount
ꢀ‑
t nfs
ꢀ‑
o rw $nfs:/nfs/path /container/path让pod的容器动态挂载nfs,$nfs表示某个nfs服务地址。
76.需要说明的是,上述命令字符串仅用作示例,在实际应用过程中,还可以通过其他命令来实现上述过程,本技术对此不作限制。
77.需要说明的是,上述网络存储卷可以包括传统的nas或san设备(如nfs、iscsi、fs)、分布式存储(如glusterfsb、rbd)、云端存储(如gcepersistentdisk、azuredisk、cinder和awselasticblockstore)以及建构在各类存储系统之上的抽象管理层(如flocker、portworxvolume和vspherevolume)等,本技术对网络存储卷的类型不作限定。
78.可选的,所述执行所述目标任务,以将所述存储卷挂载到目标载体中,包括:在目标业务处于运行状态下,执行所述目标任务,以将所述存储卷挂载到目标载体中,其中,所述目标业务运行在所述第一部署单元中,所述存储卷是允许被所述目标业务使用的存储卷。
79.现有技术中的存储卷挂载方案,是在启动pod之前就将配置文件配置并封装好的,在pod启动后,pod中的业务也处于运行状态;若要修改pod管理的容器所挂载的存储卷,则必须将pod重启;而本技术通过构建一个crd实例,将存储卷的配置信息写入到crd实例中,从而可以令pod中的目标业务处于运行状态时也可以执行目标任务,从而将存储卷挂载到目标载体中。
80.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本技术各个实施例所述的方法。
81.在本实施例中还提供了一种存储卷的挂载装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
82.图7是根据本技术实施例的存储卷的挂载装置的结构框图,如图7所示,该装置包括:第一创建模块72,用于为第一部署单元创建目标资源实例,其中,所述目标资源实例用于记录所述存储卷的配置信息和所述第一部署单元的标识信息;第二创建模块74,用于在确定所述目标资源实例的状态为第一状态的情况下,根据所述配置信息和所述标识信息创建目标任务;执行模块76,用于执行所述目标任务,以将所述存储卷挂载到目标载体中,其中,所述目标载体为所述第一部署单元管理的容器。
83.通过上述装置,通过kubernetes的operator模式,针对存储卷的动态变更的场景,为第一部署单元创建目标资源实例,该目标资源实例可以详细记录存储卷的挂载状态,且所述目标资源实例还用于记录所述存储卷的配置信息和所述第一部署单元的标识信息;operator会启动监听器,时刻监听该目标资源实例的创建,并解析目标资源实例的信息,在解析出目标资源实例的状态为第一状态,即准备状态的情况下,根据所述配置信息和所述标识信息创建目标任务;该目标任务被赋予了管理员的权限,从而可以在第一部署单元处于运行状态的情况下,进入第一部署单元管理的目标载体的命名空间中,从而通过执行所述目标任务,以将所述存储卷挂载到目标载体中;因此,可以解决相关技术中,在pod运行之后,用户无法在不重启pod的情况下修改容器挂载的存储卷,导致pod的易用性严重降低的问题,达到可以对pod管理的容器进行存储卷的自动化动态调整的技术效果。
84.可选的,上述第一创建模块72,还用于为第一部署单元创建目标资源实例之前,获取部署单元集合,并获取所述部署单元集合中的各个部署单元的状态信息,其中,所述状态信息用于指示所述各个部署单元所处的状态;在所述部署单元集合中查找所述状态信息指示的状态为运行状态的部署单元,并将查找到的所述状态信息指示的状态为运行状态的部署单元确定为所述第一部署单元。
85.在本方案中,可以通过operator来管理crd实例的生成,但对于业务pod(相当于上述部署单元),需要在其创建并运行之后随即创建一个crd实例;因此,需要先通过定期调用api server接口获取kubernetes集群内的所有的业务pod列表(相当于上述部署单元集合),遍历该业务pod列表,判断每个业务pod的状态是否为running状态(相当于上述运行状态),若是,则需要为该业务pod创建crd实例,因此将查找到的状态信息指示的状态为运行状态的部署单元确定为第一部署单元。通过上述方案,实现了为每一个处于运行状态的pod创建伴生crd实例的技术效果。
86.基于上述步骤,上述第一创建模块72,还用于将查找到的所述状态信息指示的状态为运行状态的部署单元确定为所述第一部署单元之后,获取所述第一部署单元的标识信息,其中,所述标识信息至少包括:所述第一部署单元的名称,所述第一部署单元的命名空间,所述命名空间用于存储所述第一部署单元管理的所述目标载体的容器文件;将所述标识信息记录在所述第一部署单元对应的资源实例模板,其中,所述资源实例模板用于创建所述目标资源实例。
87.确定出第一部署单元后,需要获取该第一部署单元的标识信息,标识信息至少包括该第一部署单元的名称和命名空间,该命名空间用于存储该第一部署单元管理的目标载体的容器文件;将该标识信息记录在该第一部署单元对应的资源实例模板中,该资源实例模板用于创建目标资源实例。通过上述方案,可以根据第一部署单元的标识信息为第一部署单元构建一个crd实例模板(相当于上述资源实例模板),进而可以根据crd实例模板创建出crd实例。
88.可选的,上述第一创建模块72,还用于响应于获取到的配置指令,配置所述存储卷的配置信息,其中,所述配置信息至少包括:所述存储卷的类别;将所述配置信息记录在所述资源实例模板中,得到所述目标资源实例。
89.在确定需要为该第一部署单元创建目标资源实例以完成对该第一部署单元管理的目标载体进行存储卷挂载的情况下,向用户发出提示,以提示用户为该第一部署单元所
要挂载的存储卷进行配置;响应于获取到的配置指令配置该存储卷的配置信息,并将该配置信息记录在该资源实例模板中,以得到该目标资源实例,该配置信息至少包括存储卷的类别。通过上述方案,可以根据用户的需求为第一部署单元配置需要挂载的存储卷的类别等信息。
90.可选的,上述第一创建模块72,还用于为第一部署单元创建目标资源实例之后查找与所述目标资源实例中记录的所述标识信息对应的所述第一部署单元;在查找不到所述第一部署单元的情况下,将所述目标资源实例确定为待删除的资源实例。
91.可以理解的是,pod对象代表了在kubernetes集群节点上运行的进程,它可能曾用于处理生产数据或向用户提供服务等,于是,当pod本身不再具有存在的价值时,它是会被删除的,即pod具有生命周期。而当pod被删除后,与之对应的伴生crd实例(相当于上述目标资源实例)也就没有作用了,因此需要定期查询集群中的crd实例列表,通过查找与crd实例中记录的标识信息对应的第一部署单元,以判断crd实例是否有对应的pod;若不存在与之对应的pod则将该crd实例确定为待删除的资源实例。
92.基于上述步骤,上述第一创建模块72,还用于将所述目标资源实例确定为待删除的资源实例之后,在预设时长内均查找不到所述第一部署单元的情况下,删除所述待删除的资源实例。
93.由于pod可能存在重启的情况,因此在确定待删除的资源实例之后,会开启一个时间窗,在时间窗对应的预设时长内若还是找不到与该待删除的资源实例对应的第一部署单元,则确定该pod不是重启,而是已经被删除,则执行删除逻辑,删除该待删除的资源实例。
94.可选的,上述第一创建模块72,还用于为第一部署单元创建目标资源实例之后,根据所述第一部署单元的创建时间和所述目标资源实例的创建时间,确定所述第一部署单元是否发生漂移事件,其中,所述漂移事件用于指示所述第一部署单元自动重启;在确定出所述第一部署单元发生漂移事件的情况下,发送提示信息,其中,所述提示信息用于提示为所述第一部署单元管理的所述目标载体重新挂载所述存储卷。
95.operator具有容错能力,对于已经进行过volume动态调整的pod,如果这些pod因为某些原因导致漂移重启,operator会进行判断识别,并在确定pod发生漂移事件后,提示用户处理该pod;可选的,可以在确定pod发生漂移事件后,crd实例直接重新启动一个kubernetes job去处理这个新的pod;本技术对此不作限制。
96.其中,上述第一创建模块72,还用于在所述第一部署单元的创建时间晚于所述目标资源实例的创建时间的情况下,确定所述第一部署单元发生所述漂移事件。
97.可以理解的是,正常的pod的创建时间必然是早于它的伴生crd实例的创建时间的,而若pod发生了漂移事件而重启,那么重启后的pod的创建时间则会晚于它的伴生crd实例;因此,可以根据创建时间来确定pod是否发生漂移事件。
98.可选的,上述第一创建模块72,还用于为第一部署单元创建目标资源实例之后,查询所述目标资源实例中的目标字段是否为空,其中,所述目标字段用于指示所述目标资源实例的状态;在查询到所述目标字段为空的情况下,将所述目标资源实例中的所述目标字段设置为所述第一状态。
99.目标资源实例中的目标字段用于指示该目标资源实例的状态,而目标资源实例的
状态指示与该目标资源实例对应的目标任务的执行状态;若查询到该目标字段为空,则说明该目标资源实例为刚创建,还未创建过目标任务;此时将该目标字段设置为第一状态,以让该目标资源实例创建目标任务。
100.基于上述步骤,上述第二创建模块74,还用于在查询所述目标资源实例中的目标字段是否为空之后,在查询到所述目标字段不为空、且所述目标字段所指示的状态不为第二状态的情况下,根据所述目标资源实例中记录的所述标识信息查询所述目标任务的执行状态,其中,所述第二状态为成功态或失败态;在所述执行状态指示所述目标任务执行完毕的情况下,将所述目标资源实例中的所述目标字段设置为用于指示所述第二状态。
101.若查询到目标字段不为空,且该目标字段所指示的状态不为第二状态的情况下,则进一步根据目标资源实例中记录的标识信息查询与该目标资源实例对应的目标任务的执行状态;若执行状态指示该目标任务执行完毕,则将目标字段设置为第二状态,第二状态为成功态或失败态。
102.可选的,上述执行模块76,还用于在所述配置信息用于指示所述存储卷的类别为本地存储卷的情况下,获取所述存储卷的第一路径信息;在所述第一部署单元的命名空间下创建容器文件,并获取所述容器文件的第二路径信息,其中,所述容器文件用于挂载所述存储卷;在所述第二路径信息指示的所述容器文件中配置所述第一路径信息对应的挂载信息,以将所述存储卷挂载到所述目标载体中。
103.在配置信息指示存储卷类别为本地存储卷的情况下,先获取该存储卷的第一路径信息;在该第一部署单元的命名空间下创建容器文件,并获取该容器文件的第二路径信息,该容器文件用于挂载该存储卷;在该第二路径信息指示的容器文件中配置该第一路径信息对应的挂载信息,以将该存储卷挂载到该目标载体中。
104.可选的,上述执行模块76,还用于在所述配置信息用于指示所述存储卷的类别为网络存储卷的情况下,导出所述存储卷的存储空间,并获取所述存储空间的第三路径信息;获取所述目标载体的命名空间的第四路径信息;在所述第四路径信息指示的所述目标载体的命名空间下配置所述第三路径信息对应的挂载信息,以将所述存储卷挂载到所述目标载体中。
105.在存储卷为网络存储卷的情况下,需要先导出该网络存储卷的存储空间,并获取该存储空间的第三路径信息;获取该目标载体的命名空间的第四路径信息,在该第四路径信息指示的目标载体的命名空间下配置该第三路径信息对应的挂载信息,以将该存储卷挂载到该目标载体中。
106.可选的,上述执行模块76,还用于在目标业务处于运行状态下,执行所述目标任务,以将所述存储卷挂载到目标载体中,其中,所述目标业务运行在所述第一部署单元中,所述存储卷是允许被所述目标业务使用的存储卷。
107.现有技术中的存储卷挂载方案,是在启动pod之前就将配置文件配置并封装好的,在pod启动后,pod中的业务也处于运行状态;若要修改pod管理的容器所挂载的存储卷,则必须将pod重启;而本技术通过构建一个crd实例,将存储卷的配置信息写入到crd实例中,从而可以令pod中的目标业务处于运行状态时也可以执行目标任务,从而将存储卷挂载到目标载体中。
108.需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通
过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
109.本技术的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
110.可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:s1,为第一部署单元创建目标资源实例,其中,所述目标资源实例用于记录所述存储卷的配置信息和所述第一部署单元的标识信息;s2,在确定所述目标资源实例的状态为第一状态的情况下,根据所述配置信息和所述标识信息创建目标任务;s3,执行所述目标任务,以将所述存储卷挂载到目标载体中,其中,所述目标载体为所述第一部署单元管理的容器。
111.在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:u盘、只读存储器(read-only memory,简称为rom)、随机存取存储器(random access memory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
112.本技术的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
113.可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:s1,为第一部署单元创建目标资源实例,其中,所述目标资源实例用于记录所述存储卷的配置信息和所述第一部署单元的标识信息;s2,在确定所述目标资源实例的状态为第一状态的情况下,根据所述配置信息和所述标识信息创建目标任务;s3,执行所述目标任务,以将所述存储卷挂载到目标载体中,其中,所述目标载体为所述第一部署单元管理的容器。
114.在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
115.本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
116.显然,本领域的技术人员应该明白,上述的本技术的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本技术不限制于任何特定的硬件和软件结合。
117.以上所述仅为本技术的优选实施例而已,并不用于限制本技术,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献