用于编排终端设备上的基于容器的应用的方法与流程

文档序号:28206712发布日期:2021-12-28 18:47阅读:89来源:国知局
用于编排终端设备上的基于容器的应用的方法与流程

1.本发明涉及用于编排在终端设备上执行的基于容器的应用的方法和系统。


背景技术:

2.软件应用,以下也简称为应用,越来越多地在诸如物联网(iot)设备或边缘设备(edge device)的设备上借助于所谓的容器加以实现,这些设备形成了进入服务提供商网络的入口点。在基于容器地实现应用的情况下,应用软件的组件与执行所需的库等捆绑在一个或多个容器中,并在所述设备中的本地运行时环境下执行。通过容器化可以管理和控制将所述设备的哪些系统资源分配给容器中的进程。
3.这种基于容器的应用通常由中央管理系统(例如编排系统,如“kubernetes”)进行分布和控制。所述编排系统编排在容器中正在进行的工作进程,这些工作进程在节点上运行,所述节点例如是集群中的物理机或虚拟机。带有自身节点的集群通过专用的编排主机(例如kubernetes主机)控制,所述专用的编排主机将容器分布到节点上并进行管理。为此,所述编排主机以信息技术中已知的主从关系与每个单独节点上的编排从机(例如“kubelet”程序)进行通信。所述编排从机负责节点的状态。所述编排从机由所述编排主机中的控制器管理器来控制,并承担容器的启动和停止。所述编排从机以短的时间间隔将状态报告给所述编排主机。在节点出现错误或不可达的情况下,所述编排主机根据状态未被报告而识别出这一点。常规情况下,所述控制器管理器然后重新启动容器,但在另外的“可用”节点上启动。
4.因此,基于容器的应用的典型使用场景是以下体系架构,其中容器运行在哪个设备上是无关紧要的,并且容器可以任意分布在各种设备上地运行和伸缩。通过借助于所谓的节点选择器将容器固定地分配给单个设备,应用或其在容器上的配置仍然可以特定于设备地加以管理。设备上的编排主机和编排从机之间的持续连接是这种基于容器的应用无干扰运行所必需的。
5.特别是例如安装在火车或汽车中的移动物联网设备的情况下,不能保证所述设备与编排主机之间的永久连接性。该连接也可能会在较长的时间段内失效。这种连接中断可能是由于编排主机的失效或者是由于传输连接本身的中断并因此停止而引起的。在传输连接本身中断并因此停止的情况下,终端设备与具有例如与应用通信的服务器的支持网络完全分离,并且因此不能向所述应用的网络侧接口(例如报告系统)发送数据。在这两种类型的连接中断的情况下,设备的重新启动导致关于应当在所述终端设备上启动哪些基于容器的组件的信息不再存在。这是因为为了在所述设备或所述组件本身启动时重新启动安装在所述设备上的编排从机,在编排主机那里调用了信息。该行为是因为在诸如容器虚拟化的典型应用领域,诸如云计算中,在所述终端设备不可用时,kubernetes主机将资源外包给另外的终端设备。
6.在物联网环境中通常不给出这种外包可能性,因为大部分容器实体仅在设置的一个设备上运行。由此特别是不能将必须高度可用的安全关键应用作为基于容器的应用来提
供。


技术实现要素:

7.因此,本发明的任务是创建一种编排系统或一种编排方法,其中即使在编排主机和终端设备之间没有连接时,所提供的服务也不中断地继续执行。
8.该任务通过独立权利要求中描述的措施来解决。本发明的有利扩展在从属权利要求中示出。
9.根据第一方面,本发明涉及一种用于编排在终端设备上执行的基于计算机的应用的方法,其中在所述终端设备上的编排从单元中经由通信连接从编排主单元接收实现信息,并且基于所述实现信息由所述编排从单元来配置和/或控制所述应用,其中接收到的实现信息附加地持久存储在所述终端设备中的存储单元上,并且如果与编排单元的通信连接中断,则由所述编排从单元调用最后存储的实现信息,并且基于所述最后存储的实现信息来配置和/或控制所述应用。
10.终端设备是指在其上执行应用的专用设备,例如物联网(iot)设备或边缘设备(edge device),与由多个组件组成并且可以在任意一个或多个组件上执行所述应用的设备或系统不同。诸如kubernetes主机的编排主单元在此布置在与所述终端设备物理分离的单元中,该单元例如属于控制网络。在此,基于容器的应用例如与控制网络中的特定于应用的单元进行通信以交换应用数据。为了编排所述基于容器的应用,所述编排主单元经由通信连接与所述编排从单元进行通信。如果至所述编排主单元的通信连接中断,则这例如可能是由于所述编排主单元不可用或由于所述通信连接本身失效所导致。所述通信连接的中断包括两个选项。也称为部署信息的实现信息主动地从所述编排主单元传输到所述编排从单元。仅当管理员在编排主机上进行与所述应用相关的改变时,所述实现信息才会改变。然后将所述实现信息从所述编排主单元传输到所述编排从单元。
11.由于接收到的实现信息在所述终端设备中的存储单元上持久地,即非易失地存储,该信息可以在所述终端设备上由所述编排从单元本地调用,并且即使与所述编排主单元没有连接也可以再次激活或维持所述应用。由此确保所述应用的持续提供。由此,必须在所述终端设备上以高度防失效性可用的安全关键服务也可以基于容器地加以提供。如果所述通信连接完好,则在所述终端设备上的应用失效的情况下,由所述编排从单元在所述编排主单元那里重新调用所述实现信息。
12.在有利的实施方式中,如果与所述编排主单元的通信连接中断并且所述终端设备上至少一个容器实体失效,则由所述编排从单元基于最后存储的实现信息重新启动所述至少一个容器实体。
13.通常,编排从单元在编排主单元做出反馈后才基于接收到的消息重新启动容器实体。通过持久存储在所述存储单元上的实现信息,现在所述编排从单元可以独立地及时重新启动对应的容器实体。容器实体是指具有对应应用程序的具体容器执行环境,所述具体容器执行环境基于容器镜像(也称container image)通过所述实现信息来加以描述。
14.在有利的实施方式中,如果与所述编排主单元的通信连接中断并且重新启动所述终端设备,则所述编排从单元基于最后存储的实现信息启动所述应用。
15.由此甚至可以在重新启动所述终端设备而不仅仅是在正在运行的终端设备上的
应用失效时再次在所述终端设备上激活所述应用。因此,所述终端设备可以在没有连接到所述编排主单元的情况下从关断状态下启动并且由所述编排从单元基于所存储的实现信息来再次配置和启动。在编排主单元和编排从单元之间迄今为止常见的工作方式中,所述应用不会在所述终端设备上启动,因为在所述终端设备关断的情况下也会删除所述实现信息,并且由于缺乏通信连接,在所述编排从属单元中不会从所述编排主单元接收到新的实现信息。例如可以经由终端设备中自己的编排从“插件”来实现这种改变的行为。
16.在有利的实施方式中,优先化容器实体在创建所述实现信息时由所述编排主单元标识为“优先化的”。
17.这使得可以例如将与安全相关的容器实体标识为优先化容器实体。在应用运行时,优先化的容器得到识别并且优先地,特别是短暂地和在时间上相对于另外的容器优先地由所述编排从单元再次实体化和重新启动。例如,可以通过所述实现信息中的标签来标识这样的优先化容器实体。由此还可以以基于容器的方式实现具有高可用性的应用,例如与安全相关的应用。
18.在有利的实施方式中,至少一个紧急情况容器镜像存储在所述存储单元中,所述紧急情况容器镜像执行至少一个功能,当存在通信连接时,通过经由所述通信连接与所述终端设备连接的应用接口执行所述至少一个功能。
19.因此,存储所有当存在通信连接时从所述终端设备中基于容器的应用向与所述终端设备本地分开布置的应用接口发送的数据和/或消息。由此在重新建立与所述应用接口的通信连接之后,例如在后端系统或分布式服务器系统中或也在控制网络中,在那里能够以所述应用常见的形式进行处理。从所述编排从单元发送给所述编排主单元的消息或信息也可以存储在紧急情况容器实体中,并且当与所述编排主单元的通信连接再次连接并活跃时传送给所述编排主单元。这使得事后可以查看组件是否已在本地频繁重新启动以及是否已激活紧急情况模式。
20.在有利的实施方式中,所述编排从单元根据从所述编排主单元接收的紧急情况指南来改变所述应用的配置和/或控制。
21.在此,所述紧急情况指南是所述实现信息的组成部分,并与所述实现信息一起持久存储在所述存储单元中。所述紧急情况指南是所述实现信息的附加组成部分。例如,所述紧急情况指南定义了从何时起激活各个紧急情况措施。例如可以定义网络失效后的时间间隔,从该时间间隔起可以开始紧急情况动作。
22.在有利的实施方式中,所述编排从单元根据紧急情况指南启动所述至少一个紧急情况容器实体和/或停止所述应用的至少一个工作容器实体。
23.通过紧急情况容器实体例如可以临时存储或处理所确定的传感器数据,这在通信连接有效的情况下将由与所述终端设备连接的应用接口执行。通过停止工作容器,可以释放资源并且例如可以将资源分配给紧急情况容器实体。由此基于容器的应用可以尽可能无中断地并且与常见的执行相对应地执行。
24.在有利的实施方式中,所述紧急情况指南包括不同的级别指南,并且根据所确定的紧急情况级别,由所述编排从单元激活分配给紧急情况级别的级别指南。
25.例如,可以借助于不同的标识符(所谓的标签)来标识级别指南。这使得所述终端设备能够以适配相应状况并且因此非常灵活的方式做出反应,并且使得能够在紧急情况下
灵活地设计所述应用。
26.在有利的实施方式中,根据所述通信连接和/或主编排单元的持续时间和/或失效类型来确定所述紧急情况级别。
27.由此可以根据失效的持续时间和类型定义多个升级级别,并且可以引入对应的措施。
28.在有利的实施方式中,根据所分配的级别指南启动其他紧急情况容器实体,和/或在所确定的紧急情况级别的持续时间内,将不同数量的资源分配给所述至少一个紧急情况容器实体。
29.通过资源适配,即使所述通信连接或所述编排主单元较长时间失效,所述应用的运行也可以维持在常见的程度。
30.在有利的实施方式中,根据所分配的级别指南,停止、暂停对于紧急情况运行不必要的现有容器实体或者改变所述现有容器实体的资源分布,并且由此将变得空闲的资源分配给所述紧急情况容器实体。
31.这使得所述应用可以灵活地、适配紧急情况状况地紧急情况运行。可以改变所述实现信息中对应的容器镜像,例如可以减少所分配的cpu配额。
32.在有利的实施方式中,在重新建立了所述通信连接之后,将在所述紧急情况容器实体中收集的数据传送到经由所述通信连接与所述终端设备连接的应用接口。
33.因此,在紧急情况运行期间或在与所述编排主单元的通信连接失效期间产生或收集的数据、信息或消息不会丢失并且可以在所述应用接口中、例如在后端云环境中或在控制网络的控制节点中得到分析或处理。例如,可以从传送的数据中导出措施并执行所述措施。
34.在有利的实施方式中,在重新建立了所述通信连接之后,在所述编排从单元中从所述编排主单元接收正常运行指南并且所述终端设备转换到正常状态。由此,所述终端设备上基于容器的应用可以转换到常见的执行环境和执行类型。
35.本发明的第二方面涉及一种用于编排在终端设备上执行的基于容器的应用的系统,所述系统包括包含编排从单元的终端设备,和经由通信连接与所述终端设备连接的编排主单元,它们被构造为:
‑ꢀ
在所述编排从单元中经由所述通信连接从所述编排主单元接收实现信息,
‑ꢀ
由所述编排从单元基于所述实现信息配置和/或控制所述应用,其中
‑ꢀ
接收到的实现信息附加地持久存储在所述终端设备的存储单元上,并且
‑ꢀ
如果所述通信连接中断,则由所述编排从单元调用最后存储的实现信息,并且基于所述最后存储的实现信息配置和/或控制所述应用。
36.通过这样的系统,基于容器的应用,特别是执行安全关键或与运行安全相关的功能的应用,也可以在特定的、固定预给定的终端设备上实现,因为即使在所述通信连接失效的情况下所述应用的运行也可以继续并因此可以得到保证。这可以例如经由所述终端设备中自己的编排从“插件”来实现。
37.本发明的第三方面涉及一种计算机程序产品,包括可直接加载到数字计算机的存储器中的非易失性计算机可读介质,所述计算机程序产品包括适合于执行所述方法的步骤的程序代码部分。
38.相应的单元(例如编排主单元、编排从单元或还有存储单元)可以以硬件技术和/或软件技术实现。在以硬件技术实现的情况下,相应的单元可以构造为设备或设备的一部分,例如构造为计算机或微处理器或车辆的控制计算机或控制计算机的一部分。在以软件技术实现的情况下,相应单元可以被构造为计算机程序产品、功能、例程、程序代码的一部分或可执行对象。在本发明的上下文中,存储单元可以是例如硬盘或其他可以持久存储数据的存储介质。
39.计算机程序产品(例如计算机程序装置)例如可以作为存储卡、usb记忆棒、cd

