掌桥专利:专业的专利平台
掌桥专利
首页

一种k8s集群资源导入验证方法、系统及存储介质

文献发布时间:2023-06-19 19:32:07


一种k8s集群资源导入验证方法、系统及存储介质

技术领域

本发明涉及云计算领域,具体涉及一种k8s集群资源导入验证方法、系统及存储介质。

背景技术

云计算时代对算力的要求不言而喻,服务快速上云已经成为各个企业急需解决的问题。kubernetes的强大容器编排能力将服务容器化部署,作为服务调度平台起到举足轻重的作用。然而在业务系统上云的过程中,测试环境完成系统部署、调试,如何快速将测试环境部署联调完的系统原封不动的迁移部署到生产环境。并且保证迁移前后资源的正确性、部署的有效性成为业界普遍需要解决的问题。

在保证集群资源导入前后正确性、资源对象部署的有效性方面,业界更多的方案是如何解决备份、迁移等序列问题,缺乏集群资源迁移前后资源对象的正确性、部署的有效性检查手段,更多的是人为的方式检测。人为检测的方式不仅效率低下,而且对检测人员的专业水平和经验具有极高的要求。导致目前集群资源的导入仍然存在效率低且错误率高。为此有必要研究能够提高集群资源导入的快速验证技术。

现有技术一种轻量化快速自动部署K8s集群的方法及装置,其方法包括:确定目标K8s集群的环境配置和控制机配置;构建目标K8s集群所需的访问脚本、运行环境脚本、节点脚本和网络脚本;利用控制机和ansible在目标K8s集群上自动执行所述访问脚本、运行环境脚本、节点脚本和网络脚本。其技术方案虽然通过shell脚本化,把环境配置、机器间免密互通、必要软件安装、配置互连等过程变成流水化自动化的脚本;通过ansible统一安排编排shell脚本和k8sadmin,完成整个K8s集群轻量化快速自动部署的目标。但其技术方案不能验证k8s资源导入的正确性和有效性。

发明内容

本发明所要解决的技术问题:目前k8s集群资源导入存在错误率高的技术问题。提出了一种k8s集群资源导入验证方法、系统及存储介质,能够有效验证资源导入后的正确性,提高导入后资源的可用性。

为解决上述技术问题,本发明采用如下技术方案:一种k8s集群资源导入验证方法,包括以下步骤:

读取待导入资源,根据所述待导入资源来源k8s集群版本及目标k8s集群版本替换差异KV值;

将所述待导入资源的对象进行排序;

调用目标k8s集群的APIServer,按照排序依次导入对象;

配置资源信息的检查策略,按照配置的资源信息的检查策略依次检查导入后的对象是否与待导入资源相符,若相符,则检查下一个对象,若不相符,则将对象纳入不一致表,在检查完成后,展示不一致表。

作为优选,替换差异KV值的方法包括:

建立差异表,所述差异表记录多个k8s集群版本之间的差异Key以及差异Key的取值映射关系;

根据所述待导入资源来源k8s集群版本及目标k8s集群版本,找到差异Key;

根据所述差异Key的取值映射关系及待导入资源中所述差异Key的取值,获得目标k8s集群版本所述差异Key的取值,完成替换差异KV值。

作为优选,建立差异表的方法包括:

将多个k8s集群版本进行两两分组,遍历每个分组,执行以下步骤:

将分组中的一个k8s集群版本作为来源版本,另一个作为目标版本;

遍历所述来源版本的每个Key及所述Key的允许取值范围,获取所述Key在所述目标版本中的允许取值范围;

若所述Key在所述来源版本及所述目标版本中的允许取值范围不同,则将所述Key纳入差异表;

罗列差异表中的所述Key在所述来源版本及所述目标版本中的全部允许取值,建立所述来源版本及所述目标版本中的全部允许取值之间的映射关系;

将所述映射关系关联所述Key,完成差异表的建立。

