云环境下的存储故障模拟方法、装置、设备及存储介质与流程

文档序号:33464195发布日期:2023-03-15 05:59阅读:20来源:国知局
云环境下的存储故障模拟方法、装置、设备及存储介质与流程

1.本技术涉及云计算技术领域,具体涉及一种云环境下的存储故障模拟方法、装置、设备及存储介质。


背景技术:

2.在云环境下,可以通过进行存储故障模拟的方式,来测试云环境的稳定性和可靠性。
3.相关技术中,存储故障模拟使用的是传统的物理环境实验,直接在底层进行存储故障模拟。比如:针对容量超分这一种类型的存储故障,关注于磁盘或目录级别的存储故障模拟,也即,执行存储故障模拟的实验目标为磁盘或目录,通过对磁盘进行缩容或者添加数据的方式,使得磁盘可用的剩余容量小于需要进行分配的容量,以模拟容量超分。
4.基于上述技术方案进行存储故障模拟,影响范围大,存储故障模拟的可控性不高。


技术实现要素:

5.本技术提供了一种云环境下的存储故障模拟方法、装置、设备及存储介质。该技术方案如下。
6.一方面,提供了一种云环境下的存储故障模拟方法,所述方法应用于kubernetes集群,所述方法包括:
7.生成存储故障实验的资源实体;
8.对所述资源实体进行解析,得到所述存储故障实验的创建请求,所述创建请求中携带故障类型,所述故障类型包括如下中的至少一种:容量超分,目标存储模式故障;
9.响应于所述创建请求,获取所述故障类型对应的故障实验目标;
10.在所述存储故障实验的持续期间,对所述故障实验目标的状态进行监听;
11.将目标事件添加到所述资源实体的事件属性中,所述目标事件是监听到的影响所述故障实验目标的状态的事件,所述事件属性表示所述存储故障实验的模拟结果。
12.又一方面,提供了一种云环境下的存储故障模拟装置,所述装置应用于kubernetes集群,所述装置包括:
13.资源实体生成模块,用于生成存储故障实验的资源实体;
14.资源实体解析模块,用于对所述资源实体进行解析,得到所述存储故障实验的创建请求,所述创建请求中携带故障类型,所述故障类型包括如下中的至少一种:容量超分,目标存储模式故障;
15.实验目标获取模块,用于响应于所述创建请求,获取所述故障类型对应的故障实验目标;
16.实验目标监听模块,用于在所述存储故障实验的持续期间,对所述故障实验目标的状态进行监听;
17.事件添加模块,用于将目标事件添加到所述资源实体的事件属性中,所述目标事
件是监听到的影响所述故障实验目标的状态的事件,所述事件属性表示所述存储故障实验的模拟结果。
18.在一种可能的实现方式中,所述实验目标获取模块,用于:
19.在所述故障类型为容量超分的情况下,响应于所述创建请求,在所述资源实体对应的节点创建pod,并确定持久化卷声明(persistent volume claim,pvc),所述pvc中所声明的pv大小大于所述节点的pv池的剩余空间;
20.将所述pod与所述pvc进行绑定,并将所述pod作为所述故障实验目标。
21.在一种可能的实现方式中,所述创建请求中还携带所述资源实体中的存储类(storageclass)、容器存储接口驱动(csi driver);
22.所述实验目标获取模块,用于:
23.基于所述创建请求中的所述storageclass、所述csi driver,查询所述资源实体所对应的卷组vg;
24.基于所述vg的总空间大小、所述vg下的所有lv的已分配空间大小,计算得出所述节点的pv池的剩余空间;
25.在所述节点创建所述pod,并确定pvc中声明的pv大小大于所述节点的pv池的剩余空间。
26.在一种可能的实现方式中,所述创建请求中还携带所述资源实体中的csi driver;
27.所述实验目标获取模块,用于:
28.在所述故障类型为目标存储模式故障的情况下,响应于所述创建请求,查询所述csi driver中用于为所述目标存储模式提供支持的目标功能组件;
29.将所述目标功能组件作为所述故障实验目标,并为所述目标功能组件设置不可用的节点选择器,删除所述目标功能组件已调度的pod。
30.在一种可能的实现方式中,所述装置还包括实验目标恢复模块;
31.所述实验目标恢复模块,用于在所述存储故障实验停止后,将所述故障实验目标恢复为原状。
32.在一种可能的实现方式中,所述实验目标恢复模块,用于:
33.在所述故障类型为容量超分,所述故障实验目标为创建的pod的情况下,对创建的pod进行删除,以及将所述pod与pvc解绑,并回收pv;
34.在所述故障类型为目标存储模式故障,所述故障实验目标为csi driver中用于为所述目标存储模式提供支持的目标功能组件的情况下,移除为所述目标功能组件设置的不可用的节点选择器,并为所述目标功能组件设置初始的节点选择器。
35.在一种可能的实现方式中,所述资源实体生成模块,用于:
36.接收输入的容器存储接口故障实验(container storage interface-chaos,csi-chaos)数据;
37.对所述csi-chaos数据进行合法性验证,在验证通过的情况下,将所述csi-chaos数据写入所述kubernetes集群中,写入所述kubernetes集群中的所述csi-chaos数据为所述资源实体。
38.在一种可能的实现方式中,所述资源实体生成模块,用于:
39.在所述故障类型为容量超分的情况下,验证所述csi-chaos数据中的storageclass是否在容器集群中,和/或,验证所述csi-chaos数据中的csidriver是否在集群节点中运行;
40.在所述故障类型为目标存储模式故障的情况下,验证所述csi-chaos数据中的csi driver是否在集群节点中运行,和/或,验证所述csi-chaos数据中的csi driver是否运行在所述目标存储模式。
41.再一方面,提供了一种计算机设备,所述计算机设备中包含处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现上述云环境下的存储故障模拟方法。
42.再一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现上述的云环境下的存储故障模拟方法。
43.再一方面,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述的云环境下的存储故障模拟方法。
44.本技术提供的技术方案可以包括以下有益效果:
45.针对云环境下的存储故障模拟,将存储故障模拟的整个流程资源化,对资源实体进行解析,得到存储故障实验的创建请求,创建请求中携带故障类型,响应于创建请求,获取故障类型对应的故障实验目标,进而通过对此故障实验目标的状态的监听,将监听到的目标事件添加到资源实体的事件属性上,使得后续可以通过对事件属性的查询,获知存储故障模拟的结果。因此,通过资源实体来进行存储故障实验的状态保存和流程管理,无需进行传统的物理环境实验,从而保障存储故障实验的可控性。
附图说明
46.为了更清楚地说明本技术具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
47.图1是根据一示例性实施例示出的逻辑卷管理工具(logical volume manager,lvm)机制的示意图。
48.图2是根据一示例性实施例示出的云环境下的存储故障模拟方法的方法流程图。
49.图3是根据一示例性实施例示出的云环境下的存储故障模拟方法的方法流程图。
50.图4是根据一示例性实施例示出的一种云环境下的存储故障模拟流程的示意图。
51.图5是根据一示例性实施例示出的云环境下的存储故障模拟方法的方法流程图。
52.图6是根据一示例性实施例示出的一种云环境下的存储故障模拟流程的示意图。
53.图7是根据一示例性实施例示出的云环境下的存储故障模拟方法的方法流程图。
54.图8是根据一示例性实施例示出的一种云环境下的存储故障模拟流程的示意图。
55.图9是根据一示例性实施例示出的一种云环境下的存储故障模拟装置的结构方框
图。
56.图10是根据一示例性实施例提供的一种计算机设备的示意图。
具体实施方式
57.下面将结合附图对本技术的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
58.应理解,在本技术的实施例中提到的“指示”可以是直接指示,也可以是间接指示,还可以是表示具有关联关系。举例说明,a指示b,可以表示a直接指示b,例如b可以通过a获取;也可以表示a间接指示b,例如a指示c,b可以通过c获取;还可以表示a和b之间具有关联关系。
59.在本技术实施例的描述中,术语“对应”可表示两者之间具有直接对应或间接对应的关系,也可以表示两者之间具有关联关系,也可以是指示与被指示、配置与被配置等关系。
60.本技术实施例中,“预定义”可以通过在设备(例如,包括终端设备和网络设备)中预先保存相应的代码、表格或其他可用于指示相关信息的方式来实现,本技术对于其具体的实现方式不做限定。
61.首先,对本技术涉及到的一些技术知识进行简单介绍。
62.lvm是对磁盘分区进行管理的一种机制,具体表现为建立在硬盘和分区之上、文件系统之下的一个逻辑层,其可以提高磁盘分区管理的灵活性。
63.结合参考图1,lvm涉及如下概念:
64.·
持久化卷(persistentvolume,pv)
65.pv在逻辑卷管理中处于最底层。
66.·
卷组(volume group,vg)
67.vg建立在pv之上,一个卷组中至少要包括一个pv,在卷组建立之后可动态添加pv到vg中。
68.·
逻辑卷(logical volume,lv)
69.lv建立在vg之上,vg中的未分配空间可以用于建立新的lv,lv建立后可以动态地扩展和缩小空间。
70.应理解,用户使用的是在pv、vg基础上创建的lv,也即,为用户提供存储服务的是lv。
71.在传统的存储故障模拟方案中,使用的是传统的物理环境实验,直接在底层进行存储故障模拟,影响范围大,存储故障模拟的可控性不高。
72.基于如上问题,在本技术实施例中,将存储故障模拟的整个流程资源化,通过容器集群环境下的资源实体来进行状态保存和流程管理,取代了传统的物理环境实验,以保障存储故障模拟的可控性。下面,结合如下实施例,对本技术提供的技术方案进行说明。
73.图2是根据一示例性实施例示出的云环境下的存储故障模拟方法的方法流程图。该方法由计算机设备执行,该方法应用于kubernetes集群。如图2所示,该云环境下的存储故障模拟方法可以包括如下步骤:
74.步骤201,生成存储故障实验的资源实体。
75.其中,存储故障实验是用于模拟存储故障的实验。
76.在本技术实施例中,通过资源实体对存储故障实验进行定义,因此,在执行存储故障实验之前,先生成存储故障实验的资源实体。
77.步骤202,对资源实体进行解析,得到存储故障实验的创建请求,创建请求中携带故障类型,故障类型包括如下中的至少一种:容量超分,目标存储模式故障。
78.在本技术实施例中,在生成资源实体之后,对资源实体解析,在解析得到的信息中提取关键数据,基于这些关键数据发起存储故障实验的创建请求。
79.示例性的,关键数据可以包括:实验的故障类型信息;实验的停止条件;实验的故障测试目标storageclass名称;实验的csi driver。
80.在本技术实施例中,存储故障实验对应的故障类型可以是如下两种类型中的至少一种:
81.(1)容量超分,即存储空间不足。
82.(2)目标存储模式故障,即目标存储模式这一种类型的存储模式出现故障。
83.示例性的,目标存储模式为ussvd模式,ussvd是一种基于software defined storage概念设计的存储模式。
84.步骤203,响应于创建请求,获取故障类型对应的故障实验目标。
85.在本技术实施例中,故障实验目标可以理解为是存储故障实验所需要直接操作的集群内的资源,且不同故障类型的存储故障实验对应有不同的故障实验目标。
86.步骤204,在存储故障实验的持续期间,对故障实验目标的状态进行监听。
87.在本技术实施例中,直到存储故障实验停止为止,对故障实验目标的状态进行监听。如果发生影响故障实验目标的状态的目标事件,则通过对故障实验目标的状态的监听,获取到目标事件。
88.步骤205,将目标事件添加到资源实体的事件属性中,目标事件是监听到的影响故障实验目标的状态的事件,事件属性表示存储故障实验的模拟结果。
89.在本技术实施例中,在监听到影响故障实验目标的状态的目标事件后,将目标事件添加到资源实体的事件属性中,使得通过对资源实体的事件属性的查询,即可获知存储故障实验的模拟结果。
90.综上所述,本实施例提供的云环境下的存储故障模拟方法,针对云环境下的存储故障模拟,将存储故障模拟的整个流程资源化,对资源实体进行解析,得到存储故障实验的创建请求,创建请求中携带故障类型,响应于创建请求,获取故障类型对应的故障实验目标,进而通过对此故障实验目标的状态的监听,将监听到的目标事件添加到资源实体的事件属性上,使得后续可以通过对事件属性的查询,获知存储故障模拟的结果。因此,通过资源实体来进行存储故障实验的状态保存和流程管理,无需进行传统的物理环境实验,从而保障存储故障实验的可控性。
91.在示意性实施例中,容量超分类型的存储故障实验对应的故障实验目标是创建的pod资源。
92.也即,在故障类型为容量超分的情况下,步骤203可以替换实现为:
93.响应于创建请求,在资源实体对应的节点创建pod,并确定pvc,pvc中所声明的pv
大小大于节点的pv池的剩余空间;将pod与pvc进行绑定,并将pod作为故障实验目标。
94.在本技术实施例中,在生成资源实体之后,在该资源实体所在的节点创建一个pod,将pod与pvc进行绑定,由于pvc中所声明的pv大小大于节点的pv池的剩余空间,因此,pod无法成功申请到存储空间,pvc将一直处于挂起(pending)状态。通过上述方式,来模拟容量超分这一存储故障情况。
95.其中,pod是kubernetes集群中的一个单元。在本技术实施例中,将创建的pod作为存储故障实验的故障实验目标,即,将pod作为存储故障实验的实验操作对象。
96.其中,pv池(pv pool)指的是同一个vg下的所有的pv,其可以理解为vg的总空间;pv池的剩余空间指的是pv池中,除了用于lv建立的pv之外所剩余的pv。
97.在一种可能的实现方式中,创建请求中携带资源实体中的storageclass、csi driver;则基于创建请求中的storageclass、csi driver,查询资源实体所对应的vg;基于vg的总空间大小、vg下的所有lv的已分配空间大小,计算得出节点的pv池的剩余空间;在节点创建pod,并确定pvc中声明的pv大小大于节点的pv池的剩余空间。
98.也即,通过storageclass、csi driver进行查询并计算得到节点的pv池的剩余空间,进而在节点创建pod,并确定pvc的声明内容。
99.其中,通过storageclass、csi driver可以查询到kubernetes集群中唯一的vg,通过lvm工具可以调取该vg的总空间大小、该vg下的所有lv的已分配空间大小,进而通过如下公式进行pv池的剩余空间的计算:pv池的剩余空间=vg的总空间-vg下的所有lv的已分配空间。
100.可以理解的是,针对容量超分类型的存储故障模拟,在创建完pod带有的pv之后,对这些pv并不执行后续的创建lv的步骤,由于为用户提供存储服务的是lv,因此,这些pv的创建,并不会影响用户正常使用存储服务。使得能够在不影响现有用户应用数据的前提下,尽可能快速便捷地模拟和恢复这一存储故障过程。
101.在示意性实施例中,目标存储模式故障类型的存储故障实验对应的故障实验目标是为目标存储模式提供支持的目标功能组件。
102.也即,在故障类型为目标存储模式故障的情况下,步骤203可以替换实现为:
103.响应于创建请求,查询csi driver中用于为目标存储模式提供支持的目标功能组件;将目标功能组件作为故障实验目标,并为目标功能组件设置不可用的节点选择器,删除目标功能组件已调度的pod。
104.在本技术实施例中,在生成资源实体之后,通过对为目标存储模式提供支持的目标功能组件的节点选择器进行修改,来模拟目标存储模式故障这一存储故障情况。
105.示例性的,目标存储模式为ussvd模式,目标功能组件为csi-qemu。
106.其中,由于目标功能组件的节点选择器为不可用,也即,该节点选择器在集群内不匹配任何节点,因此,csi-drvier的目标功能组件将无法创建任何pod以继续提供目标存储模式的相关功能,从而使得目标存储模式故障。
107.可以理解的是,针对目标存储模式类型的存储故障模拟,通过将csi-driver自身目标功能组件设置不可用节点选择器的方式,使得其对于目标存储模式的功能支持被暂停。
108.在示意性实施例中,资源实体是基于用户输入的csi-chaos数据而生成的,并且,
通过对资源实体进行解析,以发起存储故障实验的创建请求,从而基于创建请求的触发来获取故障实验目标。
109.图3是根据一示例性实施例示出的云环境下的存储故障模拟方法的方法流程图。该方法由计算机设备执行。如图3所示,该云环境下的存储故障模拟方法可以包括如下步骤:
110.步骤301,接收输入的csi-chaos数据。
111.步骤302,对csi-chaos数据进行合法性验证,在验证通过的情况下,将csi-chaos数据写入kubernetes集群中,写入kubernetes集群中的csi-chaos数据为资源实体。
112.其中,合法性验证是对csi-chaos数据的格式是否符合写入kubernetes集群,所进行的一种验证。
113.可选的,对csi-chaos数据进行合法性验证,包括:在故障类型为容量超分的情况下,验证csi-chaos数据中的storageclass是否在容器集群中,和/或,验证csi-chaos数据中的csi driver是否在集群节点中运行。
114.可选的,对csi-chaos数据进行合法性验证,包括:在故障类型为目标存储模式故障的情况下,验证csi-chaos数据中的csi driver是否在集群节点中运行,和/或,验证csi-chaos数据中的csi driver是否运行在目标存储模式。
115.其中,通过上述合法性验证,保障写入kubernetes集群的csi-chaos数据可以后续在kubernetes集群中被成功执行。
116.步骤303,对资源实体进行解析,得到存储故障实验的创建请求,创建请求中携带故障类型,故障类型包括如下中的至少一种:容量超分,目标存储模式故障。
117.本步骤的具体实现方式可以参见上文实施例,在此不再赘述。
118.步骤304,响应于创建请求,获取故障类型对应的故障实验目标。
119.本步骤的具体实现方式可以参见上文实施例,在此不再赘述。
120.步骤305,在存储故障实验的持续期间,对故障实验目标的状态进行监听。
121.本步骤的具体实现方式可以参见上文实施例,在此不再赘述。
122.步骤306,将目标事件添加到资源实体的事件属性中,目标事件是监听到的影响故障实验目标的状态的事件,事件属性表示存储故障实验的模拟结果。
123.本步骤的具体实现方式可以参见上文实施例,在此不再赘述。
124.步骤307,在存储故障实验停止后,将故障实验目标恢复为原状。
125.其中,存储故障实验基于预设的停止条件而停止。示例性的,停止条件包括:实验达到设定的持续时间;接收到用户输入的停止指令。
126.可选的,在故障类型为容量超分,故障实验目标为创建的pod的情况下,将故障实验目标恢复为原状,包括:对创建的pod进行删除,以及将pod与pvc解绑,并回收pv。
127.应理解,即使创建的pod被删除、pv被回收,由于已将监听到的事件添加到资源实体的事件属性中,因此,不影响基于资源实体的事件属性,对存储故障实验的模拟结果进行查询。
128.可选的,在故障类型为目标存储模式故障,故障实验目标为csi driver中用于为目标存储模式提供支持的目标功能组件的情况下,将故障实验目标恢复为原状,包括:移除为目标功能组件设置的不可用的节点选择器,并为目标功能组件设置初始的节点选择器。
129.应理解,移除为目标功能组件设置的不可用节点选择器并设置为原本的节点选择器值,使得集群能够重新为其分配节点并创建pod。
130.综上所述,本实施例提供的云环境下的存储故障模拟方法,接收用户输入的csi-chaos数据,将csi-chaos数据写入kubernetes集群,从而生成存储故障实验的资源实体,以使得用户可以对存储故障实验进行自定义。
131.同时,对csi-chaos数据进行合法性验证,在验证通过的情况下,将csi-chaos数据写入kubernetes集群,保障写入kubernetes集群的csi-chaos数据可以后续在kubernetes集群中被成功执行。
132.同时,在存储故障实验停止后,根据故障类型将对应的故障实验目标恢复为原状,从而快捷方便地进行故障还原。
133.在示意性实施例中,通过不同的功能组件,实现上述云环境下的存储故障模拟方法。
134.结合参考图4、图5、图6和图7,其示出了如下功能组件:
135.chaosdashboard:为实验控制面板,负责提供图形用户接口(graphical user interface,gui)管理界面。
136.api-server:为应用程序接口服务器,负责提供资源查询管理能力。
137.csi-controller-manager:为容器存储接口控制器,负责存储故障实验的调度和实验数据的记录查询。
138.csi-daemon:为存储故障实验的执行守护容器,负责存储故障实验的实际执行工作。
139.csi-qemu:csi driver用于为ussvd这一目标存储模式提供支持的功能组件。
140.基于如上功能组件,针对容量超分,云环境下的存储故障模拟方法可以包括:
141.(1)用户使用chaosdashboard(图5中标记为dashboard),通过api-server将csi-chaos数据输入到kubernetes集群环境中。
142.其中,输入的csi-chaos数据一般为格式化的kubernetes自定义资源(custom resource definitions,crd)。
143.此过程可以结合参考图5中的步骤501。
144.(2)api-server验证csi-chaos数据,如果验证通过就将csi-chaos数据写入kubernetes集群环境,否则直接返回错误。
145.其中,验证内容主要包括:csi-chaos数据中的storageclass是否存在容器集群中;csi-chaos数据中的csidriver是否在集群节点中运行。
146.(3)csi-controller-manager(图5中标记为controller-manager)监听到csi-chaos数据创建后,发起存储故障实验的创建请求,将该请求交由csi-chaos daemon(图5中标记为daemon)处理。
147.其中,csi-controller-manager可以通过grpc协议连接至集群节点上的csi-daemon,以将该请求交由csi-daemon处理。
148.此过程可以结合参考图5中的步骤502以及步骤503。
149.(4)csi-daemon通过查询,计算得到本节点可用的pv池的剩余空间大小。
150.其中,csi-daemon根据csi-chaos数据中的具体storageclass和csidriver信息,
通过api-server查询到storageclass与csi driver所对应的vg名称,并通过lvm工具调取该vg的总空间大小以及该vg下所有lv的已分配空间大小,从而计算得到本节点可用的pv池的剩余空间大小,此大小可以记为remainsize。
151.此过程可以结合参考图5中的步骤504。
152.(5)csi-daemon在所在节点创建带有大于remainsize大小的pv的pod作为存储故障实验的故障实验目标(targetpod)。
153.其中,通过为pod申请分配超量空间的方式,从而使得pod带有大于remainsize大小的pv。
154.此过程可以结合参考图5中的步骤505。
155.(6)csi-controller-manager通过api-server对故障实验目标(targetpod)状态(指代由上一步所创建的pod的状态)进行持续监听,直至达到预设的实验停止条件,将期间的事件全部追加至资源实体(即上文中的csi-chaos数据)的事件属性。
156.因此,用户只需要查询资源实体的事件属性即可获知存储故障实验的模拟结果,而不需要关心此时pod的状态。即使此时实验目标已经被移除,也不影响对于存储故障实验本身的事件查询,避免了pod移除后难以追溯实验的执行情况的问题。
157.此过程可以结合参考图5中的步骤506。
158.(7)csi-controller-manager在存储故障实验达到预设的实验停止条件后,根据对应的csi-chaos数据的记录,删除创建的pv和pod,更新资源实体的状态。
159.此过程可以结合参考图5中的步骤507至步骤509。
160.基于如上功能组件,针对目标存储模式故障,云环境下的存储故障模拟方法可以包括:
161.(1)用户使用chaosdashboard(图7中标记为dashboard),通过api-server将csi-chaos数据输入到kubernetes集群环境中。
162.其中,输入的csi-chaos数据一般为格式化的kubernetes自定义资源(custom resource definitions,crd)。
163.此过程可以结合参考图7中的步骤701。
164.(2)api-server验证csi-chaos数据,如果验证通过就将csi-chaos数据写入kubernetes集群环境,否则直接返回错误。
165.其中,验证内容主要包括:当前集群环境中是否已安装并运行csidriver;当前集群环境中csidriver是否运行在ussvd模式。
166.(3)csi-controller-manager(图7中标记为controller-manager)监听到csi-chaos数据创建后,发起存储故障实验的创建请求,将该请求交由csi-chaos daemon(图7中标记为daemon)处理。
167.其中,csi-controller-manager可以通过grpc协议连接至集群节点上的csi-daemon,以将该请求交由csi-daemon处理。
168.此过程可以结合参考图7中的步骤702以及步骤703。
169.(4)csi-daemon通过api-server获取/查询当前集群环境中csi-driver的ussvd的功能组件状态及原本的节点选择器node-selector;发起请求将csi-qemu的node-selector修改为任意不可用值,并将原node-selector值记录到所属csi-chaos实验实体中,再删除
csi-qemu原本所有已调度的组件pod。
170.其中,由于node-selector被修改为集群内不匹配任何节点,csi-drvier的ussvd功能组件将无法创建任何pod以继续提供ussvd相关功能。
171.此过程可以结合参考图7中的步骤704至步骤705。
172.(5)csi-controller-manager通过api-server对故障实验目标状态(指代由上一步的csi-qemu的状态)进行持续监听,直至达到预设的实验停止条件,将期间的事件全部追加至资源实体(即上文中的csi-chaos数据)的事件属性。
173.因此,用户只需要查询资源实体的事件属性即可获知存储故障实验的模拟结果。
174.此过程可以结合参考图7中的步骤706。
175.(6)csi-controller-manager在存储故障实验达到预设的实验停止条件后,根据对应的csi-chaos数据的记录,移除为csi-qemu设置的不可用node-selector并设置为组件原本的node-selector值,使得集群能够重新为其分配节点并创建pod。
176.此过程可以结合参考图7中的步骤707至步骤710。
177.请参考图8,其是根据一示例性实施例示出的一种云环境下的存储故障模拟流程的示意图。如图8所示,该云环境下的存储故障模拟流程的整体步骤如下所示。
178.步骤801,用户输入实验数据。
179.用户通过输入的实验数据对存储故障实验进行自定义。
180.步骤802,验证实验是否合法。
181.若验证存储故障实验不合法,则跳转至步骤803;若验证存储故障实验合法,则跳转至步骤804。
182.步骤803,抛出错误。
183.步骤804,生成存储故障实验的资源实体。
184.步骤805,通过资源实体来解析实验定义,转化为实验的创建请求发起。
185.步骤807,响应于创建请求,查找故障实验目标。
186.若查找失败,则更新资源实体;若查找成功,则跳转至步骤808。
187.步骤808,向故障实验目标注入实验命令。
188.步骤808,对故障实验目标的状态进行监听。
189.此时,将监听到影响实验目标的状态的目标事件,添加到资源实体的事件属性中,以对资源实体进行更新。
190.步骤809,在达到预设的停止条件的情况下,实验结束。
191.此时,在实验结束的情况下,恢复故障实验目标为原状。
192.需要说明的是,上述方法实施例可以单独实施例,也可以组合实施,本技术对此不加以限制。
193.图9是根据一示例性实施例示出的一种云环境下的存储故障模拟装置的结构方框图。所述装置包括:
194.资源实体生成模块901,用于生成存储故障实验的资源实体;
195.资源实体解析模块902,用于对所述资源实体进行解析,得到所述存储故障实验的创建请求,所述创建请求中携带故障类型,所述故障类型包括如下中的至少一种:容量超分,目标存储模式故障;
196.实验目标获取模块903,用于响应于所述创建请求,获取所述故障类型对应的故障实验目标;
197.实验目标监听模块904,用于在所述存储故障实验的持续期间,对所述故障实验目标的状态进行监听;
198.事件添加模块905,用于将目标事件添加到所述资源实体的事件属性中,所述目标事件是监听到的影响所述故障实验目标的状态的事件,所述事件属性表示所述存储故障实验的模拟结果。
199.在一种可能的实现方式中,所述实验目标获取模块903,用于:
200.在所述故障类型为容量超分的情况下,响应于所述创建请求,在所述资源实体对应的节点创建pod,并确定持久化卷声明pvc,所述pvc中所声明的pv大小大于所述节点的pv池的剩余空间;将所述pod与所述pvc进行绑定,并将所述pod作为所述故障实验目标。
201.在一种可能的实现方式中,所述创建请求中携带所述资源实体中的存储类storageclass、容器存储接口驱动csi driver;
202.所述实验目标获取模块903,用于:
203.基于所述创建请求中的所述storageclass、所述csi driver,查询所述资源实体所对应的卷组vg;
204.基于所述vg的总空间大小、所述vg下的所有lv的已分配空间大小,计算得出所述节点的pv池的剩余空间;
205.在所述节点创建所述pod,并确定pvc中声明的pv大小大于所述节点的pv池的剩余空间。
206.在一种可能的实现方式中,所述创建请求中还携带所述资源实体中的csi driver;
207.所述实验目标获取模块903,用于:
208.在所述故障类型为目标存储模式故障的情况下,响应于所述创建请求,查询所述csi driver中为所述目标存储模式提供支持的目标功能组件;
209.为所述目标功能组件设置不可用的节点选择器,删除所述目标功能组件已调度的pod,并将所述目标功能组件作为所述故障实验目标。
210.在一种可能的实现方式中,所述装置还包括实验目标恢复模块;
211.所述实验目标恢复模块,用于在所述存储故障实验停止后,将所述故障实验目标恢复为原状。
212.在一种可能的实现方式中,所述实验目标恢复模块,用于:
213.在所述故障类型为容量超分,所述故障实验目标为创建的pod的情况下,对创建的pod进行删除,以及将所述pod与pvc解绑,并回收pv;
214.在所述故障类型为目标存储模式故障,所述故障实验目标为csi driver中为所述目标存储模式提供支持的目标功能组件的情况下,移除为所述目标功能组件设置的不可用的节点选择器,并为所述目标功能组件设置初始的节点选择器。
215.在一种可能的实现方式中,所述资源实体生成模块901,用于:
216.接收输入的容器存储接口故障实验csi-chaos数据;
217.对所述csi-chaos数据进行合法性验证,在验证通过的情况下,将所述csi-chaos
数据写入所述kubernetes集群中,写入所述kubernetes集群中的所述csi-chaos数据为所述资源实体。
218.在一种可能的实现方式中,所述资源实体生成模块901,用于:
219.在所述故障类型为容量超分的情况下,验证所述csi-chaos数据中的storageclass是否在容器集群中,和/或,验证所述csi-chaos数据中的csidriver是否在集群节点中运行;
220.在所述故障类型为目标存储模式故障的情况下,验证所述csi-chaos数据中的csi driver是否在集群节点中运行,和/或,验证所述csi-chaos数据中的csi driver是否运行在所述目标存储模式。
221.需要说明的是:上述实施例提供的云环境下的存储故障模拟装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
222.请参阅图10,其是根据本技术一示例性实施例提供的一种计算机设备的示意图,所述计算机设备包括存储器和处理器,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,实现上述的云环境下的存储故障模拟方法。
223.其中,处理器可以为中央处理器(central processing unit,cpu)。处理器还可以为其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
224.存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本技术实施方式中的方法对应的程序指令/模块。处理器通过运行存储在存储器中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施方式中的方法。
225.存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
226.在一示例性实施例中,还提供了一种计算机可读存储介质,用于存储有至少一条计算机程序,所述至少一条计算机程序由处理器加载并执行以实现上述方法中的全部或部分步骤。例如,该计算机可读存储介质可以是只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、只读光盘(compact disc read-only memory,cd-rom)、磁带、软盘和光数据存储设备等。
227.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或
者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本技术的真正范围和精神由下面的权利要求指出。
228.应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求来限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1