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

基于Kubernetes的计算任务管理方法、系统及介质

文献发布时间:2024-04-18 19:58:53


基于Kubernetes的计算任务管理方法、系统及介质

技术领域

本发明涉及大数据云平台技术领域,尤其是涉及一种基于Kubernetes的计算任务管理方法、系统及介质。

背景技术

随着大数据技术的快速发展和云计算的普及应用、公司业务不断发展,需要承载业务的服务不断细化。利用大数据处理框架来处理和分析海量数据的需求越来越迫切。其中Flink作为一种流式分布式计算处理引擎,具备高效的数据处理能力和容错机制,已经成为大数据实时处理的热门选择。同时,Kubernetes(通常简称K8s)是一个开源的容器编排和管理平台,用于自动化容器化应用程序的部署、扩展和运维,伴随着容器技术的发展,成为了目前云时代的操作系统。作为一个开源生态系统的容器编排平台,在分布式计算中具有广泛的应用。

目前,Kubernetes场景下并没有提供容器日志的收集与展示,实时计算任务运行失败或结束后所有Pod都会退出,同时任务日志也会被立即清理,导致无法进行日志的查看,这给任务运行状态及任务问题的定位带来困难。并且由于网络延迟和节点故障,任务状态可能会受到影响,进一步影响任务的运行状态。如果没有这些任务运行日志,实时计算任务状态管理面临一些挑战,几乎很难知道运行状态以及任务为何会失败。此外,实时计算任务分散在不同的容器中,且容器会动态地进行伸缩,导致状态分布在多个物理节点中,难以进行统一的状态管理,这将无法快速有效的响应和定位任务的运维工作。

发明内容

鉴于以上所述的现有技术的缺点,本发明的目的是提供一种基于Kubernetes的计算任务管理方法、系统及介质,提供了容器日志的收集与展示,实时计算任务的管理以及告警。

为实现上述目的,本发明采用如下技术方案。

第一方面,本发明提供的一种基于Kubernetes的计算任务管理方法,采用如下的技术方案:

一种基于Kubernetes的计算任务管理方法,包括:

通过节点控制器在所述Kubernetes的每个节点上部署日志采集工具以采集所有容器的日志文件,并将所述日志文件写入Kafka的topic主题中;

通过Flink Kubernetes运算符,在Kubernetes集群上部署Flink任务;

通过所述Flink任务,基于预设的告警规则对所述日志文件进行告警。

进一步的,上述一种基于Kubernetes的计算任务管理方法中,还包括:

将所述Kubernetes中的Ingress资源配置为充当Flink Web界面和/或Flink RestAPI的访问代理,以使所述Flink Web界面和/或Flink Rest API能够通过定义的域名和/或路径对外提供访问。

进一步的,上述一种基于Kubernetes的计算任务管理方法中,所述通过节点控制器在所述Kubernetes的每个节点上部署日志采集工具以采集所有容器的日志文件,并将所述日志文件写入Kafka的topic主题中,包括:

将所述日志采集工具及其对应的配置文件打包到所述Kubernetes的Docker容器镜像中,所述配置文件包括数据采集源配置和数据输出源配置;

将DaemonSet的配置文件部署到Kubernetes集群,以触发DaemonSet控制器在每个节点上部署日志采集工具的容器,其中所述配置文件用于定义日志采集工具的部署信息;

获取所述日志文件,并写入Kafka的topic主题中。

进一步的,上述一种基于Kubernetes的计算任务管理方法中,所述日志采集工具配置为ilogtail应用。

进一步的,上述一种基于Kubernetes的计算任务管理方法中,所述通过FlinkKubernetes运算符,在Kubernetes集群上部署Flink任务,包括:

通过所述Kubernetes集群获取Flink任务的配置YAML文件;

基于所述YAML文件,创建Flink Cluster资源,所述Flink Cluster资源用于获取自定义资源;基于所述自定义资源,调用Kubernetes API Server来创建底层资源。

进一步的,上述一种基于Kubernetes的计算任务管理方法中,所述通过FlinkKubernetes运算符,在Kubernetes集群上部署Flink任务,还包括:

