基于kubernetes实现综合能源管理平台自动部署与升级方法及系统与流程

未命名 10-09 阅读:128 评论:0


1.本发明涉及软件自动部署及升级技术领域,具体地说是一种基于kubernetes实现综合能源管理平台自动部署与升级方法及系统。


背景技术:

2.随着时代的发展,节能意识的不断提高,人们对于各类设备的能耗情况更为重视,随之综合能源管理平台也越来越受到更大公司的关注。目前市面上的综合能源管理平台,主要包含监控侧、管理侧和运维侧三大功能模块。随着微服务架构的成熟,对于综合能源平台的部署目前市面上大部分采用微服务架构的方式。因为不同租户对于综合能源管理平台的功能要求是不同的,功能区别体现在两方面,一个是不同版本之间功能有区别,另外一个是对于功能模块的需求不同,如有的租户对于运维侧的功能是没有需求的。所以为了满足不同租户的需求,对于综合能源平台的部署和升级是目前的一个难题。
3.kubernetes是一个可移植容器的编排管理工具,目前kubernetes越来越受到各大公司的青睐,kubernetes推动了微服务架构等技术的普及,kubernetes通过资源清单文件部署对应的资源,对于应用的部署和管理越来越简单。
4.故如何基于kubernetes集群实现综合能源管理平台的自动部署及升级,同时避免kubernetes集群中因服务过多导致的集群节点过多是目前亟待解决的技术问题。


技术实现要素:

