本发明涉及serverless容器,是一种kubernetes虚拟节点上容器状态同步的改进方法和系统。
背景技术:
1、virtual kubelet是kubernetes kubelet的一种实现,它实现了kubelet的部分能力。从kube-apiserver的角度来看,virtual kubelet看起来像普通的kubelet,但其关键区别在于virtual kubelet没有在其所在的宿主机上调试容器,而是调用其他地方的api创建容器。
2、在现有已公开的发明技术中,如申请公开号为cn115185628a的专利公开了一种基于容器实例实现集群虚拟节点的方法及系统,所述的方法通过virtual kubelet创建虚拟节点,监听到pod的操作调用容器实例服务对应方法,创建svc从而实现外部访问容器实例上的pod。
3、上述专利底层pod的状态需通过agent向上层kube-apiserver上报,这需要进行网络通信,可能会产生额外的网络开销和延迟。
技术实现思路
1、本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本技术的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分、说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。
2、本发明所要解决的技术问题是针对现有技术中,都是周期性地调用provider的api轮询每个容器的状态。这个轮询的时间间隔,没有合适的值。间隔设置过大,会导致虚拟节点中的容器状态更新延迟,从业务上看就是serverless集群的容器启动慢。间隔设置过小,会导致provider的api压力增加,导致provider能支撑的虚拟节点数量减少。
3、为了达到上述目的,本发明一种kubernetes虚拟节点上容器状态同步的改进方法的技术方案包括如下步骤:
4、s1:在底层的每个pod中注入一个agent,当agent运行起来后,可以直接向上面的kube-apiserver上报pod的状态;
5、s2:识别底层pod的状态,并通过virtual kubelet轮询机制来保证底层pod的状态;
6、s3:根据底层集群中pod的启动过程,把虚拟节点中的podlist拆分成多个队列;
7、s4:在虚拟节点中,把不同阶段的pod放到到对应的队列中;
8、s5:通过reconciler一次性查询本队列所有pod的状态,并识别pod状态,执行改变策略;
9、s6:提取每条队列的轮询间隔时间,并对间隔时间进行动态自适应调整。
10、具体地,所述s1执行的前提环境包括:已经有自己的容器实例产品,即provider,并且提供了createpod、deletepod、getpodliststatus等api接口,供virtual kubelet调用。
11、具体地,s1包括如下具体步骤:
12、s11:开发虚拟节点的功能,并编译成二进制文件,制作docker镜像;
13、s12:创建一个kubernetes集群;
14、s13:利用镜像部署虚拟节点,注册到kubernetes集群中;
15、s14:在kubernetes集群中,创建一系列pod,把它调度到虚拟节点上。
16、具体地,s2中,所述virtual kubelet轮询机制包括如下具体步骤:
17、s21:注册自身为一个节点,并在kubernetes api服务器上创建对应的节点对象;
18、s22:virtual kubelet开始轮询kubernetes api服务器,以获取当前分配给它的pod;
19、s23:查询kubernetes api服务器上的调度器绑定列表;
20、s24:若有pod被分配给virtual kubelet,它会为这些pod生成对应的容器实例,并在第三方容器编排平台上创建相应的容器;
21、s25:当容器创建成功后,virtual kubelet会向kubernetesapi服务器报告pod的状态,并更新节点的状态;
22、s26:如果pod的状态发生变化,virtual kubelet会相应地更新kubernetes api服务器上的pod状态;
23、s27:virtual kubelet在时间间隔内,重复执行上述步骤。
24、具体地,s26中,所述pod的状态的变化包括:完成、失败或异常。
25、具体地,s3中,所述底层集群中pod的启动过程包括:创建中(pending)、调度中(scheduling)、镜像拉取中(imagepulling)、启动中(starting)、运行中(running)。
26、具体地,s5中,所述识别pod状态,执行改变策略包括:当本队列的pod的状态发生改变时,把它从本队列移出,放入到对应的队列中去。
27、具体地,s6中,所述每条队列的轮询间隔时间包括:ti={t1,t2...tn},其中,由于每个阶段的pod转换到下一个阶段的时间会不一样,所以每条队列的轮询间隔时间也是不一样。
28、具体地,s6中,动态适应性调整包括:
29、s61:计算时间间隔为x内,本队列的pod转换到下一阶段的平均时间计算公式为:
30、s62:根据平均时间对轮询间隔时间进行动态适应性调整。
31、s63:当底层集群的真实pod的状态发生改变时,虚拟节点中的pod也能相对同时地保持状态的同步。
32、另外,本发明一种kubernetes虚拟节点上容器状态同步的改进系统包括如下模块:
33、pod agent模块、virtual kubelet模块、podlist拆分模块、pod分发模块、reconciler模块、动态调整模块;
34、所述pod agent模块用于在每个底层pod中注入的agent,负责向上层的kube-apiserver上报pod的状态;
35、所述virtual kubelet模块通过轮询机制,监测底层pod的状态变化,并保持其与虚拟节点对应的pod状态一致;
36、所述podlist拆分模块根据底层集群中pod的启动过程,将虚拟节点中的podlist拆分成多个队列,每个队列包含不同阶段的pod;
37、所述pod分发模块将不同阶段的pod根据其状态放入对应的队列中。
38、所述reconciler模块用于查询每个队列中所有pod的状态,并识别pod状态,执行相应的改变策略。
39、所述动态调整模块用于提取每个队列的轮询间隔时间,并对间隔时间进行动态自适应调整,以优化系统性能。
40、与现有技术相比,本发明的技术效果如下:
41、1、本发明把为单个pod查询状态,改成一次性查询pod列表中所有pod的状态,减少api的调用次数。
42、2、本发明结合了主动上报与周期轮询,即提升性能,又保证了可靠性。
43、3、本发明根据容器的实际启动过程,提出多队列思想;每条列表的轮询时间都有自己独立的值。
44、4、本发明轮询周期不再是一个固定的值,而是取最近一段时间内容器从该状态转换为下一状态的平均值。这种带有统计预测的方法,可以在最大程度上保证虚拟节点上的容器与底层集群中真实容器的状态更快地保持一致。