获取所述YAML文件中的任务重启策略,并基于所述任务重启策略重启未执行成功的任务。

进一步的,上述一种基于Kubernetes的计算任务管理方法中,所述通过FlinkKubernetes运算符,在Kubernetes集群上部署Flink任务,还包括:

监听所述底层资源,并在所述底层资源出现异常时自动修复所述Flink Cluster。

进一步的,上述一种基于Kubernetes的计算任务管理方法中,所述通过所述Flink任务,基于预设的告警规则对所述日志文件进行告警,包括:

使用所述Flink任务进行实时计算和筛选,过滤出ERROR级别的日志并统计其出现次数;基于预设的告警规则,触发告警机制;

触发所述告警机制后,生成告警内容,并使用告警通知工具异步发送所述告警内容。

进一步的,上述一种基于Kubernetes的计算任务管理方法中,所述告警规则包括ERROR级别的日志的出现次数高于错误次数阈值。

进一步的,上述一种基于Kubernetes的计算任务管理方法中,所述将所述Kubernetes中的Ingress资源配置为充当Flink Web界面和/或Flink Rest API的访问代理,包括:

获取Ingress资源配置的自定义规则,所述自定义规则包括主机域名、路径以及后端服务;运行的Ingress Controller控制器监听所述自定义规则的变化;

将生成的代理配置应用到反向代理服务中,用于接收外部请求并根据Ingress规则代理流量到相应的Flink Web界面和/或Flink Rest API服务。

第二方面,本发明提供的一种基于Kubernetes的计算任务管理系统,采用如下的技术方案:

一种基于Kubernetes的计算任务管理系统,包括:

日志数据采集模块,至少用于通过节点控制器在所述Kubernetes的每个节点上部署日志采集工具以采集所有容器的日志文件,并将所述日志文件写入Kafka的topic主题中;

实时计算任务模块,至少用于通过Flink Kubernetes运算符,在Kubernetes集群上部署Flink任务;

异常日志告警模块,至少用于通过所述Flink任务,基于预设的告警规则对所述日志文件进行告警。

进一步的,上述一种基于Kubernetes的计算任务管理系统,还包括:

对外暴露服务模块,至少用于将所述Kubernetes中的Ingress资源配置为充当Flink Web界面和/或Flink Rest API的访问代理,以使所述Flink Web界面和/或FlinkRest API能够通过定义的域名和/或路径对外提供访问。

第三方面,本发明提供的一种可读存储介质,采用如下的技术方案:

一种可读存储介质,所述可读存储介质存储有计算机指令,所述计算机指令被处理器执行时实现如上述第一方面中任一项所述的一种基于Kubernetes的计算任务管理方法。

综上所述,与现有技术相比,本发明包括以下至少一种有益技术效果:

1、本发明解决了Kubernetes场景下没有提供容器日志的收集的功能,实现基于Kubernetes实时计算任务全流程状态管理;

2、本发明实现了基于Kubernetes实时计算任务服务暴露方法,解决了云原生容器服务的任意端口暴露问题,实现了自动化的服务对外暴露,能够便捷的在集群外部直接访问集群内部的服务。

3、本发明各功能组件和模块均可部署在云端,可根据实际应用对各功能组件和模块分别进行定制化改造,灵活适配,部署应用。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一种基于Kubernetes的计算任务管理方法的一具体实施例的流程框图。

图2是本发明一种基于Kubernetes的计算任务管理方法的另一具体实施例的流程框图。

图3是本发明一种基于Kubernetes的计算任务管理方法的一个应用场景的实施流程示意图

图4是本发明一种基于Kubernetes的计算任务管理系统的一具体实施例的结构示意图。

图5是本发明日志数据采集模块的一具体实施例的实施流程示意图。

图6是本发明实时计算任务模块的一具体实施例的实施流程示意图。

图7是本发明异常日志告警模块的一具体实施例的实施流程示意图。

图8是本发明对外暴露服务模块的一具体实施例的实施流程示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。此外,应当理解的是,此处所描述的具体实施方式仅用于说明和解释本申请,并不用于限制本申请。

