一种基于Kubernetes容器云平台的热部署方法、装置及应用与流程

文档序号:31522453发布日期:2022-09-14 13:04阅读:431来源:国知局
一种基于Kubernetes容器云平台的热部署方法、装置及应用与流程
一种基于kubernetes容器云平台的热部署方法、装置及应用
技术领域
1.本发明属于云计算领域,具体涉及以kubernetes技术为基础的集群化容器管理,特别涉及基于kubernetes容器云平台的热部署方法、装置及应用。


背景技术:

2.kubernetes是为容器服务而生的一个可移植容器的编排管理工具,越来越多的公司正在拥抱kubernetes,并且当前kubernetes已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地。在容器技术之前,开发用虚拟机较多,比如vmware和openstack,我们可以使用虚拟机在我们的操作系统中模拟出多台子电脑(linux),子电脑之间是相互隔离的,但是虚拟机对开发和运维人员而言,存在启动慢,占用空间大,不易迁移等缺点。
3.随着云计算和虚拟化技术的快速发展,越来越多的应用服务从传统的物理机和虚拟机部署迁移到容器化部署上来,随之而来的则是以kubernetes为基础的容器云平台中集群化容器管理的一系列挑战,不同于传统虚拟机应用部署步骤繁琐,容器部署强调快速灵活、秒级交付,这其中应用的配置管理尤为重要,在基于kubernetes容器云平台的自动化测试平台上,每次修改容器配置后,容器通常都有秒级更新的需求,而kubernetes原生的configmap配置管理机制并不能很好的满足这一点,容器无法在短时间内感知配置的修改,因此,本发明提供了一种扩展组件,来完善这部分需求。
4.在现有原生的容器云kubernetes平台中,通常会把需要经常改动的配置以configmap的形式生成在平台中,容器启动的时候以外部配置文件的形式挂载到容器内部,这样的方式使得容器的配置修改更加灵活,不过也带来一个问题,默认修改完configmap后,容器时无法感知到配置文件已被修改,平台也无法在配置修改后自动重启容器,对于需要秒级更新的容器应用,仍然需要手动发送信号给容器进行重启操作,增加了平台运维人员的负担。


技术实现要素:

5.本技术实施例提供了一种基于kubernetes容器云平台的热部署方法、装置及应用,本方案在容器云平台中部署了一个热部署模块,可以监听带有指定字段的配置文件,并实现关联容器的热部署。
6.第一方面,本技术实施例提供了一种基于kubernetes容器云平台的热部署方法,所述方法包括:
7.构建基于kubernetes集群的容器云平台,其中所述容器云平台中部署热部署模块,且在至少一待监听容器的描述文件中添加注解信息,所述注解信息内填写热部署依赖字段,所述热部署依赖字段内写有与待监听容器相关联的配置文件的唯一标识;所述热部署模块通过监听请求监听包含所述注解信息的描述文件对应的待监听容器,并基于所述注解信息中的热部署依赖字段监听所述待监听容器的配置文件,若监听到所述配置文件发生变化的事件,所述热部署模块计算所述事件前后的两配置文件的哈希值,若所述哈希值不
一致则重启所述待监听容器。
8.在其中一些实施例中,kubernetes集群的容器云平台至少包括管理节点和工作节点,所述管理节点中集成了配置管理中心、api服务器和热部署模块,其中配置管理中心与api服务器进行交互,api服务器与热部署模块进行交互,所述工作节点中至少部署了一待监听容器和一命令行工具,所述待监听容器的配置文件写入所述配置管理中心,所述命令行工具对所在工作节点上的至少一待监听容器进行启动、关闭、重启等操作,所述api服务器可对命令行工具发送指令。
9.在其中一些实施例中,所述热部署依赖字段中的标识与监听请求的内容一致。
10.在其中一些实施例中,“所述热部署模块监听包含所述注解信息的描述文件对应的待监听容器,并基于所述注解信息中的热部署依赖字段监听所述待监听容器的配置文件”包括:所述热部署模块向所述api服务器发送监听请求,所述api服务器基于所述监听请求查询并监听包含所述热部署依赖字段的描述文件对应的待监听容器,并依据所述热部署依赖字段中的所述标识监听与所述待监听容器相关联的配置文件,所述配置文件作为监听结果返回给所述热部署模块
11.在其中一些实施例中,所述监听请求为查询待监听容器的描述文件中是否含有所述注解信息,并持续监听所述注解信息内含有热部署依赖字段的待监听容器和与所述待监听容器相关联的配置文件。
12.在其中一些实施例中,所述热部署依赖字段的标识和与所述待监听容器相关联的配置文件的标识保持一致。
13.在其中一些实施例中,“若监听到所述配置文件发生变化的事件”包括:所述配置文件发生变化的事件指的是所述配置文件的配置字段被调整,所述api服务器获取所述配置文件发生变化的事件的推送并将其返回给热部署模块。
14.在其中一些实施例中,若所述事件前后两配置文件的哈希值相同,则所述待监听容器继续运行。
15.在其中一些实施例中,“重启所述待监听容器”包括:热部署模块向所述kubernetes集群的容器云平台的api服务器发送重启请求,所述api服务器收到所述重启请求后,通过kubernetes自带的命令行工具对待监听容器进行重启。
16.第二方面,本技术实施例提供了一种基于kubernetes容器云平台的热部署装置,包括:
17.构建模块:用于构建基于kubernetes集群的容器云平台,其中所述容器云平台中部署热部署模块,且在至少一待监听容器的描述文件中添加注解信息,所述注解信息内填写热部署依赖字段,所述热部署依赖字段内写有与待监听容器相关联的配置文件的唯一标识;
18.监听模块:用于监听包含所述注解信息的描述文件对应的待监听容器,并基于所述注解信息中的热部署依赖字段监听所述待监听容器的配置文件,若监听到所述配置文件发生变化的事件,所述热部署模块计算所述事件前后的两配置文件的哈希值,若所述哈希值不一致则重启所述待监听容器。
19.第三方面,本技术实施例提供了一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行基
于kubernetes容器云平台的热部署方法。
20.第四方面,本技术实施例提供了一种可读存储介质,其特征在于,所述可读存储介质中存储有计算机程序,所述计算机程序包括用于控制过程以执行过程的程序代码,以执行基于kubernetes容器云平台的热部署方法。
21.本发明的主要贡献和创新点如下:
22.本发明部署了一个热部署模块,所述热部署模块会集成在基于kubernetes的容器云平台中持续监听带有热部署注解的容器所关联的配置文件,在监听到配置文件发生变化后,会计算对比前后两配置文件的哈希值,若哈希值一致,则容器继续运行,若哈希值不一致,则发送重启请求给容器云平台的api服务器,对该配置文件所关联的容器进行重启操作,提升了在自动化测试场景中的部署效率,减少多余的人工操作负担。
23.本技术的一个或多个实施例的细节在以下附图和描述中提出,以使本技术的其他特征、目的和优点更加简明易懂。
附图说明
24.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
25.图1是根据本技术实施例的基于kubernetes容器云平台的热部署方法的流程图;
26.图2是根据本技术实施例的基于kubernetes容器云平台的热部署方法的系统架构图;
27.图3是根据本技术实施例的基于kubernetes容器云平台的监听方法的结构框图;
28.图4是根据本技术实施例的电子装置的硬件结构示意图。
具体实施方式
29.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
30.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
31.本发明提供了一种基于kubernetes容器云平台的热部署方法,其在kubernetes容器云平台内部署了一个热部署模块,所述热部署模块会集成在基于kubernetes的容器云平台中,持续监听带有热部署注解的容器所关联的配置文件,在监听到配置文件发生变化后,会计算对比前后两配置文件的哈希值,若哈希值一致,则容器继续运行,若哈希值不一致,则发送重启请求给容器云平台的api服务器,对该配置文件所关联的容器进行重启操作,提升了在自动化测试场景中的部署效率,减少多余的人工操作负担。
32.为了方便理解本案,首先介绍本方案涉及的名词:
33.kubernetes:kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,kubernetes的目标是让部署容器化的应用简单且高效,kubernetes提供了应用部署、规划、更新、维护的一种机制,传统的应用部署方式是通过插件或脚本来安装应用,这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机并不利于可移植性,新的方式是通过部署容器的方式实现,每个容器之间相互隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源,相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统之间进行迁移,容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间形成一对一关系也使容器有更大优势,使用容器可以在开发阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境,类似的,容器比虚拟机轻量、更透明,这更便于监控和管理。
34.哈希值:哈希值根据文件大小、时间、类型等计算出来的,很容易就会发生变化,哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值成为哈希值,哈希值是一段数据唯一且及其紧凑的数值表示形式,如果散列一段明文而且哪怕只改变该段落的一个字母,随后的哈希值都将产生不同的值。
35.实施例一
36.图1是根据本技术实施例的基于kubernetes容器云平台的热部署方法的流程图。
37.第一方面,本方案提供的一种基于kubernetes容器云平台的热部署方法主要包括以下步骤:
38.构建基于kubernetes集群的容器云平台,其中所述容器云平台中部署热部署模块;
39.在至少一待监听容器的描述文件中添加注解信息,所述注解信息内填写热部署依赖字段,所述热部署依赖字段内写有与待监听容器相关联的配置文件的唯一标识;
40.所述热部署模块监听包含所述注解信息的描述文件对应的待监听容器,并基于所述注解信息中的热部署依赖字段监听所述待监听容器的配置文件;
41.监听到所述配置文件发生变化的事件,所述热部署模块计算所述事件前后的两配置文件的哈希值,若所述哈希值不一致则重启所述待监听容器。
42.在“构建基于kubernetes集群的容器云平台,其中所述容器云平台中部署热部署模块”步骤中,所构建的基于kubernetes集群的容器云平台至少包括管理节点和工作节点,所述管理节点中集成了配置管理中心、api服务器和热部署模块,其中配置管理中心与api服务器进行交互,api服务器与热部署模块进行交互,所述工作节点中至少部署了一待监听容器和一命令行工具,所述待监听容器的配置文件写入所述配置管理中心,所述命令行工具对所在工作节点上的至少一待监听容器进行启动、关闭、重启等操作,所述api服务器可对命令行工具发送指令。
43.具体的,管理节点中的配置管理中心是一种api对象,用来将非机密性的数据保存到键值对中,用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文
件。在本方案中,工作节点中所有容器的配置文件都保存在配置管理中心中,以便配置文件对容器的持久化写入,配置管理中心与api服务器进行交互,以确保每次配置文件发生改动都能通知到api服务器。
44.具体的,管理节点中的api服务器为kubernetes集群提供统一的访问接口,实现身份认证、授权和准入控制、api注册和发现等功能。在本方案中,api服务器和配置管理中心进行交互,确保配置文件的每次修改都能通知到api服务器;api服务器和热部署模块进行交互,以使得热部署模块可对容器进行监听和部署,且api服务器可向工作节点内命令行工具发送重启信号,实现容器的重启。
45.具体的,工作节点中的命令行工具主要负责容器的创建删除等生命周期管理以及容器的存储、网络管理、健康检查、监控等。在本方案中,命令行工具负责对工作节点中的待监听容器进行启动和重启操作,以完成热部署。
46.在“至少一待监听容器的描述文件中添加注解信息,所述注解信息内填写热部署依赖字段,所述热部署依赖字段内写有与待监听容器相关联的配置文件的唯一标识”步骤中,所述热部署依赖字段中的标识与监听请求的内容一致。
47.具体的,在编写完成待监听容器的配置文件后,给予所述配置文件一个标识并将其保存到配置管理中心,在待监听容器的描述文件中添加注解,填写热部署依赖字段,热部署依赖字段中写有所述配置文件的标识,热部署模块通过监听请求从api服务器获取到了待监听容器的描述文件中带有热部署依赖字段,对待监听容器进行持续监听,并依据热部署依赖字段中的标识,关联了所述配置文件,并对所述配置文件做持续监听。
48.在“所述热部署模块监听包含所述注解信息的描述文件对应的待监听容器,并基于所述注解信息中的热部署依赖字段监听所述待监听容器的配置文件”步骤中,所述热部署模块向api服务器发送监听请求,所述api服务器基于所述监听请求查询并监听包含所述热部署依赖字段的描述文件对应的待监听容器,并依据所述热部署依赖字段中的所述标识监听与所述待监听容器相关联的配置文件,所述配置文件作为监听结果返回给所述热部署模块。
49.具体的,所述监听请求为kubernetes集群的容器云平台自带的watch监听请求,watch请求的内容是对kubernetes集群的容器云平台中的所有带有热部署依赖字段的容器进行监听,同时对所述热部署依赖字段中标识所对应的配置文件进行监听,热部署模块是通过watch监听请求与所述api服务器进行交互的。
50.在“监听到所述配置文件发生变化的事件,所述热部署模块计算所述事件前后的两配置文件的哈希值,若所述哈希值不一致则重启所述待监听容器”步骤中,若所述配置文件的配置字段被调整,所述api服务器获取所述配置文件发生变化的事件的推送并将所述配置文件返回给热部署模块,热部署模块对所述事件前后两配置文件的哈希值计算,若所述哈希值相同,则所述容器继续运行,若所述哈希值不同,热部署模块立即向所述api服务器发送重启请求,所述api服务器收到所述重启请求后,通过工作节点上的命令行工具对所述配置文件所关联的容器进行重启。
51.图2是根据本技术实施例的基于kubernetes容器云平台的热部署方法的系统架构图。
52.示例性的,本方案提供一具体示例:首先构建一个kubernetes集群容器云平台
201,所述kubernetes集群容器云平台中至少需要两种类型的节点,即管理节点202和工作节点203,管理节点202中集成了api服务器204、配置管理中心205、热部署模块206,工作节点203中部署了各类容器,其中包括待监听容器web容器207,每个工作节点中都有一个命令行工具kubelet208,用来对工作节点203中的容器进行启动和重启等操作,api服务器204与配置管理中心205交互,热部署模块206与api服务器204进行交互,api服务器204通过向kubelet208发送信号实现与web容器207交互。
53.具体的,热部署模块206部署完成后,此模块包含一个基于kubernetes的控制器组件,该组件会向容器云平台的api服务器204发送watch监听请求,请求内容是查询kubernetes集群201中所有容器的注解信息中是否带有热部署依赖字段,并对符合条件的容器和该容器关联的配置文件进行持续的监听;在kubernetes集群201的工作节点203中,部署一个常规的web容器应用207,首先编写这个容器的核心配置文件,此配置文件的名字name字段这里定义为test1-configmap,然后将该配置文件以confidmap的形式保存在配置管理中心205中;将上述配置管理中心205中保存的配置文件名称写入到web容器207的应用描述文件中(web-app.yam1),同时在这个描述文件中添加注解,填写热部署依赖字段,例如configmap.restarter.ccikube.io/reload:“test1-configma”,其中test1-configmap这个字段与上述配置文件的name字段保持一致;基于上述应用描述文件,使用kubelet208命令行工具启动这个web容器207,命令为kubectl apply-f web-app.yaml;将web容器启动后,热部署模块206的控制器通过此前建立的watch监听请求从api服务器204中获取到了此web容器207带有configmap.restarter.ccikube.io/reload这个注解,并关联了test1-configmap这个配置文件,控制器此时将会对这个配置文件做持续监听;对web容器207的配置文件进行修改,调整部分配置字段,并再次保存到管理节点202的配置管理中心205中;将配置文件修改事件推送到api服务器204中,与此同时,热部署模块206的控制器通过持续监听,监测到了该配置文件发生变化,控制器内部分别计算新老的配置文件的sha1哈希值,并记录下来;热部署模块206的控制器对计算得到的新老配置文件的sha1哈希值进行比对,发现所述哈希值不一致,判断配置文件已更新,需要立即重启web容器207使之生效;热部署模块206向api服务器204发送重启请求,api服务器204收到请求后,立即发送重启信号给web容器207所在工作节点上的kubelet208,kubelet208接收到api服务器204发送的重启信号,对web容器207进行重启操作,完成热部署。
54.实施例二
55.另外,如图3所示,本方案一种基于kubernetes容器云平台的热部署装置,该装置利用上述基于kubernetes容器云平台的热部署的方法来实现热部署,该装置包括:
56.构建模块:用于构建基于kubernetes集群的容器云平台,其中所述容器云平台中部署热部署模块,且在至少一待监听容器的描述文件中添加注解信息,所述注解信息内填写热部署依赖字段,所述热部署依赖字段内写有与待监听容器相关联的配置文件的唯一标识;
57.监听模块:用于监听包含所述注解信息的描述文件对应的待监听容器,并基于所述注解信息中的热部署依赖字段监听所述待监听容器的配置文件,若监听到所述配置文件发生变化的事件,所述热部署模块计算所述事件前后的两配置文件的哈希值,若所述哈希值不一致则重启所述待监听容器。
58.实施例三
59.本实施例还提供了一种电子装置,参考图4,包括存储器404和处理器402,该存储器404中存储有计算机程序,该处理器402被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
60.具体地,上述处理器402可以包括中央处理器(cpu),或者特定集成电路(applicationspecificintegratedcircuit,简称为asic),或者可以被配置成实施本技术实施例的一个或多个集成电路。
61.其中,存储器404可以包括用于数据或指令的大容量存储器404。举例来说而非限制,存储器404可包括硬盘驱动器(harddiskdrive,简称为hdd)、软盘驱动器、固态驱动器(solidstatedrive,简称为ssd)、闪存、光盘、磁光盘、磁带或通用串行总线(universalserialbus,简称为usb)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器404可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器404可在数据处理装置的内部或外部。在特定实施例中,存储器404是非易失性(non-volatile)存储器。在特定实施例中,存储器404包括只读存储器(read-onlymemory,简称为rom)和随机存取存储器(randomaccessmemory,简称为ram)。在合适的情况下,该rom可以是掩模编程的rom、可编程rom(programmableread-onlymemory,简称为prom)、可擦除prom(erasableprogrammableread-onlymemory,简称为eprom)、电可擦除prom(electricallyerasableprogrammableread-onlymemory,简称为eeprom)、电可改写rom(electricallyalterableread-onlymemory,简称为earom)或闪存(flash)或者两个或更多个以上这些的组合。在合适的情况下,该ram可以是静态随机存取存储器(staticrandom-accessmemory,简称为sram)或动态随机存取存储器(dynamicrandomaccessmemory,简称为dram),其中,dram可以是快速页模式动态随机存取存储器404(fastpagemodedynamicrandomaccessmemory,简称为fpmdram)、扩展数据输出动态随机存取存储器(extendeddateoutdynamicrandomaccessmemory,简称为edodram)、同步动态随机存取内存(synchronousdynamicrandom-accessmemory,简称sdram)等。
62.存储器404可以用来存储或者缓存需要处理和/或通信使用的各种数据文件,以及处理器402所执行的可能的计算机程序指令。
63.处理器402通过读取并执行存储器404中存储的计算机程序指令,以实现上述实施例中的任意一种数据入库方法。
64.可选地,上述电子装置还可以包括传输设备406以及输入输出设备408,其中,该传输设备406和上述处理器402连接,该输入输出设备408和上述处理器402连接。
65.传输设备406可以用来经由一个网络接收或者发送数据。上述的网络具体实例可包括电子装置的通信供应商提供的有线或无线网络。在一个实例中,传输设备包括一个网络适配器(network interface controller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备406可以为射频(radio frequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。
66.输入输出设备408用于输入或输出信息。在本实施例中,输入的信息可以是配置文件的配置信息,待监听容器的描述文件的注解信息等,输出信息可以用来实现kubernetes容器云平台的热部署。
67.可选地,在本实施例中,上述处理器402可以被设置为通过计算机程序执行以下步骤:
68.构建基于kubernetes集群的容器云平台,其中所述容器云平台中部署热部署模块;
69.在至少一待监听容器的描述文件中添加注解信息,所述注解信息内填写热部署依赖字段,所述热部署依赖字段内写有与待监听容器相关联的配置文件的唯一标识;
70.所述热部署模块监听包含所述注解信息的描述文件对应的待监听容器,并基于所述注解信息中的热部署依赖字段监听所述待监听容器的配置文件;
71.监听到所述配置文件发生变化的事件,所述热部署模块计算所述事件前后的两配置文件的哈希值,若所述哈希值不一致则重启所述待监听容器。
72.需要说明的是,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
73.通常,各种实施例可以以硬件或专用电路、软件、逻辑或其任何组合来实现。本发明的一些方面可以以硬件来实现,而其他方面可以以可以由控制器、微处理器或其他计算设备执行的固件或软件来实现,但是本发明不限于此。尽管本发明的各个方面可以被示出和描述为框图、流程图或使用一些其他图形表示,但是应当理解,作为非限制性示例,本文中描述的这些框、装置、系统、技术或方法可以以硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备或其某种组合来实现。
74.本发明的实施例可以由计算机软件来实现,该计算机软件由移动设备的数据处理器诸如在处理器实体中可执行,或者由硬件来实现,或者由软件和硬件的组合来实现。包括软件例程、小程序和/或宏的计算机软件或程序(也称为程序产品)可以存储在任何装置可读数据存储介质中,并且它们包括用于执行特定任务的程序指令。计算机程序产品可以包括当程序运行时被配置为执行实施例的一个或多个计算机可执行组件。一个或多个计算机可执行组件可以是至少一个软件代码或其一部分。另外,在这一点上,应当注意,如图中的逻辑流程的任何框可以表示程序步骤、或者互连的逻辑电路、框和功能、或者程序步骤和逻辑电路、框和功能的组合。软件可以存储在诸如存储器芯片或在处理器内实现的存储块等物理介质、诸如硬盘或软盘等磁性介质、以及诸如例如dvd及其数据变体、cd等光学介质上。物理介质是非瞬态介质。
75.本领域的技术人员应该明白,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
76.以上实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本技术范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1