容器内文件日志挂载模块、系统和方法与流程

文档序号:15998972发布日期:2018-11-20 19:12阅读:312来源:国知局

本发明涉及容器内文件日志挂载技术,具体地涉及容器内文件日志挂载模块、系统和方法。



背景技术:

“容器”,一般称为container,container实际上是一个服务程序,可以被启动、开始、停止、删除等。每个container都是相互隔离的,可以在container中运行特定的应用程序,其包含特定的应用程序的代码及其所需要的依赖文件。可以把container看做一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

“容器群”,一般称为pod,是一组紧密关联的container群,一个pod中的container共享同一个IPC(进程间通信)、Network和UTS(通用时间系统)命名空间,是kubernetes调度的基本单位,其中kubernetes是一个在集群主机间进行自动化部署、扩展和容器操作的提供以容器为中心基础设施的开源平台,也简称为k8s。此外,pod的设计理念是支持多个container在一个pod中共享网络和文件系统,可以通过进程间通信IPC和文件共享这种简单高效的方式组合完成服务。

在kubernetes的每个节点(node)上都要运行一个worker对容器进行生命周期的管理,这个worker程序就是kubelet。

另外,deployment是为pod提供声明式更新,只需要在deployment中描述需要的目标状态是什么,deployment控制器(deployment controller)就会将pod的实际状态修改为所需要的目标状态。

现在市面上主要流行的日志方案是针对容器的标准输出的收集方案,但是对于容器内传统文件日志的采集处理变得比较困难。因为容器内文件日志挂载到宿主机上的目录路径是固定不变的,即程序员手动写死的,于是,一个deployment的多个pod运行在同一个宿主机上的时候,就会造成多个pod挂载冲突。



技术实现要素:

本发明的目的是提供一种容器内文件日志挂载模块、系统和方法,用于解决多个相同pod运行在一个宿主机上且指定固定挂载目录造成冲突的问题。

为了实现上述目的,本发明提供了一种容器内文件日志挂载模块,用于宿主机侧,该模块包括接收单元和处理单元,其中,所述接收单元,用于接收挂载信息,该挂载信息包括所述容器内的文件日志的配置参数,并将所述挂载信息发送给所述处理单元;所述处理单元,用于根据所述配置参数在所述宿主机上自定义目录路径,并将所述容器内的文件日志挂载至所述宿主机上的所述自定义目录路径下。

优选地,所述配置参数包括环境变量,所述处理单元用于根据所述环境变量将所述容器内的文件日志挂载至所述宿主机上的所述自定义目录路径下。

优选地,自定义目录路径包括:固定挂载目录以及在所述固定挂载目录下的非固定挂载目录;其中,所述非固定挂载目录包括容器群名称和容器名称,所述容器名称为所述容器群名称的子目录。

优选地,所述处理单元包括环境变量判断子单元和挂载子单元,其中,所述环境变量判断子单元,用于判断所述挂载信息是否包括所述环境变量,并将判断结果发送给所述挂载子单元;所述挂载子单元,用于接收上述判断结果,并在所述判断结果为包括所述环境变量时,将所述容器内的文件日志挂载至所述宿主机上的所述自定义目录路径下;在所述判断结果为不包括所述环境变量的情况下,将所述容器内的文件日志挂载至所述宿主机上的所述固定挂载目录的目录路径下。

优选地,所述处理单元进一步包括路径合法判断子单元,所述路径合法判断子单元用于接收所述环境变量判断子单元发送的所述判断结果,并在所述判断结果为包括所述环境变量时,判断所述环境变量中所标识的文件日志在所述容器内的目录路径是否合法;如果判断结果为合法,则将所述挂载信息发送给所挂载子单元;如果判断结果为不合法,则输出错误。

相应地,本发明还提供了一种容器内文件日志挂载系统,该系统包括:参数设置单元,用于在容器侧为待采集的、所述容器内的文件日志在所述容器内的目录路径设置配置参数,并发送给宿主机;以及上述的、用于宿主机侧的容器内文件日志挂载模块。

相应地,本发明还提供了一种容器内文件日志挂载方法,用于宿主机侧,该方法包括:接收挂载信息,该挂载信息包括所述容器内的文件日志的配置参数;以及根据所述配置参数在所述宿主机上自定义目录路径,并将所述容器内的文件日志挂载至所述宿主机上的所述自定义目录路径下。

优选地,所述配置参数包括环境变量,所述将所述容器内的文件日志挂载至所述宿主机上的所述自定义目录路径下包括:根据所述环境变量将所述容器内的文件日志挂载至所述宿主机上的所述自定义目录路径下。

优选地,自定义目录路径包括:固定挂载目录以及在所述固定挂载目录下的非固定挂载目录;其中,所述非固定挂载目录包括容器群名称和容器名称,所述容器名称为所述容器群名称的子目录。