需要说明的是,以下实施例的描述顺序不作为对本申请实施例优选顺序的限定。且在以下实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

本发明实施例中所述的方法步骤,其执行顺序可以按照具体实施方式中所述的顺序执行,也可以根据实际需要,在能够解决技术问题的前提下,调整各步骤的执行顺序,在此不一一列举。

以下结合附图1-8对本发明作进一步详细说明。

参照图1,本发明实施例提供了一种基于Kubernetes的计算任务管理方法,包括:S1,通过节点控制器在所述Kubernetes的每个节点上部署日志采集工具以采集所有容器的日志文件,并将所述日志文件写入Kafka的topic主题中;

S2,通过Flink Kubernetes运算符,在Kubernetes集群上部署Flink任务;

S3,通过所述Flink任务,基于预设的告警规则对所述日志文件进行告警。

具体的,本发明首先通过节点控制器在Kubernetes集群的每个节点上部署日志采集工具,用于收集容器的日志文件,并将这些日志文件发送到Kafka的特定topic中。随后,利用Flink Kubernetes运算符在Kubernetes集群中部署Flink任务,简化了任务的部署过程,无需手动配置和管理集群。最后,通过Flink任务,根据预设的告警规则对采集的日志文件进行实时告警,通常是筛选出ERROR级别的日志并根据滑动时间窗口统计错误日志出现的次数,当达到预设阈值时发出告警通知,以便及时处理计算任务的异常状态。这一方法实现了计算任务全流程状态管理、日志采集和实时告警的一体化管理。

进一步的,作为本发明的一种实施方式,参照图2,所述计算任务管理方法还包括:S4,将所述Kubernetes中的Ingress资源配置为充当Flink Web界面和/或Flink Rest API的访问代理,以使所述Flink Web界面和/或Flink Rest API能够通过定义的域名和/或路径对外提供访问。

具体的,在步骤S4中,首先通过配置Kubernetes中的Ingress资源,定义规则将外部的请求路由到Flink Web界面和/或Flink Rest API服务,可通过设置域名和路径的映射规则,以确保外部用户可以通过特定的域名和路径访问这些服务。这样,用户可以方便地通过浏览器或API请求访问Flink Web界面以监控任务进展情况和Flink Rest API以与计算任务进行交互,从而提高了计算任务管理的便捷性和可用性。

本发明实现了Kubernetes环境实时计算任务的日志信息收集、存储及使用,方便用户快速、高效获取和分析Flink任务提交、状态更新信息的查看,定位Kubernetes中实时计算任务的运行异常状态,提高定位问题的效率。

此外,本发明通过Kubernetes创建的Ingress资源代理到任务的目标Service,可以实现将Kubernetes的Pod服务暴露到公网、无传输协议限制、无端口号限制、Pod IP漂移后自动绑定,用户直接使用域名访问Flink Web UI页面。通过Ingress路由规则可以实现动态配置服务不需要额外的操作,同时减少不必要的端口暴露。实现了自动化的服务对外暴露,能够便捷的实现在集群外部直接访问集群内部的服务。该方法不仅有效简化部署,节省人力物力成本,还能快速有效的响应实时任务的运维工作。

进一步的,作为本发明的一种实施方式,步骤S1,通过节点控制器在所述Kubernetes的每个节点上部署日志采集工具以采集所有容器的日志文件,并将所述日志文件写入Kafka的topic主题中,包括:

将所述日志采集工具及其对应的配置文件打包到所述Kubernetes的Docker容器镜像中,所述配置文件包括数据采集源配置和数据输出源配置;

将DaemonSet的配置文件部署到Kubernetes集群,以触发DaemonSet控制器在每个节点上部署日志采集工具的容器,其中所述配置文件用于定义日志采集工具的部署信息;

获取所述日志文件,并写入Kafka的topic主题中。