5.本发明的技术任务是提供一种基于kubernetes实现综合能源管理平台自动部署与升级方法及系统,来解决如何基于kubernetes集群实现综合能源管理平台的自动部署及升级,同时避免kubernetes集群中因服务过多导致的集群节点过多的问题。
6.本发明的技术任务是按以下方式实现的,一种基于kubernetes实现综合能源管理平台自动部署与升级方法,该方法是将综合能源管理平台的服务部署在kubernetes集群上,通过git仓库、docker镜像仓库、kubernetes集群完成综合能源管理平台的自动部署和自动升级;具体为:
7.在kubernetes集群上部署prometheus和helm,通过prometheus监控kubernetes集群各个节点资源的使用情况,自助选择将综合能源管理平台对应的微服务部署到对应的集群之中;helm为kubernetes软件包管理工具,通过helm进行kubernetes集群的资源部署;
8.通过git仓库获取综合能源管理平台部署所需的chart包;
9.通过docker镜像仓库获取综合能源管理平台所需的镜像。
10.作为优选,微服务部署前,管理员通过数据字典应用,录入当前可用kubernetes集群信息及产品的版本信息,在为租户部署微服务过程中,通过数据字典获取对应的信息。
11.更优地,管理员为租户部署微服务具体如下:
12.管理员创建租户账号user_x,要求租户账号唯一;
13.管理员查看各个集群的资源使用情况,选择要将租户user_x对应的服务部署在集群cluster_x上;
14.进入到租户服务创建页面,填写租户的账号user_x;情况如下:
15.①
管理员选择一键部署,则部署综合能源管理平台的版本和其对应微服务所在的kubernetes集群,都为默认的,并且默认部署监控侧、管理侧及运维侧的对应的服务;
16.②
管理员根据租户user_x购买的功能范围,选择为租户user_x部署指定的产品版本v1,选择服务部署的集群cluster_x,选择是否要进行微服务的自动升级:
17.若选择自动升级,则当有新版本发布时,自动在当天晚上12点自动进行服务的更新,选择要部署在监控侧、管理侧及运维侧的功能模块;
18.通过租户账号user_x,在租户服务展示页面,查看该租户下微服务的部署情况,并能够手动更新微服务的信息;
19.管理员是否选择为租户开启自动升级功能:
20.若是,则每天晚上十二点,在尽量不影响租户服务使用的情况下,进行服务的更新;
21.通过prometheus对集群资源的监控,当租户user_x下面的服务pod_x对cpu、内存及磁盘资源的使用即将超过指定的最大限额,则发送告警信息给租户和管理员,提醒管理员增加租户user_x下面服务的资源使用的额度;管理员按照设定步骤更新服务pod_x所能使用的资源上限。
22.更优地,进入到租户服务创建页面,填写租户的账号user_x具体如下:
23.管理员填写相关配置后,点击“创建”后,根据租户账号user_x,创建租户对应的数据库,数据库名默认为租户账号user_x;
24.根据管理员填写的服务版本v1,从git仓库中拉取对应版本v1的chart包chart_x;
25.根据管理员选择的集群cluster_x,从配置中读取集群cluster_x的信息,再通过helm部署的方式将chart_x部署在集群cluster_x中。
26.更优地,通过helm部署的方式将chart_x部署在集群cluster_x中具体如下:
27.在kubernetes的cluster_x集群上创建kubernetes的名称空间user_x,命名空间为租户的账号user_x;
28.根据管理员选择的功能模块,使用helm部署chart_x包内对应的chart包;
29.部署完成。
30.更优地,通过租户账号user_x,在租户服务展示页面,查看该租户下微服务的部署情况,并能够手动更新微服务的信息具体如下:
31.管理员查看该租户下微服务的状态;
32.管理员点击服务名称查看对应kubernetes的资源清单文件,管理员通过修改资源清单文件,更新微服务的资源上限、镜像及服务副本数;具体为:
33.①
通过修改replicas标签的值,修改服务的副本数,默认副本数为2;
34.②
修改标签resources的值,更新服务所能占有cpu和内存的上限;
35.③
通过修改image标签的值,单独为任一个微服务进行版本的更新。
36.更优地,进行服务的更新具体如下:
37.定时从docker镜像仓库中获取租户下面每个微服务当前最新的镜像版本,对开启
了自动升级的租户,对其下面的每个微服务的版本和查询出来的最新版本进行对比:
38.若不是最新的版本,则进行服务的更新。
39.一种基于kubernetes实现综合能源管理平台自动部署与升级系统,该系统用于实现上述的基于kubernetes实现综合能源管理平台自动部署与升级方法,该系统包括git仓库、docker镜像仓库、kubernetes集群以及部署在kubernetes上的prometheus和helm;
40.prometheus用于对kubernetes集群各个节点资源使用情况的监控;
41.helm为kubernetes软件包管理工具,helm用于进行kubernetes的资源部署;
42.git仓库用于获取综合能源管理平台部署所需的chart包;
43.docker镜像仓库用于获取综合能源管理平台所需的镜像,将综合能源管理平台的服务部署在kubernetes集群上。
44.一种电子设备,包括:存储器和至少一个处理器;
45.其中,所述存储器上存储有计算机程序;
46.所述至少一个处理器执行所述存储器存储的计算机程序,使得所述至少一个处理器执行如上述的基于kubernetes实现综合能源管理平台自动部署与升级方法。
47.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序可被处理器执行以实现如上述的基于kubernetes实现综合能源管理平台自动部署与升级方法。
48.本发明的基于kubernetes实现综合能源管理平台自动部署与升级方法及系统具有以下优点:
49.(一)本发明通过使用kubernetes的集群管理技术、prometheus的监控告警技术、helm的kubernetes资源部署技术,支持为租户部署指定版本的综合能源管理平台,从监控侧、管理侧、运维侧三个功能模块选择租户购买的功能模块进行部署,并提供服务的自动升级,和对某一个服务的手动升级,减少运维成本;通过在页面上提供kubernetes的资源清单文件,方面管理员管理服务的资源使用情况;
50.(二)为了方便综合能源管理平台的部署,本发明除了提供一键部署默认版本的产品,也支持部署指定版本的综合能源管理平台;同时为了解决kubernetes集群中,因服务过多导致的集群节点过多的情况,本发明提供多个集群用于选择,部署时在多个集群中选择将微服务部署在指定的集群中;为了节省运维成本,除了提供自动升级的功能,同时也提供服务的手动升级功能,对于一套微服务,可以针对其中的某一个微服务进行升级;通过prometheus提供对集群资源使用情况的监控,方面管理员了解集群资源使用情况和每个微服务的资源使用情况,从而根据情况更改微服务的资源上限;
51.(三)本发明支持部署时自主选择所需综合能源管理平台的版本和功能模块,通过prometheus监控各个kubernetes集群的资源使用情况,自主选择将综合能源管理平台对应的微服务部署到对应的集群之中;
52.(四)本发明提供综合能源管理平台中所有微服务的自动升级,并且提供单个微服务的手动升级,减少运维成本;
53.(五)本发明通过在网页上提供租户下综合能源管理平台的微服务对应的kubernetes中资源清单文件,管理员通过在网页上修改微服务对应的资源清单文件,可以更新微服务的资源上限、镜像,服务副本数等。
附图说明
54.下面结合附图对本发明进一步说明。
55.附图1为基于kubernetes实现综合能源管理平台自动部署与升级方法的流程框图;
56.附图2为自动升级的流程框图;
57.附图3为接收告警信息,更改服务资源上限的流程框图;
58.附图4为基于kubernetes实现综合能源管理平台自动部署与升级系统的架构图。
具体实施方式
59.参照说明书附图和具体实施例对本发明的基于kubernetes实现综合能源管理平台自动部署与升级方法及系统作以下详细地说明。
60.实施例1:
61.如附图4所示,本实施例提供了一种基于kubernetes实现综合能源管理平台自动部署与升级方法,该方法是将综合能源管理平台的服务部署在kubernetes集群上,通过git仓库、docker镜像仓库、kubernetes集群完成综合能源管理平台的自动部署和自动升级;具体为:
62.在kubernetes集群上部署prometheus和helm,通过prometheus监控kubernetes集群各个节点资源的使用情况,自助选择将综合能源管理平台对应的微服务部署到对应的集群之中;helm为kubernetes软件包管理工具,通过helm进行kubernetes集群的资源部署;
63.通过git仓库获取综合能源管理平台部署所需的chart包;
64.通过docker镜像仓库获取综合能源管理平台所需的镜像。
65.本实施例中,微服务部署前,管理员通过数据字典应用,录入当前可用kubernetes集群信息及产品的版本信息,在为租户部署微服务过程中,通过数据字典获取对应的信息。
66.如附图1所示,本实施例中,管理员为租户部署微服务具体如下:
67.s1、管理员创建租户账号user_x,要求租户账号唯一;
68.s2、管理员查看各个集群的资源使用情况,选择要将租户user_x对应的服务部署在集群cluster_x上;
69.s3、进入到租户服务创建页面,填写租户的账号user_x;情况如下:
70.①
管理员选择一键部署,则部署综合能源管理平台的版本和其对应微服务所在的kubernetes集群,都为默认的,并且默认部署监控侧、管理侧及运维侧的对应的服务;
71.②
管理员根据租户user_x购买的功能范围,选择为租户user_x部署指定的产品版本v1,选择服务部署的集群cluster_x,选择是否要进行微服务的自动升级:
72.若选择自动升级,则当有新版本发布时,自动在当天晚上12点自动进行服务的更新,选择要部署在监控侧、管理侧及运维侧的功能模块;
73.s4、通过租户账号user_x,在租户服务展示页面,查看该租户下微服务的部署情况,并能够手动更新微服务的信息;
74.s5、管理员是否选择为租户开启自动升级功能:
75.若是,则每天晚上十二点,在尽量不影响租户服务使用的情况下,进行服务的更新;
76.s6、通过prometheus对集群资源的监控,当租户user_x下面的服务pod_x对cpu、内存及磁盘资源的使用即将超过指定的最大限额,则发送告警信息给租户和管理员,提醒管理员增加租户user_x下面服务的资源使用的额度;管理员按照设定步骤更新服务pod_x所能使用的资源上限。
77.本实施例步骤s3中的进入到租户服务创建页面,填写租户的账号user_x具体如下:
78.s301、管理员填写相关配置后,点击“创建”后,根据租户账号user_x,创建租户对应的数据库,数据库名默认为租户账号user_x;
79.s302、根据管理员填写的服务版本v1,从git仓库中拉取对应版本v1的chart包chart_x;
80.s303、根据管理员选择的集群cluster_x,从配置中读取集群cluster_x的信息,再通过helm部署的方式将chart_x部署在集群cluster_x中。
81.本实施例步骤s303中的通过helm部署的方式将chart_x部署在集群cluster_x中具体如下:
82.s30301、在kubernetes的cluster_x集群上创建kubernetes的名称空间user_x,命名空间为租户的账号user_x;
83.s30302、根据管理员选择的功能模块,使用helm部署chart_x包内对应的chart包;
84.s30303、部署完成。
85.如附图3所示,本实施例步骤s4中的通过租户账号user_x,在租户服务展示页面,查看该租户下微服务的部署情况,并能够手动更新微服务的信息具体如下:
86.s401、管理员查看该租户下微服务的状态;
87.s402、管理员点击服务名称查看对应kubernetes的资源清单文件,管理员通过修改资源清单文件,更新微服务的资源上限、镜像及服务副本数;具体为:
88.①
通过修改replicas标签的值,修改服务的副本数,默认副本数为2;
89.②
修改标签resources的值,更新服务所能占有cpu和内存的上限;
90.③
通过修改image标签的值,单独为任一个微服务进行版本的更新。
91.如附图2所示,本实施例逐步后s5中的进行服务的更新具体如下:
92.定时从docker镜像仓库中获取租户下面每个微服务当前最新的镜像版本,对开启了自动升级的租户,对其下面的每个微服务的版本和查询出来的最新版本进行对比:
93.若不是最新的版本,则进行服务的更新。
94.实施例2:
95.如附图4所示,本实施例提供了一种基于kubernetes实现综合能源管理平台自动部署与升级系统,该系统用于实现上述的基于kubernetes实现综合能源管理平台自动部署与升级方法,该系统包括git仓库、docker镜像仓库、kubernetes集群以及部署在kubernetes上的prometheus和helm;
96.prometheus用于对kubernetes集群各个节点资源使用情况的监控;
97.helm为kubernetes软件包管理工具,helm用于进行kubernetes的资源部署;
98.git仓库用于获取综合能源管理平台部署所需的chart包;
99.docker镜像仓库用于获取综合能源管理平台所需的镜像,将综合能源管理平台的
服务部署在kubernetes集群上。
100.其中,prometheus是一个开源的系统监控和报警系统,能够对kubernetes集群中资源的使用情况进行检测,包括cpu使用率、内存使用率、磁盘使用率等,通过prometheus能直观的观察到集群重要资源的使用情况。
101.helm是kubernetes生态系统中的一个软件包管理工具,专门负责管理kubernetes的应用资源,可以通过helm对kubernetes应用进行统一打包、安装、升级、回滚等操作,helm对kubernetes的资源清单文件的管理文件,叫做chart包,通过helm相关命令,对chart包进行部署,实现对kubernetes资源的部署。
102.实施例3:
103.本实施例还提供了一种电子设备,包括:存储器和处理器;
104.其中,存储器存储计算机执行指令;
105.处理器执行所述存储器存储的计算机执行指令,使得处理器执行本发明任一实施例中的基于kubernetes实现综合能源管理平台自动部署与升级方法。
106.处理器可以是中央处理单元(cpu),还可以是其他通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通过处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
107.存储器可用于储存计算机程序和/或模块,处理器通过运行或执行存储在存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现电子设备的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器还可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,只能存储卡(smc),安全数字(sd)卡,闪存卡、至少一个磁盘存储期间、闪存器件、或其他易失性固态存储器件。
108.实施例4:
109.本实施例还提供了一种计算机可读存储介质,其中存储有多条指令,指令由处理器加载,使处理器执行本发明任一实施例中的基于kubernetes实现综合能源管理平台自动部署与升级方法。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或cpu或mpu)读出并执行存储在存储介质中的程序代码。
110.在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。
111.用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、cd-r、cd-rw、dvd-rom、dvd-rym、dvd-rw、dvd+rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上下载程序代码。
112.此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
113.此外,可以理解的是,将由存储介质读出的程序代码写到插入计算机内的扩展板
中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的cpu等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。
114.最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