优选地,所述将所述容器内的文件日志挂载至所述宿主机上的所述自定义目录路径下包括:在所述配置参数包括所述环境变量的情况下,将所述容器内的文件日志挂载至所述宿主机上的所述自定义目录路径下;或在所述配置参数不包括所述环境变量的情况下,将所述容器内的文件日志挂载至所述宿主机上的所述固定挂载目录的目录路径下。

优选地,在所述配置参数包括所述环境变量的情况下,在将所述容器内的文件日志挂载至所述宿主机上的所述自定义目录路径下之前,所述方法还包括:判断所述环境变量中所标识的文件日志在所述容器内的目录路径是否合法;如果判断结果为合法,则将所述容器内文件日志挂载至所述宿主机上的所述自定义挂载目录路径下;如果判断结果为不合法,则输出错误。

通过上述技术方案,本发明通过根据容器的配置参数来将容器内的文件日志挂载在宿主机上的自定义挂载目录路径下,从而保证了每个容器的文件日志挂载到宿主机上的目录路径都不同。

本发明实施例的其它特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施例,但并不构成对本发明实施例的限制。在附图中:

图1是本发明提供的、用于宿主机侧的容器内文件日志挂载模块的框图;

图2是本发明提供的、用于宿主机侧的容器内文件日志挂载过程的流程图;以及

图3是本发明提供的、用于宿主机侧的容器内文件日志挂载方法的流程图。

具体实施方式

以下结合附图对本发明实施例的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明实施例,并不用于限制本发明实施例。

在介绍本发明的具体技术方案之前,先介绍一下本发明所涉及到的几个概念:

图1是本发明提供的、用于宿主机侧的容器内文件日志挂载模块的框图,所述模块包括接收单元101和处理单元102,其中,接收单元101用于接收挂载信息,该挂载信息包括所述容器内的文件日志的配置参数,并将所述挂载信息发送给所述处理单元102;处理单元102用于根据所述配置参数在所述宿主机上自定义目录路径,并将所述容器内的文件日志挂载至所述宿主机上的所述自定义目录路径下。

其中,配置参数包括将所述容器内文件日志挂载到宿主机上所需要的参数,例如挂载到宿主机上所需的空间大小、挂载位置等,本发明中的配置参数包括环境变量,处理单元102用于根据所述环境变量将所述容器内文件日志挂载至所述宿主机上的所述自定义挂载目录路径下。环境变量的设置如下:如果容器内有文件日志需要采集,可以将容器内的该文件日志挂载出来,那么需要为容器内的该文件日志设置环境变量,环境变量例如为KUBERNETES_LOG=/var/log/nginx,其中KUBERNETES_LOG是环境变量。具体来说,处理单元102可以修改kubelet源代码,并通过修改kubelet源代码,将环境变量KUBERNETES_LOGS=/var/log/nginx所指示的值挂载到宿主机上的自定义挂载目录路径下,/var/log/nginx为文件日志在容器内的目录路径。其中kubelet的主要功能就是定时从某个地方获取节点上pod/container的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等等),并调用对应的容器平台接口达到这个状态。

自定义目录路径包括:在宿主机上的固定挂载目录和在所述固定挂载目录下的非固定挂载目录;其中,非固定挂载目录包括容器群名称和容器名称,容器名称为容器群名称的子目录。自定义挂载目录路径例如可以为/var/log/filelog/deployment-name/pod-name/container-name/。这里pod-name表示容器群名称,container-name表示容器名称,deployment-name是deployment的名称。如果利用现有挂载技术把容器内日志挂载到宿主机上,那么挂载到宿主机上的路径是手动写死的,这样的话一个deployment的多个pod运行在同一个宿主机上的时候会造成多个pod挂载冲突。而本发明通过修改kubernetes的方式,将容器内的文件日志挂载到宿主机上的自定义挂载目录路径下,自定义挂载目录路径例如为/var/log/filelog/deployment-name/pod-name/container-name/,从而解决了上述在同一个宿主机上运行多个pod产生挂载冲突的问题。其中,固定挂载目录为/var/log/filelog/deployment-name/,非固定挂载目录为/pod-name/container-name/。

在接收单元101接收到挂载信息的情况下,处理单元102就会为pod和container动态分配pod-name和container-name。具体来说,处理单元102包括环境变量判断子单元和挂载子单元,所述环境变量判断子单元,用于判断所述挂载信息是否包括所述环境变量,并将判断结果发送给所述挂载子单元;所述挂载子单元,用于接收上述判断结果,并在所述判断结果为包括所述环境变量时,将所述容器内的文件日志挂载至所述宿主机上的所述自定义目录路径下;在所述判断结果为不包括所述环境变量的情况下,将所述容器内的文件日志挂载至所述宿主机上的所述固定挂载目录的目录路径下。