作为优选,找到所述差异Key后,读取待导入资源中所述差异Key的取值,读取所述差异Key在目标k8s集群版本中的允许取值范围,若读取待导入资源中所述差异Key的取值在所述差异Key在目标k8s集群版本中的允许取值范围内,则跳过所述差异Key的取值替换。

作为优选,将所述待导入资源的对象进行排序的方法包括:

遍历所述待导入资源的对象,找到每个对象的全部依赖对象;

生成所述待导入资源的全部对象的排序,使每个对象的依赖对象均排序在前。

作为优选,找到每个对象的全部依赖对象的方法包括:

建立依赖关系表,所述依赖关系表记录对象的全部依赖对象;

遍历所述待导入资源的对象,查找所述依赖关系表,获得每个对象的全部依赖对象。

作为优选,建立依赖关系表的方法包括:

遍历每个对象;

找到所述对象创建时所依赖的对象,纳入依赖关系表;

找到执行所述对象的每个方法时所依赖的对象,纳入依赖关系表。

作为优选,按照排序依次导入对象的方法包括:

读取排序中当前次序的对象,获得所述对象的类型及包含的KV值;

调用目标k8s集群的APIServer的创建相同类型的对象,记为初始对象;

将所述对象的KV值赋予所述初始对象,即完成对象的导入。

作为优选,所述资源信息的检查策略包括递归检查策略和层级检查策略,配置资源信息的检查策略即指定使用递归检查策略或层级检查策略检查导入后的对象是否与待导入资源相符。

作为优选,所述递归检查策略包括以下步骤:

找到导入后的每个对象的父对象,若对象不存在父对象,则将所述对象纳入第一层级;

选择第一层级的一个对象,检查所述对象是否与待导入资源相符后,依次检查所述对象的每个子对象是否与待导入资源相符,而后再检查第一层级的下一个对象,直至遍历第一层级的全部对象。

作为优选,所述层级检查策略包括以下步骤:

找到导入后的每个对象的父对象,若对象不存在父对象,则将所述对象纳入第一层级,若对象存在父对象,则将所述对象纳入第二层级;

遍历第一层级的每个对象,检查第一层级的所述对象是否与待导入资源相符,而后遍历第二层级,检查第二层级的所述对象是否与待导入资源相符。

一种k8s集群资源导入验证系统,用于执行如前述的一种k8s集群资源导入验证方法,包括导出模块、替换模块、导入模块和检查模块,

所述导出模块从已有k8s集群导出全部对象,全部对象打包作为待导入资源,

所述替换模块根据所述待导入资源来源k8s集群版本及目标k8s集群版本替换差异KV值,

所述导入模块将所述待导入资源的对象进行排序,而后调用目标k8s集群的APIServer,按照排序依次导入对象,

所述检查模块配置资源信息的检查策略,按照配置的资源信息的检查策略依次检查导入后的对象是否与待导入资源相符,若相符,则检查下一个对象,若不相符,则将对象纳入不一致表,在检查完成后,展示不一致表。

作为优选,所述替换模块替换差异KV值时,执行以下步骤:

建立差异表,所述差异表记录多个k8s集群版本之间的差异Key以及差异Key的取值映射关系;

根据所述待导入资源来源k8s集群版本及目标k8s集群版本,找到差异Key;

根据所述差异Key的取值映射关系及待导入资源中所述差异Key的取值,获得目标k8s集群版本所述差异Key的取值,完成替换差异KV值。

作为优选,所述导入模块将所述待导入资源的对象进行排序时,执行以下步骤:

遍历所述待导入资源的对象,找到每个对象的全部依赖对象;

生成所述待导入资源的全部对象的排序,使每个对象的依赖对象均排序在前。

作为优选,所述导入模块找到每个对象的全部依赖对象时,执行以下步骤:

建立依赖关系表,所述依赖关系表记录对象的全部依赖对象;

遍历所述待导入资源的对象,查找所述依赖关系表,获得每个对象的全部依赖对象。