具体的,首先,将所需的日志采集工具及其相关配置文件打包成一个Docker容器镜像,其中配置文件包括数据采集源配置和数据输出源配置。这确保了采集工具与其配置信息一起在一个容器中运行,并可以轻松地在Kubernetes集群中部署。其次,将DaemonSet的配置文件部署到Kubernetes集群,这些配置文件包括了日志采集工具的部署信息,如容器数量、部署策略等。这会触发DaemonSet控制器在每个节点上自动部署具有所需配置的日志采集工具容器,确保每个节点都有一个工作的采集工具实例。最后,一旦容器运行,日志采集工具会获取容器内部的日志文件,并将它们写入指定的Kafka topic主题中。这将实现对容器日志的实时采集和中转,以供后续分析和告警使用。整个过程确保了日志的高效、自动化采集和传输,以满足计算任务管理和监控的需求。

进一步的,作为本发明的一种实施方式,所述日志采集工具配置为ilogtail应用。

ilogtail是一种专门用于日志采集的应用程序,它具有轻量级、高性能、自动化配置等生产级特性,使其非常适合用于日志采集任务。ilogtail可以配置以采集特定数据源的日志,并将这些日志发送到指定的目标,如Kafka。配置ilogtail应用的具体内容包括数据采集源(inputs)的配置,其中Type类型被指定为file_log,以及数据输出源(flushers)的配置,其中Type类型被指定为flusher_kafka。这些配置确保ilogtail应用能够准确地采集容器日志,并将其发送到Kafka的topic主题中。这个配置过程可帮助实现高效的日志采集和数据传输,以便后续的分析和监控。ilogtail应用的轻量级特性也确保了它可以高效地部署在Kubernetes集群的每个节点上,以采集所有容器的日志文件。

需要指出的是,本发明实施例中提到的ilogtail应用是一个示例,实际上也可以使用其他日志采集工具来执行相似的任务,如Filebeat、Fluentd、Logstash、SplunkUniversal Forwarder、rsyslog等。关键是确保选择的日志采集工具能够满足需要,包括高性能、自动化配置、数据源输入和输出的有效配置等特性,以便进行日志采集和传输。在不同情况下,可以根据具体需求选择适合的日志采集工具,以实现所需的日志管理和监控。

示例性的,本发明所述的通过节点控制器在所述Kubernetes的每个节点上部署日志采集工具以采集所有容器的日志文件,并将所述日志文件写入Kafka的topic主题中,具体为:

创建基于Kubernetes的ilogtail应用,需要包括采集源inputs配置,Type类型指定为file_log,数据输出源flushers配置,Type类型指定为flusher_kafka即可。通过DaemonSet控制器在每个节点上部署日志采集Agent负责采集所有容器的日志。在这种方式下,日志采集Agent通常以一个能访问节点上所有日志的容器存在。通常生产集群有很多节点,每个节点都需要部署一个采集Agent。面对这种情况,最简单的部署方式是直接只用Kubernetes提供的Deployment进行容器编排。DaemonSet Controller会定期检查节点的变化情况,并自动保证每个节点上有且只有一个采集Agent容器。Kubernetes集群的底层运行环境是Docker,每个节点上Pod的容器,都是以Docker容器的形式存在于机器上的,包括Pod内部的目录,也是映射到具体节点的一个指定路径下的,这个目录路径是有规则的,根据这个规则去获取每个物理节点上相应目录下匹配*.log规则日志文件统一采集写入Kafka某个topic主题中。

进一步的,作为本发明的一种实施方式,步骤S2,通过Flink Kubernetes运算符,在Kubernetes集群上部署Flink任务,包括:

通过所述Kubernetes集群获取Flink任务的配置YAML文件;

基于所述YAML文件,创建Flink Cluster资源,所述Flink Cluster资源用于获取自定义资源;基于所述自定义资源,调用Kubernetes API Server来创建底层资源。

