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

容器事件监听方法、系统、电子设备、介质及程序产品

文献发布时间:2024-04-18 19:59:31


容器事件监听方法、系统、电子设备、介质及程序产品

技术领域

本公开涉及计算机技术领域,尤其涉及容器事件监听方法、系统、电子设备、介质及程序产品。

背景技术

在现代容器化环境中,大规模应用程序通常由多个容器组成,并在集群中的各个节点上运行。这些容器在运行过程中可能会出现各种异常情况,如内存溢出(OOM)、容器崩溃等。及时监控并处理这些异常状况对于系统的稳定性和可靠性至关重要。然而,传统的容器管理的事件只能够达到基本调度单元的级别,更细粒度的容器级事件监听与关联无法做到实时监控和即时通知。

发明内容

为了解决上述技术问题中的至少一个,本公开提供了容器事件监听方法、系统、电子设备、介质及程序产品。

本公开第一方面提出了一种容器事件监听方法,所述方法应用于容器编排系统,所述容器编排系统设置有至少一个目标节点,所述目标节点设置有至少一个基本调度单元,所述基本调度单元设置有至少一个容器,每个所述目标节点部署有监听单元和处理单元,所述监听单元和所述处理单元被设置为与对应的目标节点共享相同的命名空间,所述方法包括:通过所述监听单元对所述目标节点的容器运行时类别进行识别;对所述目标节点产生的目标事件进行监听和广播,所述目标事件为对应于识别到的所述容器运行时类别的容器事件,所述目标事件包含有对应容器的唯一标识;通过所述处理单元接收相应监听单元广播的目标事件;确定与所述唯一标识相对应的基本调度单元及其属性信息,所述属性信息包括所述基本调度单元所属的工作区;依据所述目标事件和所述属性信息生成容器类型的事件消息;以及将所述事件消息发送至所述容器编排系统的访问接口,以使用户能够监听到所述事件消息。

根据本公开的一个实施方式,所述容器编排系统为集群式容器编排系统,所述容器编排系统中的每个工作节点均为所述目标节点。

根据本公开的一个实施方式,所述监听单元和所述处理单元通过进程控制器部署于所述目标节点,以使所述监听单元和所述处理单元均与所述目标节点共享相同的命名空间。

根据本公开的一个实施方式,所述命名空间包括以下至少一项:网络命名空间,进程命名空间,通信命名空间。

根据本公开的一个实施方式,在对所述目标节点产生的目标事件进行监听和广播,包括:通过发送心跳消息建立所述监听单元与相应目标节点的容器之间的连接;以及如果连接建立成功,则开始对所述目标节点的容器产生的目标事件进行监听,并对监听到的目标事件进行实时广播。

根据本公开的一个实施方式,如果所述监听单元与相应目标节点的容器之间的连接建立失败,则将失败信息进行记录和反馈。

本公开第二方面提出了一种容器事件监听系统,所述容器事件监听系统应用于容器编排系统,所述容器编排系统设置有至少一个目标节点,所述目标节点设置有至少一个基本调度单元,所述基本调度单元设置有至少一个容器,所述容器事件监听系统包括:监听单元,所述监听单元部署于每个所述目标节点并被设置为与对应的目标节点共享相同的命名空间,所述监听单元用于对所述目标节点的容器运行时类别进行识别,对所述目标节点产生的目标事件进行监听和广播,其中,所述目标事件为对应于识别到的所述容器运行时类别的容器事件,所述目标事件包含有对应容器的唯一标识;以及处理单元,所述处理单元部署于每个所述目标节点并被设置为与对应的目标节点共享相同的命名空间,所述监听单元用于接收相应监听单元广播的目标事件,确定与所述唯一标识相对应的基本调度单元及其属性信息,依据所述目标事件和所述属性信息生成容器类型的事件消息,将所述事件消息发送至所述容器编排系统的访问接口,以使用户能够监听到所述事件消息,其中,所述属性信息包括所述基本调度单元所属的工作区。

本公开第三方面提出了一种电子设备,包括:存储器,所述存储器存储执行指令;以及处理器,所述处理器执行所述存储器存储的执行指令,使得所述处理器执行上述任一实施方式所述的容器事件监听方法。

本公开第四方面提出了一种可读存储介质,所述可读存储介质中存储有执行指令,所述执行指令被处理器执行时用于实现上述任一实施方式所述的容器事件监听方法。