作为优选,所述导入模块按照排序依次导入对象时,执行以下步骤:

读取排序中当前次序的对象,获得所述对象的类型及包含的KV值;

调用目标k8s集群的APIServer的创建相同类型的对象,记为初始对象;

将所述对象的KV值赋予所述初始对象,即完成对象的导入。

一种计算机系统,所述计算机系统包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如前述的一种k8s集群资源导入验证方法。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如前述的一种k8s集群资源导入验证方法。

本发明的有益技术效果包括:通过版本对比替换差异KV值,确保KV值与目标k8s集群版本相符,通过对象排序,确保对象的依赖对象先导入,从而有效保证了对象的有效性;通过逐个对比检查,能够发现导入后不一致的资源,便于后续修复,从而有效保障了k8s集群资源导入的正确性;通过配置递归检查策略和层级检查策略,检查导入后的对象是否与待导入资源相符,确保导入后的资源与导入前相符。

本发明的其他特点和优点将会在下面的具体实施方式、附图中详细的揭露。

附图说明

下面结合附图对本发明做进一步的说明:

图1为本发明实施例导入验证方法流程示意图。

图2为本发明实施例替换差异KV值方法流程示意图。

图3为本发明实施例建立差异表方法流程示意图。

图4为本发明实施例建立依赖关系表方法流程示意图。

图5为本发明实施例依次导入对象方法流程示意图。

图6为本发明实施例导入验证系统示意图。

其中:10、导出模块,20、替换模块,30、导入模块,40、检查模块。

具体实施方式

下面结合本发明实施例的附图对本发明实施例的技术方案进行解释和说明,但下述实施例仅为本发明的优选实施例,并非全部。基于实施方式中的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得其他实施例,都属于本发明的保护范围。

在下文描述中,出现诸如术语“内”、“外”、“上”、“下”、“左”、“右”等指示方位或者位置关系仅是为了方便描述实施例和简化描述,而不是指示或暗示所指的装置或者元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。

介绍本实施例技术方案前,对本实施例应用背景做介绍。

k8s全称是kubernetes,k8s是提供容器服务的可移植容器的编排管理工具。当前k8s已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地,具有重要的影响力。在容器技术之前,云计算服务开发,则主要使用虚拟机。虚拟机技术比如vmware和openstack。通过使用虚拟机技术,可以在操作系统中模拟出多台子电脑,子电脑之间是相互隔离的。但是虚拟机对于开发和运维人员而言,存在启动慢,占用空间大,不易迁移的缺点。

在容器化技术诞生后,云计算项目则不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境即可。微服务容器具有启动速度快,且除了运行其中应用以外,基本不消耗额外的系统资源。比如Docker是应用最为广泛的容器技术。通过打包镜像,启动容器来创建一个服务。但是随着云服务上运行的应用越来越复杂,容器的数量也越来越多,由此衍生了管理运维容器的重大问题,而且随着云计算的发展,云端最大的挑战是,容器在云端中,会有硬件资源上不断转移的情况。

k8s技术即有效解决了云端上部署大量容器时的管理运维问题,k8s技术实现了以下功能,包括:服务发现与调度、负载均衡、服务自愈、服务弹性扩容、横向扩容以及存储卷挂载。k8s技术能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行,因此得到了广泛的应用。然而在业务系统上云的过程中,测试环境完成系统部署、调试,如何快速将测试环境部署联调完的系统原封不动的迁移部署到生产环境,并且保证迁移前后资源的正确性、部署的有效性成为业界普遍需要解决的问题。

目前业内对k8s资源迁移后的正确性和有效性缺乏有效的自动化检查手段,因此需要人工进行核查。人工核查效率低,且出错率高。为此,本实施例提供了一种k8s集群资源导入验证方法,请参阅附图1,包括以下步骤:

步骤A01)读取待导入资源,根据待导入资源来源k8s集群版本及目标k8s集群版本替换差异KV值;

