一种可视化Kubernetes集群对象的方法、系统、设备及介质与流程

未命名 07-23 阅读:88 评论:0

一种可视化kubernetes集群对象的方法、系统、设备及介质
技术领域
1.本发明涉及计算机及虚拟网络技术领域,具体地说,涉及一种可视化kubernetes集群对象的方法、系统、设备及介质。


背景技术:

2.kubernetes集群已成为在私有云、公有云和混合云环境中大规模部署容器化应用的事实标准。当前kubernetes集群主要用在大型企业部署场景下,但从长远来看,中小型企业也可以应用kubernetes集群节省大量的基础设施和维护成本。越来越多的企业、团队选择 kubernetes集群。kubernetes集群中对象众多,关系复杂。目前已有的容器安全产品几乎都是使用的mysql数据库等关系型数据库来存储kubernetes集群对象,难以体现它们之间的集群拓扑关系。


技术实现要素:

3.本发明针对上述根据mysql数据库来存储kubernetes集群对象,难以体现集群拓扑关系的问题,提出一种可视化kubernetes集群对象的方法、系统、设备及介质,使用nebulagraph数据库代替mysql数据库,并通过nebulagraph数据库中的vertex点存储kubernetes集群中的资源对象,通过nebulagraph数据库中的边存储kubernetes集群资源对象之间的关系,可视化kubernets集群的资源对象和资源对象之间的拓扑关系,保证了nebulagraph图数据库中的数据与kubernetes集群中数据一致性,避免了非关系型数据库中联表查询。
4.本发明具体实现内容如下:一种可视化kubernetes集群对象的方法,具体包括以下步骤:步骤1:在nebula graph数据库中创建kubernets集群的图空间,并定义所述kubernets集群的资源对象标签和资源对象边类型;步骤2:从所述kubernets集群中获取资源对象实例,根据所述资源对象标签的选择器属性或物主属性获取与资源对象相关的资源对象实例;步骤3:将所述资源对象与所述资源对象相关的资源对象构成资源对象边,并监听所述资源对象实例,记录所述资源对象实例的变化事件;步骤4:利用反射机制将监听的所述资源对象实例转换为具体的资源对象,并存储至增量队列中;步骤5:将从所述增量队列中获取的变化事件存储至本地缓存中,并同步至所述nebula graph数据库中;步骤6:调用web-ui程序的查询接口,可视化所述kubernets集群的资源对象和所述资源对象之间的拓扑关系。
5.为了更好地实现本发明,进一步地,步骤2中所述获取资源对象实例的具体操作为:调用list方法从所述kubernets集群的apiserver组件获取资源对象实例,并获取所述
资源对象的版本号。
6.为了更好地实现本发明,进一步地,步骤3中所述监听所述资源对象实例,记录所述资源对象实例的变化事件的具体操作为:调用watch方法监听所述资源对象的版本号变化,若监听到所述版本号变化,则从断开的所述版本号处重新尝试监听所述变化事件。
7.为了更好地实现本发明,进一步地,步骤4的具体操作为:利用反射机制将监听的所述资源对象实例转换为具体的资源对象,并将所述变化事件和所述资源对象组合,得到增量,根据所述增量建立增量队列,并存储至所述增量队列中。
8.为了更好地实现本发明,进一步地,步骤5中将从所述增量队列中获取的变化事件的所述资源对象实例存储至本地缓存中后,利用回调函数resourceeventhandler()过滤所述资源对象实例,并将所述资源对象实例存储至kubernets集群的workqueue组件中。
9.为了更好地实现本发明,进一步地,步骤2中所述资源对象实例为所述图空间中的vertex点,所述vertex点的id为所述资源对象实例的uid属性。
10.为了更好地实现本发明,进一步地,步骤3中所述变化事件包括创建资源对象事件、删除资源对象事件、更新资源对象事件。
11.基于上述提出的可视化kubernetes集群对象的方法,为了更好地实现本发明,进一步地,提出一种可视化kubernetes集群对象的系统,包括创建单元、获取单元、处理单元、可视化单元;所述创建单元,用于在nebula graph数据库中创建kubernets集群的图空间,并定义所述kubernets集群的资源对象标签和资源对象边类型;所述获取单元,用于从所述kubernets集群中获取资源对象实例,根据所述资源对象标签的选择器属性或物主属性获取与资源对象相关的资源对象实例;所述处理单元,用于将所述资源对象与所述资源对象相关的资源对象构成资源对象边,并监听所述资源对象实例,记录所述资源对象实例的变化事件;利用反射机制将监听的所述资源对象实例转换为具体的资源对象,并存储至增量队列中;将从所述增量队列中获取的变化事件存储至本地缓存中,并同步至所述nebula graph数据库中;所述可视化单元,调用web-ui程序的查询接口,可视化所述kubernets集群的资源对象和所述资源对象之间的拓扑关系。
12.基于上述提出的可视化kubernetes集群对象的方法,为了更好地实现本发明,进一步地,提出一种电子设备,包括存储器、处理器;所述存储器用于存储计算机程序;所述处理器用于执行所述计算机程序时,实现上述的可视化kubernetes集群对象的方法。
13.基于上述提出的可视化kubernetes集群对象的方法,为了更好地实现本发明,进一步地,提出一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机指令;当所述计算机指令在上述的处理器上执行时,实现上述的可视化kubernetes集群对象的方法。
14.本发明具有以下有益效果:本发明使用nebulagraph数据库代替mysql数据库,并通过nebulagraph数据库中的vertex点存储kubernetes集群中的资源对象,通过nebulagraph数据库中的边存储kubernetes集群资源对象之间的关系,可视化kubernets集群的资源对象和资源对象之间的拓扑关系,保证了nebulagraph图数据库中的数据与kubernetes集群中数据一致性,避免
了非关系型数据库中联表查询,降低了当前kubernetes集群拓扑功能开发的难度。
附图说明
15.图1为本技术实施例提供的可视化kubernetes集群对象的系统的结构示意框图。
16.图2为本技术实施例提供的处理单元的流程示意框图。
具体实施方式
17.为了更清楚地说明本发明实施例的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,应当理解,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例,因此不应被看作是对保护范围的限定。基于本发明中的实施例,本领域普通技术工作人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
18.在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“设置”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;也可以是直接相连,也可以是通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
19.本技术实施例中涉及的专业术语及英文缩写对应的完整英文解释如下:nebula graph:nebulagraph:是一款开源的、分布式的、易扩展的原生图数据库,能够承载数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。
20.mysql:mysql是一个关系型数据库管理系统,由瑞典mysql ab公司开发,属于oracle旗下产品。mysql是最流行的关系型数据库管理系统之一,在web应用方面,mysql是最好的rdbms(relationaldatabase management system),关系数据库管理系统 应用软件之一。
21.kubernetes:kubernetes,简称k8s,是用8代替名字中间的8个字符“ubernete”而成的缩写,是一个开源的,用于管理云平台中多个主机上的容器化的应用,kubernetes的目标是让部署容器化的应用简单并且高效,kubernetes提供了应用部署,规划,更新,维护的一种机制。
22.neo4j:neo4j是一个高性能的nosql图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的java持久化引擎,但是它将结构化数据存储在网络从数学角度叫做图上而不是表中。neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。
23.自dotcloud公司开源docker项目后便掀起了应用服务容器化的热潮,kubernetes走入人们的视野,由google和ibm公司力推的kubernetes容器编排工具迅速成为这一领域的王者。它整合了谷歌内部容器集群管理系统borg和omega优势,汲取了谷歌大规模应用容器技术十几年经验。kubernetes 已成为在私有云、公有云和混合云环境中大规模部署容器化应用的事实标准。当前kubernetes主要用在大型企业部署场景下,但从长远来看,中小型企业也可以应用kubernetes节省大量的基础设施和维护成本。越来越多的企业、团队选择kubernetes集群。kubernetes集群中对象众多,关系复杂。目前已有的容器安全产品几乎都
是使用的mysql等关系型数据库来存储kubernetes集群对象。难以体现它们之间的集群拓扑关系。
24.实施例1:本实施例提出一种可视化kubernetes集群对象的方法,具体包括以下步骤:步骤1:在nebula graph数据库中创建kubernets集群的图空间,并定义所述kubernets集群的资源对象标签和资源对象边类型。
25.步骤2:从所述kubernets集群中获取资源对象实例,根据所述资源对象标签的选择器属性或物主属性获取与资源对象相关的资源对象实例。
26.步骤2中所述获取资源对象实例的具体操作为:调用list方法从所述kubernets集群的apiserver组件获取资源对象实例,并获取所述资源对象的版本号。
27.步骤2中所述资源对象实例为所述图空间中的vertex点,所述vertex点的id为所述资源对象实例的uid属性。
28.步骤3:将所述资源对象与所述资源对象相关的资源对象构成资源对象边,并监听所述资源对象实例,记录所述资源对象实例的变化事件。
29.步骤3中所述监听所述资源对象实例,记录所述资源对象实例的变化事件的具体操作为:调用watch方法监听所述资源对象的版本号变化,若监听到所述版本号变化,则从断开的所述版本号处重新尝试监听所述变化事件。
30.步骤3中所述变化事件包括创建资源对象事件、删除资源对象事件、更新资源对象事件。
31.步骤4:利用反射机制将监听的所述资源对象实例转换为具体的资源对象,并存储至增量队列中。
32.步骤4的具体操作为:利用反射机制将监听的所述资源对象实例转换为具体的资源对象,并将所述变化事件和所述资源对象组合,得到增量,根据所述增量建立增量队列,并存储至所述增量队列中。
33.步骤5:将从所述增量队列中获取的变化事件存储至本地缓存中,并同步至所述nebula graph数据库中。
34.步骤5中将从所述增量队列中获取的变化事件的所述资源对象实例存储至本地缓存中后,利用回调函数resourceeventhandler()过滤所述资源对象实例,并将所述资源对象实例存储至kubernets集群的workqueue组件中。
35.步骤6:调用web-ui程序的查询接口,可视化所述kubernets集群的资源对象和所述资源对象之间的拓扑关系。
36.工作原理:本实施例使用nebulagraph数据库代替mysql数据库,并通过nebulagraph数据库中的vertex点存储kubernetes集群中的资源对象,通过nebulagraph数据库中的边存储kubernetes集群资源对象之间的关系,可视化kubernets集群的资源对象和资源对象之间的拓扑关系,保证了nebulagraph图数据库中的数据与kubernetes集群中数据一致性,避免了非关系型数据库中联表查询,降低了当前kubernetes集群拓扑功能开发的难度。
37.实施例2:本实施例在上述实施例1的基础上,如图1所示,提出一种可视化kubernetes集群
对象的系统,包括创建单元、获取单元、处理单元、可视化单元。
38.所述创建单元,用于在nebula graph数据库中创建kubernets集群的图空间,并定义所述kubernets集群的资源对象标签和资源对象边类型;所述获取单元,用于从所述kubernets集群中获取资源对象实例,根据所述资源对象标签的选择器属性或物主属性获取与资源对象相关的资源对象实例;所述处理单元,用于将所述资源对象与所述资源对象相关的资源对象构成资源对象边,并监听所述资源对象实例,记录所述资源对象实例的变化事件;利用反射机制将监听的所述资源对象实例转换为具体的资源对象,并存储至增量队列中;将从所述增量队列中获取的变化事件存储至本地缓存中,并同步至所述nebula graph数据库中;所述可视化单元,调用web-ui程序的查询接口,可视化所述kubernets集群的资源对象和所述资源对象之间的拓扑关系。
39.其中处理单元,首先使用list/watch方法监控指定类型的资源对象,从kubernetes的apiserver组件中list该资源的所有实例。获取最新的资源实例的版本号resourceversion,当实例发生变化,版本号随之更新再使用watch方法监听resourceversion之后的所有变化,若过程中出现异常,reflector则会从断开的resourceversion处重新尝试监听所有变化,一旦该对象的实例有创建、删除、更新动作,reflector都会收到“事件通知”,并利用反射机制将监听的结果实例化成具体的对象。这时,该事件及它对应的实例对象的组合称为增量delta,之后会被存进增量队列deltafifo中。
40.增量队列deltafifo将reflector监控变化的对象形成一个fifo队列,delta增量表示的是变化的资源对象存储。
41.localstore本地缓存不断地从增量队列deltafifo中读取增量,每出现一个对象,判断这个增量的事件类型,然后创建或更新本地缓存,也就是localstore本地缓存。例如,如果事件类型是添加对象added,那么informer会把这个增量中的对象保存到本地缓存中,并为它创建索引;若为删除操作,则在本地缓存中删除该对象。此外,localstore本地缓存还利用索引提供快速查找的能力,当使用者需要查询get或list kubernetes集群对象时,可以直接请求localstore本地缓存,以此减轻kubernetesapiserver的压力。
42.增量队列deltafifo在同步完本地缓存localstore后,会pop这个事件到控制器controller中,控制器controller会调用事先注册的resourceeventhandler回调函数,如onadd、onupdate、ondelete进行处理,这些回调函数只做一些简单的过滤工作,最后将变更对象放入workqueue中,供worker工作节点中的业务逻辑处理。
43.kubernetes集群中的各类客户端clients,目前官方提供维护的客户端库有golang、python、java、c等常见语言。当worker工作节点中业务逻辑要操作kubernetes集群中的资源时,可以通过调用客户端中的接口实现。
44.工作原理:首先在nebula graph数据库中建立一个名为k8s的图空间space,创建kubernets集群中各种类型资源的标签tag并定义对象的边类型egde type。
45.然后从kubernetes集群获取所有资源对象的实例,比如pod、service等,一个资源对象实例对应nebula graph数据库k8s图空间中的一个vertex点,资源对象实例的uid属性作为点的id,点的id在一个图空间中是唯一的。使用资源对象的标签选择器labelselector
或者owenrreferences物主属性获取与它有关联的对象实例。比如service服务于pod,pod与控制器controller。与之关联的资源对象实例之间建立一条egde边。并且reflector组件件会监听每个资源对象的实例的变化比如onadd添加、ondelete删除、onupdate更新事件。利用反射机制将监听的结果实例化成具体的对象。这时,该事件及它对应的实例对象的组合称为增量delta,之后会被存进deltafifo增量队列中。并将这些事件创建localstorae本地缓存。deltafifo增量队列同步完localstore本地缓存后会将这些事件简单处理后pop到workqueue中给worker工作节点处理,并将这些变化同步到nebula graph数据库中。
46.最后web-ui程序提供查询接口展示kubernetes 集群的资源对象及其之间的拓扑关系。
47.本实施例使用图数据库nebulagraph中的vertex点存储kubernetes集群中的对象,使用edge边存储kubernetes集群中对象之间的关系。在容器安全产品中可以利用这点非常快速简单展示kubernetes 集群中对象的拓扑关系,避免了非关系型数据库中联表查询。
48.本实施例中的图数据库nebulagraph可由其他图数据库替换,比如neo4j。
49.本实施例的其他部分与上述实施例1相同,故不再赘述。
50.以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。