本公开第五方面提出了一种计算机程序产品,包括计算机程序/指令,其特征在于,所述计算机程序/指令被处理器执行时实现上述任一实施方式所述的容器事件监听方法。

附图说明

附图示出了本公开的示例性实施方式,并与其说明一起用于解释本公开的原理,其中包括了这些附图以提供对本公开的进一步理解,并且附图包括在本说明书中并构成本说明书的一部分。

图1是根据本公开的一个实施方式的容器事件监听方法的流程示意图。

图2是根据本公开的一个实施方式的在K8s系统的结构示意图。

图3是根据本公开的一个实施方式的对目标节点产生的目标事件进行监听的流程示意图。

图4是根据本公开的另一个实施方式的对目标节点产生的目标事件进行监听的流程示意图。图5是根据本公开的一个实施方式的采用处理系统的硬件实现方式的容器事件监听系统的示意图。

具体实施方式

下面结合附图和实施方式对本公开作进一步的详细说明。可以理解的是,此处所描述的具体实施方式仅用于解释相关内容,而非对本公开的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本公开相关的部分。

需要说明的是,在不冲突的情况下,本公开中的实施方式及实施方式中的特征可以相互组合。下面将参考附图并结合实施方式来详细说明本公开的技术方案。

除非另有说明,否则示出的示例性实施方式/实施例将被理解为提供可以在实践中实施本公开的技术构思的一些方式的各种细节的示例性特征。因此,除非另有说明,否则在不脱离本公开的技术构思的情况下,各种实施方式/实施例的特征可以另外地组合、分离、互换和/或重新布置。

本文使用的术语是为了描述具体实施例的目的,而不是限制性的。如这里所使用的,除非上下文另外清楚地指出,否则单数形式“一个(种、者)”和“所述(该)”也意图包括复数形式。此外,当在本说明书中使用术语“包含”和/或“包括”以及它们的变型时,说明存在所陈述的特征、整体、步骤、操作、部件、组件和/或它们的组,但不排除存在或附加一个或更多个其它特征、整体、步骤、操作、部件、组件和/或它们的组。还要注意的是,如这里使用的,术语“基本上”、“大约”和其它类似的术语被用作近似术语而不用作程度术语,如此,它们被用来解释本领域普通技术人员将认识到的测量值、计算值和/或提供的值的固有偏差。

下面以参考附图描述本公开的容器事件监听方法、系统、电子设备、介质及程序产品。

本实施方式的容器事件监听方法M10应用于容器编排系统,容器编排系统设置有至少一个目标节点,目标节点设置有至少一个基本调度单元,基本调度单元设置有至少一个容器,每个目标节点部署有监听单元和处理单元,监听单元和处理单元被设置为与对应的目标节点共享相同的命名空间。

容器(container)是运行在宿主机上的一种进程,每个容器中运行有应用程序。多个容器之间使用的是同一个宿主机的操作系统内核。

容器编排系统用于完成容器编排相关的任务,能够管理多个宿主机上的容器化的应用。容器编排系统可以采用Kubernetes(以下简称K8s)。

节点(node)是容器编排系统中最小的计算硬件单元,一个K8s集群中设置有一个或多个节点。在集群中,一个节点可以代表一个宿主机,一个宿主机对应有一个内核。

基本调度单元(pod)是容器编排系统的最小部署单元,其中包含了一个或多个容器。一个节点设置有一个或多个的pod。

命名空间(namespace)是内核的命名空间,即容器编排系统底层的命名空间,命名空间能够对网络、进程、通信等进行资源上的隔离。

用户通过传统的方式获取到的K8s事件最低只能够达到pod级,即用户能够获取到的最底层级别的事件为pod级,更细粒度的容器级事件监听与关联往往需要用户进行主动查询或轮询,无法做到实时监控和即时通知。

图1是根据本公开的一个实施方式的容器事件监听方法的流程示意图。参阅图1,本实施方式的容器事件监听方法M10可以包括以下步骤S100、步骤S200、步骤S300、步骤S400和步骤S500。

S100,通过监听单元对目标节点的容器运行时类别进行识别。

S200,对目标节点产生的目标事件进行监听和广播,目标事件为对应于识别到的容器运行时类别的容器事件,目标事件包含有对应容器的唯一标识。

S300,通过处理单元接收相应监听单元广播的目标事件。

S400,确定与唯一标识相对应的基本调度单元及其属性信息,属性信息包括基本调度单元所属的工作区。