具体的,本发明步骤S2的一种实施方式中,首先,通过所述Kubernetes集群获取Flink任务的配置YAML文件,这个文件包含了Flink任务的配置信息,如JobManager规格、TaskManager和TaskSlot数量等。接下来,基于上述YAML文件,创建Flink Cluster资源,这个资源用于获取自定义资源,即Flink任务所需的Kubernetes资源。最后,基于这些自定义资源,调用Kubernetes API Server来创建底层资源,这包括创建JobManager和TaskManager的Pod,Service等资源,确保Flink任务在Kubernetes集群上得以部署和运行。这一过程使Flink任务的部署和管理变得更加简单和高效。

进一步的,作为本发明的一种实施方式,步骤S2,通过Flink Kubernetes运算符,在Kubernetes集群上部署Flink任务,还包括:

获取所述YAML文件中的任务重启策略,并基于所述任务重启策略重启未执行成功的任务。

具体的,在本发明步骤S2的另一种实施方式中,还可从所述YAML文件中获取任务的重启策略,所述重启策略定义了任务失败时的处理方式。基于所述任务重启策略,对于未执行成功的任务,可以进行自动重启操作,例如,当指定为upgradeMode:last-state,Kubernetes实时计算任务自动从最近的保存点重新执行任务。这可以提高Flink任务的可靠性,确保任务在遇到问题时能够自动尝试重新执行,减少了需要手动干预的工作,增加了系统的稳定性和可用性。

进一步的,作为本发明的一种实施方式,步骤S2,通过Flink Kubernetes运算符,在Kubernetes集群上部署Flink任务,还包括:

监听所述底层资源,并在所述底层资源出现异常时自动修复所述Flink Cluster。

具体的,在本发明步骤S2的另一种实施方式中,还可通过Flink Kubernetes运算符持续监听底层资源。如果检测到Flink Cluster底层资源出现异常,例如JobManager异常停止或被意外删除,操作符会自动触发修复操作,重新创建或调整所需的资源,以确保Flink Cluster的稳定性和可靠性。这种自动修复机制有助于减少对系统的手动干预,并提供更好的容错性。

示例性的,本发明所述的通过Flink Kubernetes运算符,在Kubernetes集群上部署Flink任务,具体为:

使用Flink Operator增加自定义资源二次开发能力来扩展Kubernetes API,能够管理和操作Flink部署,能够实现升级、挂起和删除FlinkDeployment,实现实时计算应用任务的灵活部署,与Kubernetes工具原生集成。作为一个Kubernetes的Control plane控制平面,管理实时计算应用程序的完整生命周期;

用户通过Yaml文件描述期望的Flink集群并向Kubernetes提交,FlinkController分析用户Yaml文件得到Flink Cluster,然后调用API Server创建底层资源。借助Flink Operator的控制器模式,用户只需声明所期望Flink集群的状态,剩下工作全部由Flink Operator来保证。在Flink集群运行的过程中,如果出现资源异常,如JobManager意外停止甚至被删除,都会重建这些资源,自动修复Flink集群。除此之外,用户可以指定initialSavepointPath保存路径,在任务执行的过程中,可能会有各种各样的原因导致任务失败。用户可以指定任务重启策略,当指定为upgradeMode:last-state,Kubernetes实时计算任务自动从最近的保存点重新执行任务。

进一步的,作为本发明的一种实施方式,步骤S3,通过所述Flink任务,基于预设的告警规则对所述日志文件进行告警,包括:

使用所述Flink任务进行实时计算和筛选,过滤出ERROR级别的日志并统计其出现次数;基于预设的告警规则,触发告警机制;

触发所述告警机制后,生成告警内容,并使用告警通知工具异步发送所述告警内容。

具体的,使用Flink任务进行实时计算和筛选,通过Flink任务处理从Kafka中收集的日志数据,过滤出所有ERROR级别的日志,并在一定的时间窗口内统计其出现次数,以便进一步的告警处理。在满足预设的告警规则后触发告警机制,这些规则可能包括设置的阈值或其他条件,以判定何时应该触发告警。在触发告警机制后,生成告警内容并使用告警通知工具异步发送告警内容。通常,告警内容会包含告警来源、类型、日志内容等信息,这些信息将被发送到告警通知工具,如钉钉,以便通知相关人员及时处理问题。这一过程有助于迅速识别和解决实时计算任务中的异常状态,提高了系统的可靠性和可维护性。