rom、dvd提供或交付,或者也以可从网络中的服务器下载的文件的形式提供或交付。
附图说明
40.根据本发明的方法以及根据本发明的系统的实施例在附图中示例性地示出并且基于以下描述得到更详细的解释。其中:图1以示意图示出了用于管理由一个或多个服务器提供给服务用户的基于容器的应用的已知体系架构的示例;图2以示意图示出了在预给定终端设备上执行的基于容器的应用的示例;图3以流程图的形式示出了根据本发明的方法的第一实施例;图4以框图示出了根据本发明的系统的实施例;以及图5以消息流程的形式示出了根据本发明的方法的第二实施例。
41.在所有附图中,彼此对应的部件配备有相同的附图标记。
具体实施方式
42.图1示出了用于由服务器1管理计算机实现的应用的典型体系架构,所述应用由一个或多个节点2、3提供给所述应用的用户。在此,应用由在一个或多个容器中提供的程序部分执行。容器或容器虚拟化在此是一种在主机系统上彼此隔离地运行操作系统的多个实体的方法。为了管理或为了容器管理,通常使用诸如kubernetes的编排程序。所述编排程序控制在分布式主机系统(所谓的节点2、3)上容器的自动分布、伸缩和维护。
43.图1示出了这样的编排主单元oma,其将容器分布到各个节点2、3上并进行管理。编排主单元oma根据可用资源决定在节点2、3中的哪个节点上启动哪个容器。编排主单元oma管理布置在节点2、3上的容器并监视这些容器的负载。为此,编排主单元oma向各个节点2、3提供实现信息,对应的编排从单元osl在节点2、3中接收所述实现信息并转发到运行时环境以执行容器。除了包含在编排主单元oma中的调度器之外,消息从编排主单元oma经由负载分布器4分布到不同节点2、3上。编排主单元例如布置在后端系统1的控制单元中。对于这样的服务或这样的体系架构,重要的不是容器在哪个节点2、3上运行,而是这些容器任意分布到各个节点上和进行伸缩。
44.尽管如此,通过借助于所谓的节点选择标识符(也称为节点选择器)将容器固定地分配给节点,可以特定于设备地管理基于容器的应用。图2示出了这样的应用场景,其中在终端设备上执行服务(这里例如安装在车辆6中)。为此,所述终端设备(这里例如是车辆6)包含编排从单元osl,该编排从单元osl经由通信连接7从编排主单元oma接收用于各个容器的控制信息。编排主单元oma例如布置在服务提供商的后端服务器5中的控制单元中。所描
述的应用可以特别提供在物联网设备中,该设备经由通信连接7与编排主单元oma独立自主地通信。
45.尤其是在终端设备经由无线电接口连接到后端系统5的情况下,不能假设存在至编排主单元oma的永久连接,而是该连接也可能在较长的时间段内失效。该连接中断可能是由编排主单元oma的失效或由通信连接7的失效造成的。这特别是在终端设备的情况下由于无线电连接不足或缺失而造成。由此终端设备6与后端服务器5完全隔离,并且因此不能向现有报告系统发送数据。对于这两种类型的连接中断,重新启动所述终端设备或所述应用导致关于在所述终端设备上应当启动哪些基于容器的应用组件的信息不再存在。
46.通过下面描述的方法和系统,基于计算机的应用在这两种类型的连接中断的情况下继续执行。为此,在所述终端设备上针对编排而运行的编排从单元osl将最后从编排主单元oma获得的实现信息持久存储在所述终端设备上。当所述终端设备重新启动时,如果没有与编排主单元oma的连接,则启动最后已知的实现信息。
47.现在基于图3更详细地解释该方法。在第一方法步骤s1中,在编排从单元osl中经由通信连接从编排主单元oma接收实现信息。在方法步骤s2中,由编排从单元osl基于所述实现信息来配置和/或控制所述应用。在随后的步骤s3中,接收到的实现信息附加地持久存储在所述终端设备中的存储单元上,即永久地并且在所述终端设备关断时也继续可用地存储在所述终端设备中的存储单元上。如果所述终端设备在步骤s4中确定与编排主单元oma的通信连接中断,则编排从单元osl从所述存储单元中调用最后存储的实现信息,参见s5。基于所述最后存储的实现信息来配置和/或控制所述应用,参见s6。如果在所述终端设备中确定存在与编排主单元oma的通信连接,参见图3中的箭头n,则编排从单元osl继续从编排主单元oma接收控制信息并对应地执行所述控制信息。
48.特定于应用的信息或由应用收集的数据也经由现有的通信连接传输到编排主单元oma或特定于应用的接口。当所述终端设备中的应用崩溃或终止时,在存在通信连接的情况下编排主单元oma可以重新向编排从单元osl传送实现信息,并重新启动在所述终端设备中的所述应用。在此,再次根据方法步骤s1