步骤A02)将待导入资源的对象进行排序;

步骤A03)调用目标k8s集群的APIServer,按照排序依次导入对象;

步骤A04)配置资源信息的检查策略,按照配置的资源信息的检查策略依次检查导入后的对象是否与待导入资源相符,若相符,则检查下一个对象,若不相符,则将对象纳入不一致表,在检查完成后,展示不一致表。

通过在待导入资源来源k8s集群版本及目标k8s集群版本替换差异KV值,保证相关KV值的正确有效。比如apiVersion,低版本的k8s集群使用的apiVersion与高版本的k8s使用apiVersion是存在差别的,若不进行替换,则会导致集群资源无法正确识别apiVersion版本,导致资源出错失效。将待导入资源的对象进行排序,而不是随机的进行导入,能够对资源的正确运行提供可靠的保障。完成导入后,对每个对象进行逐个的检查,若出现不一致的情况,则加入不一致表,方便后续处理。从而保证资源导入后,能够有效的识别全部的不一致情况,有效的保证集群资源的正确运行。

请参阅附图2,替换差异KV值的方法包括:

步骤B01)建立差异表,差异表记录多个k8s集群版本之间的差异Key以及差异Key的取值映射关系;

步骤B02)根据待导入资源来源k8s集群版本及目标k8s集群版本,找到差异Key;

步骤B03)根据差异Key的取值映射关系及待导入资源中差异Key的取值,获得目标k8s集群版本差异Key的取值,完成替换差异KV值。

通过建立差异表,记录不同k8s集群版本之间KV值之间的差异情况,根据实际的待导入资源来源k8s集群版本及目标k8s集群版本实现准确的KV值替换。由于不同版本的k8s集群的KV值之间的差异是公开的且有限的,因此通过差异表能够记录全部KV值的差异,确保资源对象的正确。

另一方面,本实施例提供了建立差异表的具体方法,请参阅附图3,包括:

将多个k8s集群版本进行两两分组,遍历每个分组,执行以下步骤:

步骤C01)将分组中的一个k8s集群版本作为来源版本,另一个作为目标版本;

步骤C02)遍历来源版本的每个Key及Key的允许取值范围,获取Key在目标版本中的允许取值范围;

步骤C03)若Key在来源版本及目标版本中的允许取值范围不同,则将Key纳入差异表;

步骤C04)罗列差异表中的Key在来源版本及目标版本中的全部允许取值,建立来源版本及目标版本中的全部允许取值之间的映射关系;

步骤C05)将映射关系关联Key,完成差异表的建立。

将多个k8s集群版本进行两两分组,遍历每个分组,找到每个分组中的两个k8s集群版本中的KV值的差异。找到差异Key后,读取待导入资源中差异Key的取值,读取差异Key在目标k8s集群版本中的允许取值范围,若读取待导入资源中差异Key的取值在差异Key在目标k8s集群版本中的允许取值范围内,则跳过差异Key的取值替换。

另一方面,本实施例中将待导入资源的对象进行排序的方法包括:遍历待导入资源的对象,找到每个对象的全部依赖对象;生成待导入资源的全部对象的排序,使每个对象的依赖对象均排序在前。

另一方面,本实施例中找到每个对象的全部依赖对象的方法包括:建立依赖关系表,依赖关系表记录对象的全部依赖对象;遍历待导入资源的对象,查找依赖关系表,获得每个对象的全部依赖对象。

通过找到每个资源对象的依赖对象,将依赖对象先行导入目标k8s集群,从而能够保证每个对象在导入后,均能够正确的运行,保障对象的有效性。

另一方面,本实施例提供了具体的建立依赖关系表的方法,请参阅附图4,包括:

步骤D01)遍历每个对象;

步骤D02)找到对象创建时所依赖的对象,纳入依赖关系表;

步骤D03)找到执行对象的每个方法时所依赖的对象,纳入依赖关系表。