进一步的,作为本发明的一种实施方式,所述告警规则包括ERROR级别的日志的出现次数高于错误次数阈值。

具体的,告警规则可以定义为当ERROR级别的日志出现次数高于预先设定的错误次数阈值时触发告警。通过持续监测日志流,一旦检测到ERROR级别的日志出现的频率超过了设定的阈值,就会自动触发告警机制,通知相关人员进行处理。这有助于迅速识别和响应系统中出现的问题,确保系统的稳定性和可靠性。

需要指出的,除了错误次数阈值,告警规则还可以包括错误频率、错误百分比、特定关键词出现、告警级别、阈值异常、时间窗口、故障链路等多种规则,具体告警规则本发明不做具体限定,可根据具体需求定制。

示例性的,本发明所述的通过所述Flink任务,基于预设的告警规则对所述日志文件进行告警,其一种具体实施方式为:

为了满足对日志来源的数据进行高吞吐、低延迟、高性能告警,同时也为提升系统的可扩展行和灵活性,使用动态规则配置来实现多种告警规则的实时告警。选择基于Apache Flink进行实时Error级别日志告警,通过监听指定Kafka中的某个日志topic主题,使用Flink Kafka Connector连接器消费Kafka中的日志数据,提供可配置自定义Yaml配置文件的处理策略。由于Kafka的日志数据是JSON格式的,所以在消费的时候需要额外定义Schema来反序列化数据。要将应用的异常日志做告警,则在消费到所有的数据后需要过滤出ERROR级别的实时计算任务日志,并统计一定滑动时间窗口范围内ERROR级别日志出现的次数,当达到一定的阈值时发出报警,钉钉则作为Flink告警任务输出端,异步发送告警信息,告警内容包含来源、类型、日志内容等。通过该种告警方式定位Kubernetes中实时计算任务的运行异常状态,极大提高了定位问题的效率。

进一步的,作为本发明的一种实施方式,步骤S4,将所述Kubernetes中的Ingress资源配置为充当Flink Web界面和/或Flink Rest API的访问代理,包括:

获取Ingress资源配置的自定义规则,所述自定义规则包括主机域名、路径以及后端服务;运行的Ingress Controller控制器监听所述自定义规则的变化;

将生成的代理配置应用到反向代理服务中,用于接收外部请求并根据Ingress规则代理流量到相应的Flink Web界面和/或Flink Rest API服务。

具体的,本实施例作为配置Ingress资源的一种实施例,首先,获取Ingress资源配置的自定义规则,这包括主机域名、路径以及后端服务的定义。然后,运行的IngressController控制器监听这些自定义规则的变化,以实时感知集群中Ingress规则的任何变化。最后,将生成的代理配置应用到反向代理服务(如Nginx服务)中,反向代理服务用于接收外部请求,并根据Ingress规则将流量代理到相应的Flink Web界面和/或Flink RestAPI服务,从而实现对外提供访问的功能。这个过程保证了Flink Web界面和Flink RestAPI能够通过定义的域名和路径对外提供访问,并能够动态适应规则的变化。

示例性的,Ingress Controller通过和Kubernetes API交互,动态的去感知集群中Ingress规则变化,然后读取它按照自定义的rules规则,rules规则就是写明了域名对应哪个Service,会生成一段Nginx配置。具体配置host为:flink.xxx.prod是主机域名,path是web主机地址,访问时和域名结合使用。当有外部请求过来,就会转发到service:name指定的${APP_NAME}-rest的8081端口上。再通过标签关联写到Ingress Controller的Pod里,这个Ingress Controller的Pod里运行着一个Nginx服务,控制器会把生成的Nginx配置写入nginx.conf配置文件中,以此达到域名分配配置和动态更新的问题。最终每个实时计算任务都有一个${APP_NAME}-rest形式的Ingress域名,包括重启任务后也能始终可以通过该域名访问Flink Web页面以及相关Rest API的使用。