技术特征:
1.一种基于kubernetes实现综合能源管理平台自动部署与升级方法,其特征在于,该方法是将综合能源管理平台的服务部署在kubernetes集群上,通过git仓库、docker镜像仓库、kubernetes集群完成综合能源管理平台的自动部署和自动升级;具体为:在kubernetes集群上部署prometheus和helm,通过prometheus监控kubernetes集群各个节点资源的使用情况,自助选择将综合能源管理平台对应的微服务部署到对应的集群之中;helm为kubernetes软件包管理工具,通过helm进行kubernetes集群的资源部署;通过git仓库获取综合能源管理平台部署所需的chart包;通过docker镜像仓库获取综合能源管理平台所需的镜像。2.根据权利要求1所述的基于kubernetes实现综合能源管理平台自动部署与升级方法,其特征在于,微服务部署前,管理员通过数据字典应用,录入当前可用kubernetes集群信息及产品的版本信息,在为租户部署微服务过程中,通过数据字典获取对应的信息。3.根据权利要求1或2所述的基于kubernetes实现综合能源管理平台自动部署与升级方法,其特征在于,管理员为租户部署微服务具体如下:管理员创建租户账号user_x,要求租户账号唯一;管理员查看各个集群的资源使用情况,选择要将租户user_x对应的服务部署在集群cluster_x上;进入到租户服务创建页面,填写租户的账号user_x;情况如下:

管理员选择一键部署,则部署综合能源管理平台的版本和其对应微服务所在的kubernetes集群,都为默认的,并且默认部署监控侧、管理侧及运维侧的对应的服务;

管理员根据租户user_x购买的功能范围,选择为租户user_x部署指定的产品版本v1,选择服务部署的集群cluster_x,选择是否要进行微服务的自动升级:若选择自动升级,则当有新版本发布时,自动在当天晚上12点自动进行服务的更新,选择要部署在监控侧、管理侧及运维侧的功能模块;通过租户账号user_x,在租户服务展示页面,查看该租户下微服务的部署情况,并能够手动更新微服务的信息;管理员是否选择为租户开启自动升级功能:若是,则每天晚上十二点,在不影响租户服务使用的情况下,进行服务的更新;通过prometheus对集群资源的监控,当租户user_x下面的服务pod_x对cpu、内存及磁盘资源的使用即将超过指定的最大限额,则发送告警信息给租户和管理员,提醒管理员增加租户user_x下面服务的资源使用的额度;管理员按照设定步骤更新服务pod_x所能使用的资源上限。4.根据权利要求3所述的基于kubernetes实现综合能源管理平台自动部署与升级方法,其特征在于,进入到租户服务创建页面,填写租户的账号user_x具体如下:管理员填写相关配置后,点击“创建”后,根据租户账号user_x,创建租户对应的数据库,数据库名默认为租户账号user_x;根据管理员填写的服务版本v1,从git仓库中拉取对应版本v1的chart包chart_x;根据管理员选择的集群cluster_x,从配置中读取集群cluster_x的信息,再通过helm部署的方式将chart_x部署在集群cluster_x中。5.根据权利要求4所述的基于kubernetes实现综合能源管理平台自动部署与升级方
法,其特征在于,通过helm部署的方式将chart_x部署在集群cluster_x中具体如下:在kubernetes的cluster_x集群上创建kubernetes的名称空间user_x,命名空间为租户的账号user_x;根据管理员选择的功能模块,使用helm部署chart_x包内对应的chart包;部署完成。6.根据权利要求3所述的基于kubernetes实现综合能源管理平台自动部署与升级方法,其特征在于,通过租户账号user_x,在租户服务展示页面,查看该租户下微服务的部署情况,并能够手动更新微服务的信息具体如下:管理员查看该租户下微服务的状态;管理员点击服务名称查看对应kubernetes的资源清单文件,管理员通过修改资源清单文件,更新微服务的资源上限、镜像及服务副本数;具体为:

通过修改replicas标签的值,修改服务的副本数,默认副本数为2;

修改标签resources的值,更新服务所能占有cpu和内存的上限;

通过修改image标签的值,单独为任一个微服务进行版本的更新。7.根据权利要求3所述的基于kubernetes实现综合能源管理平台自动部署与升级方法,其特征在于,进行服务的更新具体如下:定时从docker镜像仓库中获取租户下面每个微服务当前最新的镜像版本,对开启了自动升级的租户,对其下面的每个微服务的版本和查询出来的最新版本进行对比:若不是最新的版本,则进行服务的更新。8.一种基于kubernetes实现综合能源管理平台自动部署与升级系统,其特征在于,该系统用于实现权利要求1-7中任一项所述的基于kubernetes实现综合能源管理平台自动部署与升级方法,该系统包括git仓库、docker镜像仓库、kubernetes集群以及部署在kubernetes上的prometheus和helm;prometheus用于对kubernetes集群各个节点资源使用情况的监控;helm为kubernetes软件包管理工具,helm用于进行kubernetes的资源部署;git仓库用于获取综合能源管理平台部署所需的chart包;docker镜像仓库用于获取综合能源管理平台所需的镜像,将综合能源管理平台的服务部署在kubernetes集群上。9.一种电子设备,其特征在于,包括:存储器和至少一个处理器;其中,所述存储器上存储有计算机程序;所述至少一个处理器执行所述存储器存储的计算机程序,使得所述至少一个处理器执行如权利要求1至7任一项所述的基于kubernetes实现综合能源管理平台自动部署与升级方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序可被处理器执行以实现如权利要求1至7中任一项所述的基于kubernetes实现综合能源管理平台自动部署与升级方法。

技术总结
本发明公开了基于kubernetes实现综合能源管理平台自动部署与升级方法及系统,属于软件自动部署与升级技术领域,本发明要解决的技术问题为如何基于kubernetes集群实现综合能源管理平台的自动部署及升级,同时避免kubernetes集群中因服务过多导致的集群节点过多,采用的技术方案为:该方法是在kubernetes集群上部署prometheus和helm,通过prometheus监控kubernetes集群各个节点资源的使用情况,自助选择将综合能源管理平台对应的微服务部署到对应的集群之中;helm为kubernetes软件包管理工具,通过helm进行kubernetes集群的资源部署;通过git仓库获取综合能源管理平台部署所需的chart包。综合能源管理平台部署所需的chart包。综合能源管理平台部署所需的chart包。


技术研发人员:李胜 林俊豪 郭春杰 黄沛明 唐加利 王中明
受保护的技术使用者:苏州思萃工业互联网技术研究所有限公司
技术研发日:2023.06.21
技术公布日:2023/10/7
版权声明

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

飞行汽车 https://www.autovtol.com/

分享:

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

相关推荐