s3处理接收到的实现信息并且将新的实现信息再次持久地存储在所述存储单元中。因此,所述终端设备的存储单元总是包括最新的、当前的实现信息。
49.所述实现信息尤其是包含容器镜像,所述容器镜像包括容器应当执行的应用组件的操作和文件。在需要时,编排从单元osl启动一个或多个根据所述容器镜像加以配置和执行的容器实体。如果所述终端设备上的容器实体失效并且与编排主单元oma的通信连接中断,则基于最后存储的实现信息启动所述容器实体。无需等待来自编排主单元oma的反馈,或者只等待特定的最大持续时间。例如,可以通过编排从单元osl中的插件来实现这种改变的行为。
50.为了能够特别是不中断地提供包括安全关键应用模块的安全关键容器实体,安全关键容器实体在编排主机上创建时通过特殊标识符(例如借助于标签)加以标识。然后,在连接中断的情况下,可以由编排从单元osl优先处理这样的优先化容器实体。为此将至少一个紧急情况容器镜像存储在所述存储单元中,该紧急情况容器镜像执行至少一个功能,该功能在存在通信连接的情况下通过经由该通信连接与所述终端设备连接的应用接口来执行。
51.此外,编排从单元osl根据从编排主单元oma接收的紧急情况指南来改变所述应用的配置和过度控制。所述紧急情况指南优选地包含在实现信息中并且因此也可以随着每个实现信息而改变。紧急情况指南因此同样持久地存储在所述存储单元中并且因此在与编排主单元oma的通信连接失效的情况下在所述终端设备上可用。
52.然后,编排从属单元osl可以根据紧急情况指南启动至少一个紧急情况容器实体和/或停止所述应用的至少一个工作容器实体。例如,紧急情况指南可以根据自通信连接失效起经过的时间来停止各个、特别是非关键的工作容器实体并启动第一或其他紧急情况容器实体。
53.所述紧急情况指南可以包括不同的级别指南。级别指南因此形成由编排从属单元osl根据紧急情况的类型和持续时间而激活的指南分层结构,所述紧急情况又被分配给特定的紧急情况级别。除了通信连接失效的持续时间之外,还可以根据通信连接的失效类型和/或编排主单元oma的失效类型来确定紧急情况级别。例如,在通信连接本身失效的情况下可以存在或分配不同的紧急情况级别,而在编排主单元oma失效的情况下可以存在或分配另外的紧急情况级别。根据失效的持续时间或组合,可以分配其他不同的紧急情况级别。一个或多个紧急情况级别在此又可以分配给一个或多个级别指南。根据所述级别指南,可以启动其他紧急情况容器实体,或者可以在所确定的紧急情况级别的持续时间内将不同数量的资源分配给已经存在的紧急情况容器实体。
54.在通信连接本身重新建立或者编排主单元oma重新建立或可用之后,将在至少一个紧急情况容器实体中收集的数据传送到所述应用接口。由此,在失效时间期间在紧急情况容器实体中收集的数据不会丢失,并且可以由后端侧应用接口接收和分析或转发。在通信连接重新建立之后,在编排从单元osl中从编排主单元oma接收正常运行指南,并且所述终端设备转换到正常状态。然而,至少一个紧急情况指南在所述存储单元中仍然可用,使得在与编排主单元oma的连接重新中断时,所述应用可以由所述终端设备单独继续运行。
55.在图4中示出了用于编排基于容器的应用的系统的实施例。该系统包括终端设备20、与所述终端设备连接的应用接口10。该应用接口10包括编排主单元oma和特定于应用的单元app