S500,依据目标事件和属性信息生成容器类型的事件消息。

S600,将事件消息发送至容器编排系统的访问接口,以使用户能够监听到事件消息。

根据本公开的实施方式提出的容器事件监听方法,能够监听到容器编排系统中每个目标节点上产生的容器事件,并通过容器事件和相应基本调度单元的属性信息形成能够被容器编排系统识别且能够被用户侧监听到的事件消息,以便于用户能够通过监听事件消息来及时了解基本调度单元中容器的异常状况,使得用户能够实时监控和处理容器发生的异常,提高容器编排系统的可靠性和稳定性。

容器运行时用于进行容器的创建、运行、销毁等工作,当K8s运行一个容器时会调用容器运行时来进行上述工作。每个节点上均设置有容器运行时,不同的容器运行时对应不同的命名空间。

K8s支持多种容器运行时,例如Docker和ContainerD。容器编排系统可以为集群式容器编排系统,容器编排系统中的每个工作节点可以均为目标节点。K8s集群的节点的容器运行时既可以采用Docker,也可以采用ContainerD。

图2是根据本公开的一个实施方式的在K8s系统的结构示意图。参阅图2,K8s系统当前包括有3个工作节点,该3个工作节点均为目标节点,分别为node1、node2和node3。其中,目标节点node1的容器运行时为ContainerD,目标节点node2和node3的容器运行时为Docker。3个目标节点各设置有1个基本调度单元pod,分别为pod1、pod2和pod3。图中的填充有斜线的方框为容器,基本调度单元pod1和pod3中各设置有2个容器,pod2中设置有1个容器。

3个节点node各自部署有一个监听处理单元,分别为U1、U2和U3。每个监听处理单元包括一个监听单元和一个处理单元,图中未示出监听处理单元的具体组成。监听单元和处理单元的部署方式可以是:通过进程控制器部署于目标节点,以使监听单元和处理单元均与目标节点共享相同的命名空间。

进程控制器(DaemonSet)能够将服务部署到各个节点上,对节点node上的基本调度单元pod进行配置。在目标节点node1、node2和node3上分别部署监听处理单元U1、U2和U3,使得监听处理单元能够与宿主机使用相同的命名空间。

命名空间可以包括以下至少一项:网络命名空间,进程命名空间,通信命名空间。网络命名空间又称net命名空间,能够隔离网络端口、设备和协议栈,使得每个命名空间有独立的网络设备、IP地址和路由表。进程命名空间又称pid命名空间,能够隔离不同用户的进程,每个pid命名空间中可以有相同的pid。通信命名空间又称ipc命名空间,能够隔离进程间通信,每个ipc资源对应有一个唯一的32位id。

在完成监听处理单元的部署后,监听处理单元U1的监听单元对自身所在的节点node1进行容器运行时类型的识别,识别出node1的运行时为ContainerD类型。依次类推,监听处理单元U2的监听单元识别出node2的运行时为Docker,监听处理单元U3的监听单元识别出node3的运行时同样为Docker。

监听单元能够监听到Docker/ContainerD所支持的所有容器在命名空间下的事件。在识别出容器运行时之后,各监听单元可以开始监听自身所在的目标节点的目标事件。对于节点node1来说,监听单元监听ContainerD类型的容器事件,对于节点node2和node3来说,监听单元监听Docker类型的容器事件。

容器事件指的是容器发生的事件,主要包括了容器状态发生变化时产生的事件,例如容器的创建(创建资源空间、创建网络等)、容器的销毁和容器在运行时产生的事件(内存溢出等)。监听单元在监听到容器事件后会对容器事件进行广播,以使处理单元获取到该容器事件。假设节点node2的容器发生内存溢出,则会产生相应的内存溢出事件,监听单元能够监听到该内存溢出事件并广播。

图3是根据本公开的一个实施方式的对目标节点产生的目标事件进行监听的流程示意图。参阅图3,步骤S200可以包括以下步骤S210和步骤S220。

S210,通过发送心跳消息建立监听单元与相应目标节点的容器之间的连接。

S220,如果连接建立成功,则开始对目标节点的容器产生的目标事件进行监听,并对监听到的目标事件进行实时广播。

以节点node1为例,监听处理单元U1的监听单元在开始监听之前,先与节点node1中的2个容器分别建立连接。建立连接的方式可以是发送心跳消息。当能够与2个容器保持心跳时,说明与2个容器之间的连接建立成功,从而能够正确监听到容器事件并进行广播。