以固定挂载目录为/var/log/filelog/deployment-name/、非固定挂载目录为/pod-name/container-name/为例,在接收单元101将接收到挂载信息发送给处理单元102后,处理单元102的环境变量判断子单元判断所述挂载信息中的容器内的文件日志的配置参数中是否包括环境变量KUBERNETES_LOG=/var/log/nginx,如果容器内的文件日志的配置参数中包括环境变量,则处理单元102的挂载子单元将容器内的文件日志挂载至宿主机上的自定义目录路径/var/log/filelog/deployment-name/pod-name/container-name/。如果容器内的文件日志的配置参数中不包括环境变量,则处理单元102的挂载子单元将容器内的文件日志挂载至目录路径/var/log/filelog/deployment-name/,这种情况是现有技术中的情况,这种情况有可能造成在宿主机上的固定挂载目录下存在多个名称一样的pod,那么这多个名称一样的pod在宿主机上就会产生冲突。

进一步,所述处理单元包括路径合法判断子单元,所述路径合法判断子单元用于接收所述环境变量判断子单元发送的所述判断结果,并在所述判断结果为包括所述环境变量时,判断所述环境变量中所标识的文件日志在所述容器内的目录路径是否合法;如果判断结果为合法,则将所述挂载信息发送给所挂载子单元;如果判断结果为不合法,则输出错误。也就是说在挂载之前首先要判断容器内的文件日志在容器内的目录路径是否合法,在合法的情况下才在宿主机上对容器内的该文件日志进行挂载。以上判断环境变量中所标识的文件日志在容器内的目录路径是否合法,主要是判断其格式是否符合规定格式,也就是说在目录路径符合规定格式的情况下则判断为合法,否则判断为不合法。具体判断方法为本领域常用技术,于此不予赘述。

图2是本发明提供的容器内文件日志挂载过程的流程图,图2所示的流程是宿主机上接收到挂载信息之后所执行的过程,如图2所示,该过程包括:

步骤201,判断包括在挂载信息中的容器内的文件日志的配置参数中是否有环境变量,即是否有KUBERNETES_LOG,若判断结果为是则执行步骤202,若判断结果为否,则执行步骤204。

步骤202,判断所要挂载的容器内的文件日志在容器内的目录路径是否合法,若判断结果为是,则执行步骤204,若判断结果为否,则执行步骤203。

步骤203,输出错误,进而结束流程。

步骤204,根据配置参数将容器内的文件日志挂载至宿主机上,在该步骤204中有两种情况:一种是在步骤201的判断结果为容器内的文件日志的配置参数中没有环境变量的情况下,则在该步骤204中在宿主机上将容器内的文件日志挂载至宿主机上的固定挂载目录的目录路径(/var/log/filelog/deployment-name/)下,一种是在步骤201的判断结果为容器内的文件日志的配置参数中有环境变量的情况下,则在该步骤204中将容器内文件日志挂载至宿主机上的自定义挂载目录路径(/var/log/filelog/deployment-name/pod-name/container-name/)下。

相应地,本发明还提供了一种容器内文件日志挂载系统,该系统包括参数设置单元(图中未示出)和以上所述的、用于宿主机侧的容器内文件日志挂载模块;其中参数设置单元用于在容器侧为将待采集的、所述容器内的文件日志在所述容器内的目录路径设置配置参数,例如设置环境变量。

本领域技术人员应当理解,在容器内的文件日志挂载到宿主机上以后,可以通过一些日志采集组件对文件日志进行采集,然后对所采集到的容器路径进行解析即可得到container所属的deployment-name、pod-name和container-name。具体采集的过程采用现有技术中的方法,于此不予赘述。

图3是本发明提供的容器内文件日志挂载方法的流程图,该容器内文件日志挂载方法用于宿主机侧,如图3所示,该方法包括:

步骤301,接收挂载信息,该挂载信息包括容器内文件日志的配置参数。

步骤302,根据配置参数在所述宿主机上自定义目录路径,得到自定义挂载目录路径。

步骤303,将容器内文件日志挂载至所述宿主机上的自定义挂载目录路径下。其中,所述配置参数包括环境变量,则步骤303包括:根据所述环境变量将所述容器内的文件日志挂载至所述宿主机上的所述自定义目录路径下。

优选的,步骤303包括:

在所述配置参数包括所述环境变量的情况下,判断所述环境变量中所标识的文件日志在所述容器内的目录路径是否合法;如果判断结果为合法,则将所述容器内文件日志挂载至所述宿主机上的所述自定义挂载目录路径下;如果判断结果为不合法,则输出错误;或

在所述配置参数不包括所述环境变量的情况下,将所述容器内的文件日志挂载至所述宿主机上的所述固定挂载目录的目录路径下。

应当说明的是,本发明提供的容器内文件日志挂载方法的具体细节及益处与图1所述的容器内文件日志挂载模块类似,于此不予赘述。

以上结合附图详细描述了本发明实施例的可选实施方式,但是,本发明实施例并不限于上述实施方式中的具体细节,在本发明实施例的技术构思范围内,可以对本发明实施例的技术方案进行多种简单变型,这些简单变型均属于本发明实施例的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本发明实施例对各种可能的组合方式不再另行说明。

本领域技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得单片机、芯片或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

此外,本发明实施例的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明实施例的思想,其同样应当视为本发明实施例所公开的内容。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1