if,在单元app

if中例如接收并进一步处理由所述终端设备上的应用确定的数据。应用接口10还包括发送和接收接口tr,其从终端设备20接收数据或将数据发送给终端设备20。该通信接口示例性地显示为无线电接口30。从逻辑上讲,应用接口10和终端设备20之间的通信可以分为基于容器的应用的编排主单元oma和编排从单元osl之间的通信,参见连接32,以及在例如终端设备20中的工作容器ac和应用接口10中的特定于应用的单元app

if之间的通信,参见31。
56.终端设备20包括编排从单元osl,其又将指令转发到运行时环境cre。运行时环境cre根据编排从设备osl的指令来配置和启动工作容器实体ac。如果存在紧急情况级别并且对应地紧急情况指南是活跃的,则配置和启动对应的紧急情况容器nc。
57.终端设备20还包括存储单元me,在该存储单元上持久存储了由编排从单元osl从编排主单元oma接收的实现信息。终端设备20可以是例如移动终端设备,例如安装或布置在汽车或火车中的终端设备。终端设备20也可以是自动化设施中的现场设备或其他组件,其经由有线连接(特别是有线数据网络)连接到控制设备,应用接口10布置在该控制设备中。通常,所述通信接口可以是无线电传输链路或者也可以是有线通信连接或光纤连接等。
58.图5示出了为了控制和配置基于容器的应用而在编排主单元oma和终端设备20之间交换的信息流。终端设备20中与基于容器的应用的管理相关的组件是编排从单元osl、运行时环境cre和存储单元me。实现信息di从编排主单元oma传送到终端设备20中的编排从单元osl。除了所述应用的正常运行所必需的信息anw之外,实现信息di还包括紧急情况指南nr和可选的紧急情况容器镜像nc。实现信息di在终端设备20中被接收之后持久地、即非易失性地存储在存储单元me中,参见40。
59.如果在终端设备20中确定通信连接失效或与编排主单元oma的连接失效,参见41,则编排从单元osl请求存储的实现信息di和特别是紧急情况指南nr和紧急情况容器镜像nc,参加42。此外,通过运行时环境cri基于紧急情况指南nr执行必需的紧急情况容器实体或在现有工作容器实体和紧急情况容器实体中执行配置改变。
60.紧急情况指南nr可以被构造为,使得借助于不同的紧急情况级别执行不同的紧急情况措施,根据连接失效的持续时间和类型分配所述不同的紧急情况级别。除了启动临时紧急情况容器实体之外,还可以在失效的持续时间内为紧急情况容器实体提供更大的资源,例如处理器时间或本地存储器。与紧急情况无关的和本地存储的容器镜像可以在用于对紧急情况容器实体的资源提供的时间间隔过去后加以删除,或者可以停止仍在进行的容器实体。这些措施同样由应急指南或对应的级别指南预给定。
61.一旦与网络的通信连接再次存在,就可以例如将收集并临时例如存储在紧急情况容器实体中的数据返回到所述应用接口。再次释放可用于紧急情况运行的资源。最后,必要时在编排从单元osl中从编排主单元oma接收更新的紧急情况指南,并且终端设备20转换到正常状态,参见43。
62.所描述的解决方案不需要布置在终端设备20本身上的编排主单元oma。由此可以节省终端设备20中的资源或可以将这些资源用于运行应用。通过所提出的紧急情况指南nr,可以在终端设备20上独立自主地并且根据失效的持续时间和类型采取紧急情况措施,并且例如可以为核心组件临时提供更大的资源或替代资源。在终端设备20上采取的安全措施可以是时间控制地(例如,随着失效持续时间的进展)通过紧急情况指南加强。保留了中央管理和软件提供机制。
63.在本发明的范围内,所有描述和/或示出的特征可以有利地相互组合。本发明不限于所描述的实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1