一种基于kubernetes的Flink云原生部署架构方法及系统与流程

文档序号:30135795发布日期:2022-05-21 01:03阅读:206来源:国知局
一种基于kubernetes的Flink云原生部署架构方法及系统与流程
一种基于kubernetes的flink云原生部署架构方法及系统
技术领域
1.本发明公开一种基于kubernetes的flink云原生部署架构方法及系统,涉及云计算技术领域。


背景技术:

2.apache flink是一个框架和分布式处理引擎,它提供了丰富且易用的api 来处理有状态的流处理应用,并且在支持容错的前提下,高效、大规模的运行此类应用;通过支持事件时间(event-time)、计算状态(state)以及恰好一次(exactly-once)的容错保证,flink迅速被很多公司采纳,成为了新一代的流计算处理引擎;
3.kubernetes是业内最流行的容器编排工具,与docker容器技术结合,可以提供比yarn更强大的集群资源管理功能,成为容器云的主要解决方案之一;在大数据及相关领域,包括spark,hive,kafka等众多知名产品正在迁往 kubernetes,flink也是其中一员;将flink和kubernetes结合,对生产效能有很大的提升;
4.flink on kubernetes部署模式有四种,分别是flink session,flink per-job,flink native session和flink native per-job;其中flink native session部署模式时按需创建taskmanager,资源利用率高;不需要事先创建一个包含用户jar包用于启动flink master的镜像,使用起来比较灵活;但是如果不对taskmanager占用的资源或者所能启动的个数进行限制,那么就可能出现flink占用kubernetes集群的资源过多的情况;如果指定了taskmanager 的最大资源和数量,当job数量较多,而kubernetes集群资源足够或是扩容的时候,又没有办法将flink集群进行扩容;如何才能根据kubernetes集群资源剩余情况及用户需求灵活的控制flink所占资源,在job需要资源多并且 kubernetes集群资源足够的情况下,扩大flink集群所占的资源,相反则缩小 flink所占的资源就成为我们能亟待解决的问题;
5.故现发明一种基于kubernetes的flink云原生部署架构方法及系统,以解决上述问题。


技术实现要素:

6.本发明针对现有技术的问题,提供一种基于kubernetes的flink云原生部署架构方法及系统,所采用的技术方案为:一种基于kubernetes的flink云原生部署架构方法,所述的方法具体步骤如下:
7.s1启动定时任务,定时查看kubernetes集群资源使用情况并记录数据表;
8.s2在kubernetes集群中创建flink专用的namespace;
9.s3设置namespace的配额,设置资源配额和对象数量配额;
10.s4创建flink集群启动文件;
11.s5动态修改flink集群的配额信息。
12.所述s1启动定时任务,定时查看kubernetes集群资源使用情况并记录数据表的具
体步骤如下:
13.s101设定资源使用率的阈值并定时查看;
14.s102当资源使用率在检测时间段内持续在阈值以下,则进行flink集群的扩容;
15.s112当资源使用率在检测时间段内持续在阈值以上,则发出告警信息,根据告警信息和用户需求,对flink集群的配额进行缩小。
16.所述s3设置namespace的配额,设置资源配额和对象数量配额的具体步骤如下:
17.s301设置计算资源配额,定义cpu、内存请求(requests)、限制(limits) 使用的总量;
18.s302设置对象数量配额,通过设置namespace的pods数限定该namespace 下能启用pod数量的最大值。
19.所述s4创建flink集群启动文件具体步骤如下:
20.s401编辑configmap,deployment和service执行appy命令创建集群;
21.s402执行kubectl apply命令,进行flink集群的部署。
22.所述s5动态修改flink集群的配额信息具体步骤如下:
23.s501根据kubernetes和用户需求判断是否需要重新设置配额;
24.s502监控数据显示kubernetes集群资源足够时,重新配置namespace的配额,扩容flink集群使用的资源;
25.s503监控数据显示kubernetes集群资源紧张时,降低flink专用namespace的配额,限制flink集群使用的资源。
26.一种基于kubernetes的flink云原生部署架构系统,所述的系统定时查看模块、空间创建模块、空间设置模块、集群部署模块和动态配额模块:
27.定时查看模块:启动定时任务,定时查看kubernetes集群资源使用情况并记录数据表;
28.空间创建模块:在kubernetes集群中创建flink专用的namespace;
29.空间设置模块:设置namespace的配额,设置资源配额和对象数量配额;
30.集群部署模块:创建flink集群启动文件;
31.动态配额模块:动态修改flink集群的配额信息。
32.所述定时查看模块具体包括定时设置模块、检测处理模块a和检测处理模块b:
33.定时设置模块:设定资源使用率的阈值并定时查看;
34.检测处理模块a:当资源使用率在检测时间段内持续在阈值以下,则进行 flink集群的扩容;
35.检测处理模块b:当资源使用率在检测时间段内持续在阈值以上,则发出告警信息,根据告警信息和用户需求,对flink集群的配额进行缩小。
36.所述空间设置模块具体包括资源配额模块和数量配额模块:
37.资源配额模块:设置计算资源配额,定义cpu、内存请求(requests)、限制(limits)使用的总量;
38.数量配额模块:设置对象数量配额,通过设置namespace的pods数限定该 namespace下能启用pod数量的最大值。
39.所述集群部署模块具体包括集群创建模块和部署执行模块:
40.集群创建模块:编辑configmap,deployment和service执行appy命令创建集群;
41.部署执行模块:执行kubectl apply命令,进行flink集群的部署。
42.所述动态配额模块具体包括需求判断模块、配置调高模块和配置调低模块:
43.需求判断模块:根据kubernetes和用户需求判断是否需要重新设置配额;
44.配置调高模块:监控数据显示kubernetes集群资源足够时,重新配置 namespace的配额,扩容flink集群使用的资源;
45.配置调低模块:监控数据显示kubernetes集群资源紧张时,降低flink 专用namespace的配额,限制flink集群使用的资源。
46.本发明的有益效果为:本发明方法可实现根据kubernetes集群资源使用情况和用户需求动态修改flink集群的配额,提高kubernetes集群的资源利用率;包括:监控kubernetes的资源使用情况;将flink集群单独部署某个指定的 namespace下;结合kubernetes集群中资源剩余情况和用户需求情况调整指定 namespace的资源配额和pod数量配额,从而限制flink集群能申请的资源大小和pod数量。
附图说明
47.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
48.图1是本发明方法的流程图;图2是本发明实施例的实施流程图。
具体实施方式
49.下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
50.实施例一:
51.一种基于kubernetes的flink云原生部署架构方法,所述的方法具体步骤如下:
52.s1启动定时任务,定时查看kubernetes集群资源使用情况并记录数据表;
53.s2在kubernetes集群中创建flink专用的namespace;
54.s3设置namespace的配额,设置资源配额和对象数量配额;
55.s4创建flink集群启动文件;
56.s5动态修改flink集群的配额信息;
57.目前flink on kubernetes有四种部署模式,其中flink session,flink per-job两种模式,在kubernetes上运行flink任务是需要事先指定好 taskmanager的数量,但是大部分情况下,用户在任务启动前是无法准确的预知该任务所需taskmanager的数量和规格;指定的多了会导致资源浪费,指定的少了会导致任务的执行失败;最根本的原因,就是没有动态的使用kubernetes资源;flink native per-job部署模式可以实现flink与 kuberneter直接通信申请资源,避免资源的浪费,但是需要事先创建一个包含用户jar包用于启动flink master的镜像,使用起来不灵活,不适用于生产环境;对比发现,flink native session模式能与kuberneter直接通信申请资源,也不需要事先创建包含用户jar
的镜像,更适合生产环境使用;
58.flink native session模式下,如果不对flink集群所占的资源进行限定,有可能就会造成资源占用过多的情况;本发明提供了一种基于kubernetes的 flink云原生部署架构方法,动态限制flink集群资源的方法:
59.首先监控kubernetes资源使用情况,按照s1启动定时任务,定时查看 kubernetes集群资源使用情况并记录数据表;
60.然后在kubernetes集群中创建一个namespace,即按照s2在kubernetes 集群中创建flink专用的namespace,kubernetes支持多个虚拟集群,它们底层依赖于同一个物理机群;这些虚拟集群被称为命名空间(namespace); namespace在很多情况下可以实现资源隔离,不同业务或用户可以使用不同的 namespace进行隔离;创建flink集群专用的namespace,目的是为了将flink 集群和其他部署在同一个kubernetes集群上的应用进行有效的隔离,修改该 namespace的资源配额时,不会影响其他应用的正常使用;
61.接着为namespace设置资源配额,按照s3设置namespace的配额,设置资源配额和对象数量配额,然后按照s4创建flink集群启动文件,最后动态修改 flink集群的配额信息即可;
62.本发明方法可实现根据kubernetes集群资源使用情况和用户需求动态修改flink集群的配额,提高kubernetes集群的资源利用率;包括:监控 kubernetes的资源使用情况;将flink集群单独部署某个指定的namespace下;结合kubernetes集群中资源剩余情况和用户需求情况调整指定namespace的资源配额和pod数量配额,从而限制flink集群能申请的资源大小和pod数量;
63.进一步的,所述s1启动定时任务,定时查看kubernetes集群资源使用情况并记录数据表的具体步骤如下:
64.s101设定资源使用率的阈值并定时查看;
65.s102当资源使用率在检测时间段内持续在阈值以下,则进行flink集群的扩容;
66.s112当资源使用率在检测时间段内持续在阈值以上,则发出告警信息,根据告警信息和用户需求,对flink集群的配额进行缩小;
67.首先启动一个定时任务,定时调用kubernetes的mestrics api接口查询集群资源使用情况,并记录在数据表中,设定资源使用率的阈值,当资源使用率持续半小时在阈值以下,则认为是资源充足,可以进行flink集群的扩容;相反,如果资源使用率持续半小时都在阈值以上,则发出告警信息,根据告警信息和用户需求,适当对flink集群的配额进行缩小,达到缩容的目的;
68.进一步的,所述s3设置namespace的配额,设置资源配额和对象数量配额的具体步骤如下:
69.s301设置计算资源配额,定义cpu、内存请求(requests)、限制(limits) 使用的总量;
70.s302设置对象数量配额,通过设置namespace的pods数限定该namespace 下能启用pod数量的最大值;
71.在kubernetes集群中,pod是所有业务类型的基础,也是k8s管理的最小单位级,它是一个或多个容器的组合;这些容器共享存储、网络和命名空间,以及如何运行的规范;在
pod中,所有容器都被统一安排和调度,并运行在共享的上下文中;对于具体应用而言,pod是它们的逻辑主机,pod包含业务相关的多个应用容器;每一个pod都会被指派一个唯一的ip地址,在pod中的每一个容器共享网络命名空间,包括ip地址和网络端口;在同一个pod中的容器可以用locahost进行互相通信;当pod中的容器需要与pod外的实体进行通信时,则需要通过端口等共享的网络资源;
72.配额对每个namespace的资源消耗总量提供限制;每个namespace可以设置一个或多个配额,当在该namespace下启用pod或service时,kubernetes 配额系统会跟踪集群的资源使用情况,以确保使用量不超过配额要求;如果pod 创建违反了配额限制,请求会报错,并且在消息中会给出有可能违反的配额约束;
73.在kubernetes中资源配额能够对计算资源(cpu和内存)、存储资源以及对资源对象的数量进行管理;本发明发明主要是设置taskmanager所占资源上限和启用pod的最大数量,而flink是流式计算,taskmanager也不需要存储大量的数据,所以,资源配额不考虑对存储资源配额的限定;本发明方法就是从计算资源和对象数量两方面进行限定的;
74.首先按照s301设置计算资源配额,定义cpu、内存请求(requests)、限制(limits)使用的总量;针对专用namespace新建一个resourcequota,通过设置limits.cpu和limits.memory限定指定namespace下所有非终止状态pod 的cpu和memory限额总量的上限;通过设置request.cpu和request.memory 限定所有非终止状态pod对cpu和memory需求总量的上限;
75.然后按照s302对象数量配额,通过设置namespace的pods数限定该 namespace下能启用pod数量的最大值;
76.进一步的,所述s4创建flink集群启动文件具体步骤如下:
77.s401编辑configmap,deployment和service执行appy命令创建集群;
78.s402执行kubectl apply命令,进行flink集群的部署;
79.编辑好flink的部署文档,包括configmap,deployment,service,其中 deployment.yaml文件中必须要指定requests和limits;执行kubectl apply 命令,进行flink集群的部署;如果在创建或更新对象时申请的资源与namespace的resourcequota冲突,则会返回对应的错误提示信息;
80.再进一步的,所述s5动态修改flink集群的配额信息具体步骤如下:
81.s501根据kubernetes和用户需求判断是否需要重新设置配额;
82.s502监控数据显示kubernetes集群资源足够时,重新配置namespace的配额,扩容flink集群使用的资源;
83.s503监控数据显示kubernetes集群资源紧张时,降低flink专用 namespace的配额,限制flink集群使用的资源;
84.根据用户需求,如果需求变大,第一步监控数据显示kubernetes集群资源足够的情况下,重新配置namespace的配额,达到扩容flink集群的目的;相反,kubernetes集群资源紧张,flink用户需求不大的情况下,降低flink专用namespace的配额,限制flink集群使用的资源;
85.以上便实现了根据kubernetes集群资源剩余情况和用户需求,动态改变 flink所占资源,提高了kubernetes集群的资源利用率;使用方便,操作简单。
86.实施例二:
87.一种基于kubernetes的flink云原生部署架构系统,所述的系统定时查看模块、空间创建模块、空间设置模块、集群部署模块和动态配额模块:
88.定时查看模块:启动定时任务,定时查看kubernetes集群资源使用情况并记录数据表;
89.空间创建模块:在kubernetes集群中创建flink专用的namespace;
90.空间设置模块:设置namespace的配额,设置资源配额和对象数量配额;
91.集群部署模块:创建flink集群启动文件;
92.动态配额模块:动态修改flink集群的配额信息;
93.进一步的,所述定时查看模块具体包括定时设置模块、检测处理模块a和检测处理模块b:
94.定时设置模块:设定资源使用率的阈值并定时查看;
95.检测处理模块a:当资源使用率在检测时间段内持续在阈值以下,则进行 flink集群的扩容;
96.检测处理模块b:当资源使用率在检测时间段内持续在阈值以上,则发出告警信息,根据告警信息和用户需求,对flink集群的配额进行缩小;
97.进一步的,所述空间设置模块具体包括资源配额模块和数量配额模块:
98.资源配额模块:设置计算资源配额,定义cpu、内存请求(requests)、限制(limits)使用的总量;
99.数量配额模块:设置对象数量配额,通过设置namespace的pods数限定该 namespace下能启用pod数量的最大值;
100.进一步的,所述集群部署模块具体包括集群创建模块和部署执行模块:
101.集群创建模块:编辑configmap,deployment和service执行appy命令创建集群;
102.部署执行模块:执行kubectl apply命令,进行flink集群的部署;
103.再进一步的,所述动态配额模块具体包括需求判断模块、配置调高模块和配置调低模块:
104.需求判断模块:根据kubernetes和用户需求判断是否需要重新设置配额;
105.配置调高模块:监控数据显示kubernetes集群资源足够时,重新配置 namespace的配额,扩容flink集群使用的资源;
106.配置调低模块:监控数据显示kubernetes集群资源紧张时,降低flink 专用namespace的配额,限制flink集群使用的资源。
107.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1