图4是根据本公开的另一个实施方式的对目标节点产生的目标事件进行监听的流程示意图。参阅图4,步骤S200还可以包括步骤S230。

S230,如果监听单元与相应目标节点的容器之间的连接建立失败,则将失败信息进行记录和反馈。

连接建立失败时,可能的原因包括:该容器不是Docker和ContainerD,或命名空间存在错误。此时可以在控制台日志上输出连接失败的记录。

监听处理单元中的处理单元能够在监听单元广播目标事件时接收到目标事件的信息。目标事件是对应于目标节点中的某个容器的,因此目标事件的信息中包含有容器的唯一标识。该标识可以是容器的ID,即ContainerId。Docker和ContainerD均具有唯一的ContainerId,一个ContainerId唯一对应一个容器。通过ContainerId确定出产生该目标事件的pod以及该pod的命名空间等属性信息。

确定出目标事件的pod及其属性信息的实施主体可以是通过K8s的访问接口。访问接口对应于Kubernetes API Server,API Server能够对K8s系统进行监听操作。通过APIServer获取到关联pod(与容器关联的pod)及pod所在的工作区。工作区是再K8s系统中对pod进行工作环境划分后得到,通过对pod进行工作区划分,便于pod的分类和管理。例如,监听单元监听到pod1中的某容器产生了内存溢出事件并进行了广播,处理单元获取到该事件后,确定出该事件是pod1中的容器产生的,并获取到pod1所在的工作区。

之后,处理单元依据目标事件的信息和获取到的pod相关信息构造Container类型的Kubernetes event消息,从而将容器的事件转换为K8s的事件。event消息为一个结构体或对象,其中包含了Docker/Containerd的容器事件信息,以及pod本身的信息。这些信息组合成一个能够被K8s识别的对象。

K8s本身具有一套设定的事件管理系统,通过将Container类型加入到该事件管理系统中,使得该消息能够被用户侧通过调用API Server来监听,用户通过监听pod中的Container类型事件信息来监听容器动态,即可实时查看容器事件并进行相应的操作,例如记录日志、触发警报等,使得用户能够监听到相较于pod事件来说更为底层的容器事件的消息,从而无需主动查询即可及时了解到pod中容器的异常状况。

通过与宿主主机共享命名空间的方式能够实时监听到Docker和ContainerD的容器事件,满足了用户对容器事件监听的实时性要求。通过将事件信息发送到相应的环境Pod中,用户可以及时了解容器的异常状况,并采取相应的措施,提高系统的可靠性和稳定性。通过根据事件的类型和相关信息选择性地将事件发送到指定的Pod中,使用户能够根据需求定制事件通知方式,满足了用户对灵活性的要求。

图5是根据本公开的一个实施方式的采用处理系统的硬件实现方式的容器事件监听系统的示意图。参阅图5,本实施方式的容器事件监听系统1000应用于容器编排系统,容器编排系统设置有至少一个目标节点,目标节点设置有至少一个基本调度单元,基本调度单元设置有至少一个容器。容器编排系统可以为集群式容器编排系统,容器编排系统中的每个工作节点可以均为目标节点。

容器事件监听系统1000可以包括监听单元1002和处理单元1004。

监听单元1002部署于每个目标节点并被设置为与对应的目标节点共享相同的命名空间,监听单元用于对目标节点的容器运行时类别进行识别,对目标节点产生的目标事件进行监听和广播,其中,目标事件为对应于识别到的容器运行时类别的容器事件,目标事件包含有对应容器的唯一标识。

处理单元1004部署于每个目标节点并被设置为与对应的目标节点共享相同的命名空间,监听单元用于接收相应监听单元广播的目标事件,确定与唯一标识相对应的基本调度单元及其属性信息,依据目标事件和属性信息生成容器类型的事件消息,将事件消息发送至容器编排系统的访问接口,以使用户能够监听到事件消息,其中,属性信息包括基本调度单元所属的工作区。

监听单元1002和处理单元1004可以通过进程控制器部署于目标节点,以使监听单元1002和处理单元1004均与目标节点共享相同的命名空间。命名空间可以包括以下至少一项:网络命名空间,进程命名空间,通信命名空间。