技术特征:
1.一种可视化kubernetes集群对象的方法,其特征在于,具体包括以下步骤:步骤1:在nebula graph数据库中创建kubernets集群的图空间,并定义所述kubernets集群的资源对象标签和资源对象边类型;步骤2:从所述kubernets集群中获取资源对象实例,根据所述资源对象标签的选择器属性或物主属性获取与资源对象相关的资源对象实例;步骤3:将所述资源对象与所述资源对象相关的资源对象构成资源对象边,并监听所述资源对象实例,记录所述资源对象实例的变化事件;步骤4:利用反射机制将监听的所述资源对象实例转换为具体的资源对象,并存储至增量队列中;步骤5:将从所述增量队列中获取的变化事件存储至本地缓存中,并同步至所述nebula graph数据库中;步骤6:调用web-ui程序的查询接口,可视化所述kubernets集群的资源对象和所述资源对象之间的拓扑关系。2.根据权利要求1所述的一种可视化kubernetes集群对象的方法,其特征在于,步骤2中所述获取资源对象实例的具体操作为:调用list方法从所述kubernets集群的apiserver组件获取资源对象实例,并获取所述资源对象的版本号。3.根据权利要求2所述的一种可视化kubernetes集群对象的方法,其特征在于,步骤3中所述监听所述资源对象实例,记录所述资源对象实例的变化事件的具体操作为:调用watch方法监听所述资源对象的版本号变化,若监听到所述版本号变化,则从断开的所述版本号处重新尝试监听所述变化事件。4.根据权利要求3所述的一种可视化kubernetes集群对象的方法,其特征在于,步骤4的具体操作为:利用反射机制将监听的所述资源对象实例转换为具体的资源对象,并将所述变化事件和所述资源对象组合,得到增量,根据所述增量建立增量队列,并存储至所述增量队列中。5.根据权利要求4所述的一种可视化kubernetes集群对象的方法,其特征在于,步骤5中将从所述增量队列中获取的变化事件的所述资源对象实例存储至本地缓存中后,利用回调函数resourceeventhandler()过滤所述资源对象实例,并将所述资源对象实例存储至kubernets集群的workqueue组件中。6.根据权利要求1所述的一种可视化kubernetes集群对象的方法,其特征在于,步骤2中所述资源对象实例为所述图空间中的vertex点,所述vertex点的id为所述资源对象实例的uid属性。7.根据权利要求1所述的一种可视化kubernetes集群对象的方法,其特征在于,步骤3中所述变化事件包括创建资源对象事件、删除资源对象事件、更新资源对象事件。8.一种可视化kubernetes集群对象的系统,其特征在于,包括创建单元、获取单元、处理单元、可视化单元;所述创建单元,用于在nebula graph数据库中创建kubernets集群的图空间,并定义所述kubernets集群的资源对象标签和资源对象边类型;所述获取单元,用于从所述kubernets集群中获取资源对象实例,根据所述资源对象标签的选择器属性或物主属性获取与资源对象相关的资源对象实例;
所述处理单元,用于将所述资源对象与所述资源对象相关的资源对象构成资源对象边,并监听所述资源对象实例,记录所述资源对象实例的变化事件;利用反射机制将监听的所述资源对象实例转换为具体的资源对象,并存储至增量队列中;将从所述增量队列中获取的变化事件存储至本地缓存中,并同步至所述nebula graph数据库中;所述可视化单元,调用web-ui程序的查询接口,可视化所述kubernets集群的资源对象和所述资源对象之间的拓扑关系。9.一种电子设备,其特征在于,包括存储器、处理器;所述存储器用于存储计算机程序;所述处理器用于执行所述计算机程序时,实现如权利要求1-7任一项所述的可视化kubernetes集群对象的方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机指令;当所述计算机指令在如权利要求9所述的处理器上执行时,实现如权利要求1-7任一项所述的可视化kubernetes集群对象的方法。

技术总结
本发明涉及计算机及虚拟网络技术领域,具体地说,涉及一种可视化Kubernetes集群对象的方法、系统、设备及介质;该方法使用NebulaGraph数据库代替MySQL数据库,并通过NebulaGraph数据库中的vertex点存储Kubernetes集群中的资源对象,通过NebulaGraph数据库中的边存储Kubernetes集群资源对象之间的关系,可视化Kubernets集群的资源对象和资源对象之间的拓扑关系,保证了NebulaGraph图数据库中的数据与Kubernetes集群中数据一致性,避免了非关系型数据库中联表查询。查询。查询。


技术研发人员:符东平 陈曦 兰星 吴飞
受保护的技术使用者:成都安恒信息技术有限公司
技术研发日:2023.04.11
技术公布日:2023/7/22
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文