本技术涉及计算机,尤其涉及一种压缩云原生镜像的实现方法。
背景技术:
1、目前,越来越多的互联网企业都在转向云原生,云原生本质上是一种软件开发和部署方式,旨在利用云计算、容器化、微服务等技术来构建高可用、高可靠、可伸缩的应用程序服务。而kubernetes是当前公认的云原生服务最大的开源架构平台,越来越多的公司引入kubernetes服务集群,以提高公司内服务器资源的使用效率,降低成本,kubernetes业界缩写一般记为k8s。
2、云原生平台的构建离不开容器化。容器化就是将业务的应用程序以及所有依赖包打包在一个容器中,这个容器一般就是轻量级的linux系统,业务的应用程序和依赖包都安装在这个轻量级的系统里,然后将这个系统打成一个可以运行的包文件,这个包文件就称为云原生镜像。
3、k8s运行业务是通过运行业务的云原生镜像来启动的,业务的应用程序以及所有依赖包均存放在一个云原生镜像中。然而,对于某些业务,其依赖包可能会非常庞大,若将庞大的依赖包打包进云原生镜像中,就会导致最终得到的云原生镜像也非常庞大。
4、云原生镜像过于庞大,会导致k8s拉取云原生镜像时耗时较长,加大k8s内网带宽拥堵情况,以至于影响其他业务的部署分发。
技术实现思路
1、本技术提供了一种压缩云原生镜像的实现方法,以对云原生镜像进行压缩,避免过于庞大的云原生镜像影响k8s运行。
2、第一方面,本技术提供了一种压缩云原生镜像的实现方法,所述方法应用于ci平台,所述ci平台用于构建云原生镜像,所述方法包括:
3、根据所述第一构建代码确定所述云原生镜像的镜像名和版本号;
4、向配置中心发送第一pv地址请求,获取由所述配置中心返回的第一pv地址;其中,所述第一pv地址请求中包含有所述云原生镜像的所述镜像名和所述版本名,所述配置中心设置于所述ci平台之外;
5、根据所述第一构建代码确定所述云原生镜像的依赖包,并根据所述第一pv地址将所述依赖包安装于存储中心中所述第一pv地址对应的存储区域;其中,所述存储中心设置于所述ci平台之外;
6、将所述第一pv地址挂载于所述云原生镜像,并将挂载有所述第一pv地址的所述云原生镜像存放至云原生镜像中心;其中,所述云原生镜像中心设置于所述ci平台之外。
7、在本技术一种可行的实施例中,根据所述第一构建代码确定云原生镜像的镜像名和版本号,包括:
8、从所述第一构建代码中读取所述云原生镜像的所述镜像名;
9、计算所述第一构建代码的哈希值,将所述第一构建代码的哈希值确定为所述云原生镜像的所述版本名;
10、和/或,
11、获取所述第一构建代码的获取时间戳,将所述第一构建代码的获取时间戳确定为所述云原生镜像的所述版本名。
12、在本技术一种可行的实施例中,根据所述构建代码确定所述云原生镜像的依赖包,并根据所述第一pv地址将所述依赖包安装于存储中心中所述第一pv地址对应的存储区域,包括:
13、将所述第一构建代码中所述依赖包的安装路径修改为所述第一pv地址,生成第二构建代码;
14、根据所述第二构建代码执行依赖包安装脚本,以将所述依赖包安装于所述存储中心中所述第一pv地址对应的所述存储区域。
15、在本技术一种可行的实施例中,在根据所述第一构建代码确定云原生镜像的镜像名和版本号之前,所述方法还包括:
16、基于持续集成从代码仓库中自动拉取所述第一构建代码。
17、第二方面,本技术提供了一种压缩云原生镜像的实现方法,所述方法应用于k8s平台,所述k8s平台用于部署云原生镜像,所述方法包括:
18、响应于第一部署代码,根据所述第一部署代码确定待部署云原生镜像的镜像名和版本名;
19、向配置中心发送第二pv地址请求,获取由所述配置中心返回的第二pv地址;其中,所述第二pv地址请求中包含有所述待部署云原生镜像的所述镜像名和所述版本名,所述配置中心设置于所述k8s平台之外;
20、将所述第二pv地址挂载于所述第一部署代码,生成第二部署代码;
21、根据所述第二部署代码从云原生镜像中心中获取所述待部署云原生镜像,并在所述待部署云原生镜像运行时根据所述第二部署代码在存储中心中运行所述待部署云原生镜像的依赖包;其中,所述云原生镜像中心设置于所述k8s平台之外,所述云原生镜像中心中包括有多个云原生镜像,所述存储中心设置于所述k8s平台之外,所述存储中心中安装有多个所述依赖包。
22、在本技术一种可行的实施例中,响应于第一部署代码,根据所述第一部署代码确定待部署云原生镜像的镜像名和版本名,包括:
23、调用所述k8s平台的k8s库对所述第一部署代码进行解析,获取所述第一部署代码对应的所述待部署云原生镜像的所述镜像名和所述版本名。
24、在本技术一种可行的实施例中,根据所述第二部署代码从云原生镜像中心中获取所述待部署云原生镜像,包括:
25、调用所述k8s平台的k8s库对所述第二部署代码进行解析,获取所述第二部署代码对应的所述待部署云原生镜像的所述镜像名和所述版本名;
26、发送所述待部署云原生镜像的所述镜像名和所述版本名至所述云原生镜像中心,以从所述云原生镜像中心获取与所述镜像名和所述版本名对应的所述待部署云原生镜像。
27、在本技术一种可行的实施例中,在所述待部署云原生镜像运行时根据所述第二部署代码在存储中心中运行所述待部署云原生镜像的依赖包,包括:
28、在所述待部署云原生镜像运行时从所述第二部署代码中确定出所述第二pv地址;
29、向所述存储中心中所述第二pv地址对应的存储区域发送依赖包运行请求,以在所述存储中心中所述第二pv地址对应的所述存储区域运行所述待部署云原生镜像的所述依赖包。
30、第三方面,本技术提供了一种压缩云原生镜像的实现方法,所述方法应用于配置中心,所述配置中心与ci平台以及k8s平台交互,所述配置中心用于为所述ci平台分配第一pv地址,并为所述k8s平台分配第二pv地址,所述方法包括:
31、响应于第一pv地址请求,向所述ci平台返回第一pv地址;其中,所述第一pv地址用于指示所述ci平台在创建云原生镜像时将所述云原生镜像的依赖包安装于存储中心中所述第一pv地址对应的存储区域;
32、响应于第二pv地址请求,向所述k8s平台返回第二pv地址;其中,所述第二pv地址用于指示所述k8s平台在部署云原生镜像时从所述存储中心中所述第二pv地址对应的所述存储区域运行所述云原生镜像的所述依赖包。
33、在本技术一种可行的实施例中,响应于第一pv地址请求,向所述ci平台返回第一pv地址,包括:
34、根据所述第一pv地址请求获取镜像名和版本号;其中,所述镜像名和所述版本号用于对ci平台在创建的云原生镜像进行唯一标识;
35、根据所述镜像名和所述版本号在所述存储中心中进行查找,判断是否存在所述镜像名和所述版本号对应的所述第一pv地址;
36、在存在所述镜像名和所述版本号对应的所述第一pv地址的情况下,向所述ci平台返回所述第一pv地址;
37、在不存在所述镜像名和所述版本号对应的所述第一pv地址的情况下,将任意一个未安装所述依赖包的所述存储空间对应的pv地址作为所述第一pv地址,向所述ci平台返回所述第一pv地址。
38、第四方面,本技术提供了一种压缩云原生镜像的实现装置,所述装置应用于ci平台,所述ci平台用于构建云原生镜像,所述装置包括:
39、第一确定模块,用于根据所述第一构建代码确定所述云原生镜像的镜像名和版本号;
40、第一发送模块,用于向配置中心发送第一pv地址请求,获取由所述配置中心返回的第一pv地址;其中,所述第一pv地址请求中包含有所述云原生镜像的所述镜像名和所述版本名,所述配置中心设置于所述ci平台之外;
41、安装模块,用于根据所述第一构建代码确定所述云原生镜像的依赖包,并根据所述第一pv地址将所述依赖包安装于存储中心中所述第一pv地址对应的存储区域;其中,所述存储中心设置于所述ci平台之外;
42、存放模块,用于将所述第一pv地址挂载于所述云原生镜像,并将挂载有所述第一pv地址的所述云原生镜像存放至云原生镜像中心;其中,所述云原生镜像中心设置于所述ci平台之外。
43、第五方面,本技术提供了一种压缩云原生镜像的实现装置,所述装置应用于k8s平台,所述k8s平台用于部署云原生镜像,所述装置包括:
44、第二确定模块,用于响应于第一部署代码,根据所述第一部署代码确定待部署云原生镜像的镜像名和版本名;
45、第二发送模块,用于向配置中心发送第二pv地址请求,获取由所述配置中心返回的第二pv地址;其中,所述第二pv地址请求中包含有所述待部署云原生镜像的所述镜像名和所述版本名,所述配置中心设置于所述k8s平台之外;
46、生成模块,用于将所述第二pv地址挂载于所述第一部署代码,生成第二部署代码;
47、运行模块,用于根据所述第二部署代码从云原生镜像中心中获取所述待部署云原生镜像,并在所述待部署云原生镜像运行时根据所述第二部署代码在存储中心中运行所述待部署云原生镜像的依赖包;其中,所述云原生镜像中心设置于所述k8s平台之外,所述云原生镜像中心中包括有多个云原生镜像,所述存储中心设置于所述k8s平台之外,所述存储中心中安装有多个所述依赖包。
48、第六方面,本技术提供了一种压缩云原生镜像的实现装置,所述装置应用于配置中心,所述配置中心与ci平台以及k8s平台交互,所述配置中心用于为所述ci平台分配第一pv地址,并为所述k8s平台分配第二pv地址,所述装置包括:
49、第一响应模块,用于响应于第一pv地址请求,向所述ci平台返回第一pv地址;其中,所述第一pv地址用于指示所述ci平台在创建云原生镜像时将所述云原生镜像的依赖包安装于存储中心中所述第一pv地址对应的存储区域;
50、第二响应模块,用于响应于第二pv地址请求,向所述k8s平台返回第二pv地址;其中,所述第二pv地址用于指示所述k8s平台在部署云原生镜像时从所述存储中心中所述第二pv地址对应的所述存储区域运行所述云原生镜像的所述依赖包。
51、第七方面,本技术提供了一种电子设备,包括:至少一个通信接口;与所述至少一个通信接口相连接的至少一个总线;与所述至少一个总线相连接的至少一个处理器;与所述至少一个总线相连接的至少一个存储器,其中,所述处理器被配置为用于执行本技术上述第一方面、第二方面以及第三方面中任意一个方面所述的一种压缩云原生镜像的实现方法。
52、第八方面,本技术还提供了一种计算机存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行本技术上述第一方面、第二方面以及第三方面中任意一个方面所述的一种压缩云原生镜像的实现方法。
53、本技术实施例提供的上述技术方案与现有技术相比具有如下优点:本技术实施例提供的该方法,ci平台在构建云原生镜像时,基于云原生镜像的镜像名与版本号从配置中心获取第一pv地址,并将云原生镜像的依赖包安装于存储中心中第一pv地址对应的存储区域,将未安装依赖包的云原生镜像与第一pv地址存放于云原生镜像中心。在本技术提供的技术方案中,存储中心仅用于安装依赖包,而生成的云原生镜像并不包含依赖包。通过本技术提供的技术方案,使得生成的云原生镜像摆脱较为庞大的依赖包,对云原生镜像进行压缩,避免过于庞大的云原生镜像影响k8s运行。