综上所述,本发明一种基于Kubernetes的计算任务管理方法的一种工作场景如图3所示,首先,Kubernetes集群采用DaemonSet控制器部署ilogtail日志采集工具,这样达到了Kubernetes集群所有Node节点均有日志采集服务,每个节点上Pod的container都是以Docker容器的形式存在于机器上的,包括Pod内部的目录,也是映射到具体节点的一个指定路径下的,这个路径是有规则的,根据这个规则去获取每个物理节点上相应目录的日志文件统一发往Kafka集群。然后,生产中的各种Flink的应用程序在运行过程中会产生一些错误,抛出异常,当时整个任务还是可以正常运行,这样无法感知数据处理过程中错误的发生。开启Flink告警应用程序,希望通过解析生产运行Flink应用运行过程中JobManager和TaskManager产生的日志数据,在发生ERROR日志达到一定次数时,通过钉钉向相关开发人员告警。本应用就是监听指定Kafka中某个topic主题的日志数据,过滤出ERROR的日志数据,并统计一定滑动时间窗口范围错误日志出现的数,当达到一定的阈值时,发出报警。钉钉作为Flink告警任务输出端,异步发送报警信息。最后,任务上线初始阶段和部分情况ERROR日志并不影响任务运行阶段,基于Kubernetes创建的Ingress资源代理Flink Web UI和Rest API的使用,用户可以在Flink任务提交过程中以及任务排查阶段通过Web UI实时观察分析任务的进展情况,且每个任务都有一个Ingress域名URL,始终可以通过域名访问Flink Web UI页面。

本发明的优势在于:1、提升了日志采集性能,ilogtail日志采集工具使用了轮询与事件并存的混合方式同时兼顾采集效率与支持各类特殊采集场景。通过进行多场景性能压力测试实验对比,相对于Filebeat和Logstash在CPU与内存占用率以及采集和发送速率方面ilogtail明显占优;2、降低了存储空间,ilogtail通过Kubernetes的DaemonSet控制器部署,对Kubernetes中Pod应用日志信息的采集,Pod应用的日志信息在Kubernetes集群中只保存了一份,对比在Pod中包含一个sidecar容器来收集应用日志的方式,日志容器和宿主机会存在双份日志,节省了集群存储空间;3、弹性伸缩,ilogtail日志采集服务是通过DaemonSet控制器部署,DaemonSet控制器确保所有(或一部分)的节点都运行了一个指定的Pod副本。每当向集群中添加一个节点时,指定的Pod副本也将添加到该节点上。当节点从集群中移除时,Pod也就被垃圾回收了,删除DaemonSet可以清理所有由其创建的Pod;4、减少了开发和运维成本,由于只需部署ilogtail相较于传统ELK或EFK组件更为轻量级,另外日志信息的收集与业务逻辑相分离,不需要额外修改开源Kubernetes和Flink上层应用代码,更好地减少了开发和维护成本。5、占用的节点资源较少,也不随业务容器数量增加而变多,对业务应用无侵入,新接入应用无需改造适配,单个节点上的日志聚合发送,对接收端也更加友好。6、可动态配置服务,减少不必要的端口暴露,按照传统方式,当新增加一个服务时需要在流量入口加一个反向代理指向新的Kubernetes服务。通过使用Ingress只需要配置好这个服务,当服务启动时会自动注册到Ingress中不需要额外操作。Kubernetes的很多服务会以NodePort方式映射出去,这样就相当于给宿主机暴露了端口,这样不安全。而Ingress可以避免这个问题,除了Ingress自身服务可能需要映射出去,其他服务都不再需要用NodePort方式。

本发明实施例还公开了一种基于Kubernetes的计算任务管理系统。

参照图4,本发明一种实施例公开的一种基于Kubernetes的计算任务管理系统,包括日志数据采集模块1、实时计算任务模块2以及异常日志告警模块3。