将对象创建时需要依赖的对象,以及执行时需要依赖的对象,均纳入依赖关系表,即可以保证对象能够正确被创建,也能够正确的执行其包含的方法。从而确保对象能够正确有效的运行。通过找出相互间有依赖的资源,得到不同类别资源对象的部署先后顺序。比如高可用应用间流量转发是通过svc的标签选择器,选择将流量具体转发到哪个服务pod处理流量,则svc是pod的依赖对象;又如创建statefulset有状态工作负载需要先创建StorageClass、PersistentVolumeClaim及PersistentVolume。则StorageClass、PersistentVolumeClaim及PersistentVolume是statefulset的执行其方法时的依赖对象。

另一方面,本实施例提供了具体的按照排序依次导入对象的方法,请参阅附图5,包括:

步骤E01)读取排序中当前次序的对象,获得对象的类型及包含的KV值;

步骤E02)调用目标k8s集群的APIServer的创建相同类型的对象,记为初始对象;

步骤E03)将对象的KV值赋予初始对象,即完成对象的导入。

通过依次调用目标k8s集群的APIServer,逐个创建相应的对象,并根据待导入资源配置创建的对象,即可完成资源对象的导入。

本实施例中,资源信息的检查策略包括递归检查策略和层级检查策略,配置资源信息的检查策略即指定使用递归检查策略或层级检查策略检查导入后的对象是否与待导入资源相符。

具体而言,本实施例提供的递归检查策略包括以下步骤:找到导入后的每个对象的父对象,若对象不存在父对象,则将对象纳入第一层级;选择第一层级的一个对象,检查对象是否与待导入资源相符后,依次检查对象的每个子对象是否与待导入资源相符,而后再检查第一层级的下一个对象,直至遍历第一层级的全部对象。

具体而言,本实施例提供的层级检查策略包括以下步骤:找到导入后的每个对象的父对象,若对象不存在父对象,则将对象纳入第一层级,若对象存在父对象,则将对象纳入第二层级;遍历第一层级的每个对象,检查第一层级的对象是否与待导入资源相符,而后遍历第二层级,检查第二层级的对象是否与待导入资源相符。

本实施例的有益技术效果包括:通过版本对比替换差异KV值,确保KV值与目标k8s集群版本相符,通过对象排序,确保对象的依赖对象先导入,从而有效保证了对象的有效性;通过逐个对比检查,能够发现导入后不一致的资源,便于后续修复,从而有效保障了k8s集群资源导入的正确性;通过配置递归检查策略和层级检查策略,检查导入后的对象是否与待导入资源相符,确保导入后的资源与导入前相符。

另一方面,本实施例提供了一种k8s集群资源导入验证系统,用于执行如前述的一种k8s集群资源导入验证方法,请参阅附图6,包括导出模块10、替换模块20、导入模块30和检查模块40,导出模块10从已有k8s集群导出全部对象,全部对象打包作为待导入资源,替换模块20根据待导入资源来源k8s集群版本及目标k8s集群版本替换差异KV值,导入模块30将待导入资源的对象进行排序,而后调用目标k8s集群的APIServer,按照排序依次导入对象,检查模块40配置资源信息的检查策略,按照配置的资源信息的检查策略依次检查导入后的对象是否与待导入资源相符,若相符,则检查下一个对象,若不相符,则将对象纳入不一致表,在检查完成后,展示不一致表。

替换模块20替换差异KV值时,执行以下步骤:建立差异表,差异表记录多个k8s集群版本之间的差异Key以及差异Key的取值映射关系;根据待导入资源来源k8s集群版本及目标k8s集群版本,找到差异Key;根据差异Key的取值映射关系及待导入资源中差异Key的取值,获得目标k8s集群版本差异Key的取值,完成替换差异KV值。

导入模块30将待导入资源的对象进行排序时,执行以下步骤:遍历待导入资源的对象,找到每个对象的全部依赖对象;生成待导入资源的全部对象的排序,使每个对象的依赖对象均排序在前。