监听单元1002对目标节点产生的目标事件进行监听和广播的方式可以包括:通过发送心跳消息建立监听单元1002与相应目标节点的容器之间的连接;以及如果连接建立成功,则开始对目标节点的容器产生的目标事件进行监听,并对监听到的目标事件进行实时广播。如果监听单元1002与相应目标节点的容器之间的连接建立失败,则将失败信息进行记录和反馈。

需要说明的是,本实施方式的容器事件监听系统1000中未披露的细节,可参照本公开提出的上述实施方式的容器事件监听方法M10中所披露的细节,此处不再赘述。

该系统1000可以包括执行上述流程图中各个或几个步骤的相应模块。因此,可以由相应模块执行上述流程图中的每个步骤或几个步骤,并且该系统可以包括这些模块中的一个或多个模块。模块可以是专门被配置为执行相应步骤的一个或多个硬件模块、或者由被配置为执行相应步骤的处理器来实现、或者存储在计算机可读介质内用于由处理器来实现、或者通过某种组合来实现。

该硬件结构可以利用总线架构来实现。总线架构可以包括任何数量的互连总线和桥接器,这取决于硬件的特定应用和总体设计约束。总线1100将包括一个或多个处理器1200、存储器1300和/或硬件模块的各种电路连接到一起。总线1100还可以将诸如外围设备、电压调节器、功率管理电路、外部天线等的各种其他电路1400连接。

总线1100可以是工业标准体系结构(ISA,Industry Standard Architecture)总线、外部设备互连(PCI,Peripheral Component)总线或扩展工业标准体系结构(EISA,Extended Industry Standard Component)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,该图中仅用一条连接线表示,但并不表示仅有一根总线或一种类型的总线。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本公开的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本公开的实施方式所属技术领域的技术人员所理解。处理器执行上文所描述的各个方法和处理。例如,本公开中的方法实施方式可以被实现为软件程序,其被有形地包含于机器可读介质,例如存储器。在一些实施方式中,软件程序的部分或者全部可以经由存储器和/或通信接口而被载入和/或安装。当软件程序加载到存储器并由处理器执行时,可以执行上文描述的方法中的一个或多个步骤。备选地,在其他实施方式中,处理器可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行上述方法之一。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,可以具体实现在任何可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。

应当理解,本公开的各部分可以用硬件、软件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

本技术领域的普通技术人员可以理解实现上述实施方式方法的全部或部分步骤是可以通过程序来指令相关的硬件完成,该程序可以存储于一种可读存储介质中,该程序在执行时,包括方法实施方式的步骤之一或其组合。该存储介质可以是易失性/非易失性存储介质。

此外,在本公开各个实施方式中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个可读存储介质中。存储介质可以是只读存储器,磁盘或光盘等。

本公开还提供了一种电子设备,包括:存储器,存储器存储执行指令;以及处理器或其他硬件模块,处理器或其他硬件模块执行存储器存储的执行指令,使得处理器或其他硬件模块执行上述实施方式的容器事件监听方法。

本公开还提供了一种可读存储介质,可读存储介质中存储有执行指令,所述执行指令被处理器执行时用于实现上述任一实施方式的容器事件监听方法。

就本说明书而言,“可读存储介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。可读存储介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式只读存储器(CDROM)。另外,可读存储介质甚至可以是可在其上打印程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得程序,然后将其存储在存储器中。

本公开还提供了一种计算机程序产品,包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现上述任一实施方式的容器事件监听方法。

在本说明书的描述中,参考术语“一个实施方式/方式”、“一些实施方式/方式”、“具体示例”、或“一些示例”等的描述意指结合该实施方式/方式或示例描述的具体特征、结构、材料或者特点包含于本公开的至少一个实施方式/方式或示例中。在本说明书中,对上述术语的示意性表述不必须是相同的实施方式/方式或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施方式/方式或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施方式/方式或示例以及不同实施方式/方式或示例的特征进行结合和组合。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本公开的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

本领域的技术人员应当理解,上述实施方式仅仅是为了清楚地说明本公开,而并非是对本公开的范围进行限定。对于所属领域的技术人员而言,在上述公开的基础上还可以做出其它变化或变型,并且这些变化或变型仍处于本公开的范围内。

相关技术
  • 一种烟支含丝量的计算模型及其应用的烟支稳定性的控制方法
  • 一种基于烟丝渗透系数设计烟支净含丝量的方法
  • 一种烟支含丝量的计算模型及其应用的烟支稳定性的控制方法
技术分类

06120116522818