参照图5,日志数据采集模块1至少用于通过节点控制器在所述Kubernetes的每个节点上部署日志采集工具以采集所有容器的日志文件,并将所述日志文件写入Kafka的topic主题中。具体的,日志数据采集模块1首先使用节点控制器在Kubernetes集群中的每个节点上部署特定的日志采集工具,例如ilogtail,以确保每个节点都有一个日志采集容器。这些采集工具会定期获取容器的日志文件并将它们发送到Kafka主题中。这个模块的作用在于将分布在不同节点上的容器日志集中起来,提供了一个中心化的日志数据源,以便进行实时监控、故障诊断和告警处理,从而帮助系统维护和问题排查。

参照图6,实时计算任务模块2至少用于通过Flink Kubernetes运算符,在Kubernetes集群上部署Flink任务。具体的,实时计算任务模块2通过Flink Kubernetes运算符在Kubernetes集群上部署Flink任务的实施过程包括获取Flink任务的配置YAML文件,创建Flink Cluster资源,调用Kubernetes API Server来创建底层资源。其作用是简化了Flink任务的部署流程,提供高可用性,确保任务的稳定性,为实时数据计算提供了高效、可靠的计算环境,支持大规模数据处理和分析任务的执行。

参照图7,异常日志告警模块3至少用于通过所述Flink任务,基于预设的告警规则对所述日志文件进行告警。具体的,异常日志告警模块3通过使用Apache Flink进行实时Error级别日志告警,监听特定Kafka中的日志数据,过滤出ERROR级别的日志,统计其出现次数,并根据预设的告警规则触发告警机制,异步发送告警信息,包括来源、类型、日志内容等,以便及时通知相关业务人员处理异常情况。该模块的实施过程增强了系统的可扩展性和灵活性,使对日志数据的高吞吐、低延迟、高性能告警成为可能,有助于提高实时计算任务的稳定性和问题定位效率。

进一步的,作为本发明的一种实施方式,参照图4,所述基于Kubernetes的计算任务管理系统,还包括对外暴露服务模块4。

参照图8,对外暴露服务模块4至少用于将所述Kubernetes中的Ingress资源配置为充当Flink Web界面和/或Flink Rest API的访问代理,以使所述Flink Web界面和/或Flink Rest API能够通过定义的域名和/或路径对外提供访问。

对外暴露服务模块4的作用是配置Kubernetes中的Ingress资源,使其充当FlinkWeb界面和/或Flink Rest API的访问代理。这允许这些服务通过定义的域名和/或路径对外提供访问,从而方便用户实时观察和管理计算任务,包括任务进展、Checkpoints情况、背压情况等,以及通过域名访问Flink Web页面和相关Rest API的使用。

本发明实施例所述的计算任务管理系统中的各模块之间相互协调、逐层递进,拥有严谨的处理逻辑,有效地确保了系统的高可用性。同时,系统具有体积小、易扩展的特点,使其在不断变化的需求下能够灵活适应。此外,每个模块在运行时都生成相应的日志记录,这有助于及时发现和解决问题,提高系统的稳定性和可维护性。

需要指出的是,本发明的各功能组件和模块都具备在云端部署的能力,并且可以根据具体应用的需求进行自定义配置和改造,以便适应不同的使用场景。这种灵活性和可适应性可满足各种应用的特定要求,特别是在云计算和容器编排等现代应用部署环境中。它使得本发明可以更好地适应多样化的应用需求,提供更广泛的应用场景。

本发明实施例还公开了一种可读存储介质。

一种可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述实施例任意一项所述的一种基于Kubernetes的计算任务管理方法的步骤。计算机可读存储介质可以包括:能够携带计算机程序的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccess Memory)、以及软件分发介质等。计算机程序包括计算机程序代码。计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读存储介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccess Memory)、以及软件分发介质等。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。

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

以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

相关技术
  • 基于生物识别的访客管理方法、系统、计算机设备及存储介质
  • 定时任务的管理方法、计算机可读存储介质和终端设备
  • 任务数据管理方法、装置、计算机设备和存储介质
  • 定时任务管理方法、装置、计算机设备及存储介质
  • 基于Kubernetes集群的管理方法、装置及计算机可读存储介质
  • 一种基于Kubernetes的并行计算任务调度方法与系统
技术分类

06120116508275