导入模块30找到每个对象的全部依赖对象时,执行以下步骤:建立依赖关系表,依赖关系表记录对象的全部依赖对象;遍历待导入资源的对象,查找依赖关系表,获得每个对象的全部依赖对象。

导入模块30按照排序依次导入对象时,执行以下步骤:读取排序中当前次序的对象,获得对象的类型及包含的KV值;调用目标k8s集群的APIServer的创建相同类型的对象,记为初始对象;将对象的KV值赋予初始对象,即完成对象的导入。

另一方面,本实施例提供了本方案的验证实施方案,包括以下步骤:

(一)准备至少2台CPU为8核、内存为16G的虚拟机,分别部署两个kubernetes集群,集群版本号可以相同也可以不同,以不同为例:分别部署1.17.3和1.23.3版本的kubernetes集群。部署完成后在两个集群中部署安装ccse-checkup 插件,包中具有Deployment/ccse-res-handing-api,DaemonSet/checkup-controller及相关CRD,作为待导出导入的资源对象。

(二)在1.17.3版本集群中执行如下命令调用导出资源对象接口:

curl -X GET -H "Content-Type=application/json" -is http://127.0.0.1:8200/api/v2/resource/output&tenantName=sysmgr&userName=root&clusterId=1 接口会把集群资源对象下载。下载后获得待导入的资源。

(三)在1.23.3版本集群中调用资源优化处理接口:

curl -X POST -H "Content-Type=application/json" -d '{"name":"output_resource","clusterId":"1"}' http://127.0.0.1:8200/api/v2/resource/handing/1/input根据集群版本号对资源对象进行优化处理。优化处理包括KV值替换和对象排序。

(四)在1.23.3集群中调用批量创建优化处理后的资源接口:

curl -X PUT http://127.0.0.1:8200/api/v2/resource/create/1/batch --data-binary @output_resource批量创建优化处理后的资源对象。

(五)在1.23.3集群中调用资源部署效果核查接口:

curl -X POST -H "Content-Type=application/json" -d '{"name":"res-checkup","startResourceImport":"output_resource","targetResourceImport":"target_resource","clusterId":"1","resourceCheckupRule":[{"namespaces":"","kinds":"","ruleActions":[{"method":"","nocheckKey":""}]}]}' http://127.0.0.1:8200/api/v2/resource/checkup根据资源类型一一检查优化后资源部署效果。

另一方面,本实施例提供了一种计算机系统,计算机系统包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,计算机程序被处理器执行时实现如前述的一种k8s集群资源导入验证方法。

计算机系统可以是一个通用计算机系统或一个专用计算机系统。在具体实现中,计算机系统可以是包括有多个服务器的服务器集群,如可以是包括有多个节点的区块链系统。本领域技术人员可以理解,仅仅是计算机系统的举例,并不构成对计算机系统的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,比如还可以包括输入输出设备、网络接入设备等。

处理器可以是中央处理单元(Central Processing Unit,CPU),处理器还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者也可以是任何常规的处理器。

存储器在一些实施例中可以是计算机系统的内部存储单元,比如计算机系统的硬盘或内存。存储器在另一些实施例中也可以是计算机系统的外部存储设备,比如计算机系统上配备的插接式硬盘、智能存储卡(Smart Media Card,SMC)、安全数字(SecureDigital,SD)卡、闪存卡(Flash Card)等。进一步地,存储器还可以既包括计算机系统的内部存储单元也包括外部存储设备。存储器用于存储操作系统、应用程序、引导装载程序(Boot Loader)、数据以及其他程序等。存储器还可以用于暂时地存储已经输出或者将要输出的数据。

另一方面,本实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现如前述的一种k8s集群资源导入验证方法。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,熟悉该本领域的技术人员应该明白本发明包括但不限于附图和上面具体实施方式中描述的内容。任何不偏离本发明的功能和结构原理的修改都将包括在权利要求书的范围中。

技术分类

06120115939837