本发明涉及kubernetes云平台的,尤其涉及一种实时动态管理kubernetes虚拟节点provider的方法。
背景技术:
1、在云原生场景,存在着通过虚拟节点(virtual kubelet,以下简称vk)扩展kubelet的应用场景,在serverless k8s集群,并无kubelet和节点的概念,所以需要通过vk来伪装成kubelet对内注册到k8s apiserver,对外接入各个云厂商提供的provider(provider维护了一套pod生命周期的接口,可以理解成给管理k8s pod提供了不同的实现方式)。
2、在此业务场景下的通用解决方案,现有的vk源码虽有提供从k8sapiserver侧同步状态变更到provider的实现,但并没有提供provider侧状态变更同步到k8s apiserver的方式,这时,现有的方式开发者需要在vk里定期轮询provider相关接口以获取最新的pod状态,当pod数量巨大的时候,会造成provider负载压力过大,而且整个serverless集群只注册了一个vk,vk有可能需要管理成千上万个pod,是个单点服务且缺乏动态扩展机制,会有较大的负载压力和安全性能问题。
技术实现思路
1、本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本技术的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分、说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。
2、鉴于上述现有存在的问题,提出了本发明。
3、因此,本发明目的是提供一种实时动态管理kubernetes虚拟节点provider的方法,其为了解决“在此业务场景下的通用解决方案,现有的vk源码虽有提供从k8sapiserver侧同步状态变更到provider的实现,但并没有提供provider侧状态变更同步到k8s apiserver的方式,这时,现有的方式开发者需要在vk里定期轮询provider相关接口以获取最新的pod状态,当pod数量巨大的时候,会造成provider负载压力过大,而且整个serverless集群只注册了一个vk,vk有可能需要管理成千上万个pod,是个单点服务且缺乏动态扩展机制,会有较大的负载压力和安全性能问题”的问题。
4、为解决上述技术问题,本发明提供如下技术方案:
5、一种实时动态管理kubernetes虚拟节点provider的方法,包括包括如下步骤:
6、si、所述组件控制台开通serverless k8s集群,使用自定义的调度器,符合预期的话看到一个vk节点启动并注册到serverless k8s集群中,启动provider服务;
7、s2、手动触发provider pod的状态变更,观察kafka的数据生产情况,当vk消费到变更消息后,可以根据这个唯一标识在k8s里找到对应的pod,通过协议转换,实现providerpod变更同步到k8s的pod中;
8、s3、在serverless k8s集群中创建有n个pod,观察elasticsearch中相应数据的写入情况,持续创建pod,一直到达到configmap中配置的阈值,此过程中vk定期查询es判断自身管理pod数量达到阈值,达到阈值后vk往kubernetes集群中创建cr触发vk节点扩容;
9、s4、重复s3若干次,对扩容操作情况进行观察;
10、s5、扩容后,再在serverless k8s集群中持续创建pod,验证pod被调度到刚扩容的vk节点,观察到节点管理的pod运行,pod信息串到别的vk节点上,各个follower管理的pod数目均达到了阈值,就往k8s集群创建cr,vk-operator通过调谐watch到cr的创建后,创建新的vk节点;
11、s6、实施完成后,退订serverless k8s集群,杀掉provider服务,清除kubernetes集群上的资源。
12、作为本发明所述一种实时动态管理kubernetes虚拟节点provider的方法的一种优选方案,其中:同一个所述consumer group里约定有n个vk,保证扩容后消息不被重复消费。
13、作为本发明所述一种实时动态管理kubernetes虚拟节点provider的方法的一种优选方案,其中:所有所述vk节点均可消费,所有所述vk节点均可访问k8s集群,所述consumer group限制了消息只能被消费一次,所述provider pod与k8s pod有唯一标识关联起来,任何一个vk都可以更新k8s pod的状态。
14、作为本发明所述一种实时动态管理kubernetes虚拟节点provider的方法的一种优选方案,其中:所述k8s集群里部署vk-operator,vk-operator的作用在于处理vk节点的创建。
15、作为本发明所述一种实时动态管理kubernetes虚拟节点provider的方法的一种优选方案,其中:所述k8s集群为管理集群,非用户自己的业务集群。
16、作为本发明所述一种实时动态管理kubernetes虚拟节点provider的方法的一种优选方案,其中:所述vk节点的数目保持奇数,引入选举机制,初始化的时候只有一个vk,此时该vk自动成为leader,当有多个vk节点时,通过类paxos或raft协议选举产生一个leader,其余的均为follower。
17、作为本发明所述一种实时动态管理kubernetes虚拟节点provider的方法的一种优选方案,其中:单个所述vk节点创建和维护的provider pod存储在elasticsearch中。
18、作为本发明所述一种实时动态管理kubernetes虚拟节点provider的方法的一种优选方案,其中:所述vk节点在创建后总数要保持奇数,这个是通过crd里的spec控制,每次创建的时候leader拥有当前vk节点的数量信息。
19、作为本发明所述一种实时动态管理kubernetes虚拟节点provider的方法的一种优选方案,其中:所述pod节点调度,通过自定义scheduler扩展kube-scheduler来实现。
20、作为本发明所述一种实时动态管理kubernetes虚拟节点provider的方法的一种优选方案,其中:所述pod数目的阈值以configmap的形式在管理集群里配置下来,自定义scheduler依据这个“每个vk节点管理的pod数目”阈值实现优先级调度策略,优先把创建的k8s pod调度到pod数目未达阈值的vk上。
21、本发明的有益效果:
22、1、手动触发provider pod的状态变更,观察kafka的数据生产情况,当vk消费到变更消息后,可以根据这个唯一标识在k8s里找到对应的pod,通过协议转换,实现providerpod变更同步到k8s的pod中,实现了实时从provider pod同步状态到k8s pod,避免频繁轮询导致provider出现性能问题,通过消息队列充分解耦数据同步实现,架构更合理,且不会造成provider性能过载,让风险可控。
23、2、通过在serverless k8s集群中创建n个pod,观察elasticsearch中相应数据的写入情况,持续创建pod,一直到达到configmap中配置的阈值,实现了动态扩展vk节点的机制,每个vk节点只管理属于自己那部分的pod,避免了vk的单点问题。引入elasticsearch作为存储,提供了高效的插入查询,并通过自定义调度器使得每个vk管理的pod的数目处于动态均衡的状态。
1.一种实时动态管理kubernetes虚拟节点provider的方法,其特征在于:包括如下步骤:
2.根据权利要求1所述的一种实时动态管理kubernetes虚拟节点provider的方法,其特征在于:同一个所述consumer group里约定有n个vk,保证扩容后消息不被重复消费。
3.根据权利要求1所述的一种实时动态管理kubernetes虚拟节点provider的方法,其特征在于:所有所述vk节点均可消费,所有所述vk节点均可访问k8s集群,所述consumergroup限制了消息只能被消费一次,所述provider pod与k8s pod有唯一标识关联起来,任何一个vk都可以更新k8s pod的状态。
4.根据权利要求1所述的一种实时动态管理kubernetes虚拟节点provider的方法,其特征在于:所述k8s集群里部署vk-operator,vk-operator的作用在于处理vk节点的创建。
5.根据权利要求1所述的一种实时动态管理kubernetes虚拟节点provider的方法,其特征在于:所述k8s集群为管理集群,非用户自己的业务集群。
6.根据权利要求1所述的一种实时动态管理kubernetes虚拟节点provider的方法,其特征在于:所述vk节点的数目保持奇数,引入选举机制,初始化的时候只有一个vk,此时该vk自动成为leader,当有多个vk节点时,通过类paxos或raft协议选举产生一个leader,其余的均为follower。
7.根据权利要求6所述的一种实时动态管理kubernetes虚拟节点provider的方法,其特征在于:单个所述vk节点创建和维护的provider pod存储在elasticsearch中。
8.根据权利要求1所述的一种实时动态管理kubernetes虚拟节点provider的方法,其特征在于:所述vk节点在创建后总数要保持奇数,这个是通过crd里的spec控制,每次创建的时候leader拥有当前vk节点的数量信息。
9.根据权利要求1所述的一种实时动态管理kubernetes虚拟节点provider的方法,其特征在于:所述pod节点调度,通过自定义scheduler扩展kube-scheduler来实现。
10.根据权利要求1所述的一种实时动态管理kubernetes虚拟节点provider的方法,其特征在于:所述pod数目的阈值以configmap的形式在管理集群里配置下来,自定义scheduler依据这个“每个vk节点管理的pod数目”阈值实现优先级调度策略,优先把创建的k8s pod调度到pod数目未达阈值的vk上。
