一种实现kubernetes自定义调度器的方法技术

技术编号:24707404 阅读:62 留言:0更新日期:2020-06-30 23:53
本发明专利技术公开了一种实现kubernetes自定义调度器的方法,将Pod事件存入到队列中,并根据Pod资源Yaml配置中的“schedulerName”字段过滤掉不需要调度的Pod;指定应用创建的Pod绑定到指定工作节点的配置;将管理员配置的Pod绑定节点的配置格式化之后,提交到Etcd集群中;将Statefulset资源提交到Kubernetes集群中;判断是否需要调度该Pod;本发明专利技术涉及容器编排技术领域。该实现kubernetes自定义调度器的方法,当Pod重建时,该Statefulset创建的Pod依然会调度到该节点之上运行,保证挂载在工作节点上的数据Pod依然能够读取到,当要将指定Pod绑定到新的工作节点之上时,通过容器云平台修改绑定配置,自定义调度器会根据该Pod新的绑定配置,将Pod绑定到新的工作节点之上运行,能够满足实际的使用需求。

【技术实现步骤摘要】
一种实现kubernetes自定义调度器的方法
本专利技术涉及容器编排
,具体为一种实现kubernetes自定义调度器的方法。
技术介绍
Kubernetes是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化,Kubernetes拥有一个庞大且快速增长的生态系统,Kubernetes的服务、支持和工具广泛可用,Kubernetes作为一款通用的容器编排平台,能够根据集群中节点资源使用情况以及配置的调度算法,将Pod调度到最优的工作节点之上进行运行,负责Pod的调度工作的为调度器,调度器根据配置调度的算法与策略将Pod调度到指定工作节点之上。在日常常见的使用场景中,Kubernetes调度器可以基本满足业务需求,例如:调度Pod到资源充足的节点上运行、调度Pod分散到不同节点使集群节点资源均衡、根据标签配置调度Pod到指定范围的工作节点之上、根据反亲和性将Pod不调度到指定的节点之上等,由于Kubernetes集群之上需要部署种类繁多的应用服务,运行不同应用的Pod对其所运行的节点有着不同的要求,其中,在应用对磁盘IO要求较高或Pod中的数据需要持久化时,需要将Pod中指定目录的数据挂载到工作节点之上,以达到减少容器文件系统带来的IO损耗与数据持久化的效果,由于Kubernetes管理Pod时,具备Pod自动迁移、Pod滚动升级、Pod故障自动重启等特点,在Pod自动迁移过程中,会导致挂载在工作节点上的数据丢失,在这一类有状态应用使用的场景下,默认调度器提供的调度算法策略并不能满足实际需求,因此,基于Kubernetes中原生调度器的使用方式存在缺陷,需要改进。
技术实现思路
(一)解决的技术问题针对现有技术的不足,本专利技术提供了一种实现kubernetes自定义调度器的方法,解决了挂载在工作节点上的数据丢失,基于Kubernetes中原生调度器的使用方式存在缺陷,需要改进的问题。(二)技术方案为实现以上目的,本专利技术通过以下技术方案予以实现:一种实现kubernetes自定义调度器的方法,具体包括以下步骤:S1、启动自定义调度器程序时,会通过WatchAPI机制连接到Kube-apiserver服务,实时监控Kubernetes集群中新建Pod产生的事件,将Pod事件存入到队列中,并根据Pod资源Yaml配置中的“schedulerName”字段过滤掉不需要调度的Pod;S2、管理员通过容器云平台创建应用,当创建应用时,指定应用创建的Pod绑定到指定工作节点的配置,用于将需要持久化数据到工作节点上的Pod与对应的工作节点进行绑定;S3、当容器云平台接收到应用创建请求时,将管理员配置的Pod绑定节点的配置格式化之后,提交到Etcd集群中;S4、根据管理员指定的配置,格式化生成Statefulset资源的配置文件并指定“schedulerName”字段的值为自定义调度器的名称,而后,调用Kube-apiserver的接口,将Statefulset资源提交到Kubernetes集群中;S5、当Kubernetes集群根据Statefulset配置生成Pod资源时,自定义调度器获取到该Pod资源配置,通过获取Pod中自定义的调度器名称,判断是否需要调度该Pod,当调度器名称与Pod中指定的调度器名称一致时,确定该Pod由本调度器执行调度操作;S6、调度器根据Pod的名称、Pod的Namespace值,到Etcd集群中查询该Pod配置的绑定节点配置,如果Etcd集群中没有到该Pod绑定节点的配置,则不执行绑定操作,并进行重新调度;S7、当被绑定节点上的Kubelet服务接收到Pod绑定请求后,执行Pod创建流程,至此完成Pod的创建流程。优选的,所述步骤S3中的配置内容包括:Pod名称、Pod的Namespace名称、绑定的工作节点名称,自定义的调度器根据该配置文件内容执行Pod的绑定操作。优选的,所述步骤S4中Kubernetes集群中默认的调度器实例为Kube-scheduler,调度器的名称为“default-scheduler”。优选的,所述步骤S6中,自定义的调度器在将Pod调度到指定的工作节点之上时,会从Etcd集群中获取该Pod绑定节点的配置,根据该配置,将Pod调度到用户指定工作节点之上运行。优选的,所述步骤S6中,当获取到Pod的绑定节点配置之后,从配置内容中获取到工作节点的名称,创建Kubernetes中的“Binding”资源,将Pod绑定到指定的工作节点上运行。(三)有益效果本专利技术提供了一种实现kubernetes自定义调度器的方法。与现有技术相比具备以下有益效果:该实现kubernetes自定义调度器的方法,具体包括以下步骤:S1、启动自定义调度器程序时,会通过WatchAPI机制连接到Kube-apiserver服务,实时监控Kubernetes集群中新建Pod产生的事件,将Pod事件存入到队列中,并根据Pod资源Yaml配置中的“schedulerName”字段过滤掉不需要调度的Pod;S2、管理员通过容器云平台创建应用,当创建应用时,指定应用创建的Pod绑定到指定工作节点的配置,用于将需要持久化数据到工作节点上的Pod与对应的工作节点进行绑定;S3、当容器云平台接收到应用创建请求时,将管理员配置的Pod绑定节点的配置格式化之后,提交到Etcd集群中;S4、根据管理员指定的配置,格式化生成Statefulset资源的配置文件并指定“schedulerName”字段的值为自定义调度器的名称,而后,调用Kube-apiserver的接口,将Statefulset资源提交到Kubernetes集群中;S5、当Kubernetes集群根据Statefulset配置生成Pod资源时,自定义调度器获取到该Pod资源配置,通过获取Pod中自定义的调度器名称,判断是否需要调度该Pod,当调度器名称与Pod中指定的调度器名称一致时,确定该Pod由本调度器执行调度操作;S6、调度器根据Pod的名称、Pod的Namespace值,到Etcd集群中查询该Pod配置的绑定节点配置,如果Etcd集群中没有到该Pod绑定节点的配置,则不执行绑定操作,并进行重新调度;S7、当被绑定节点上的Kubelet服务接收到Pod绑定请求后,执行Pod创建流程,至此完成Pod的创建流程,Etcd集群中存放的调度配置内容格式为Pod的名称与工作节点名称一一对应,当Pod重建时,该Statefulset创建的Pod依然会调度到该节点之上运行,保证挂载在工作节点上的数据Pod依然能够读取到,可靠性更高,当要将指定Pod绑定到新的工作节点之上时,通过容器云平台修改绑定配置,自定义调度器会根据该Pod新的绑定配置,将Pod绑定到新的工作节点之上运行,能够满足实际的使用需求。附图说明图1为本专利技术工作流程示意图。具体实施方式下面将结合本专利技术实施例本文档来自技高网
...

【技术保护点】
1.一种实现kubernetes自定义调度器的方法,其特征在于:具体包括以下步骤:/nS1、启动自定义调度器程序时,会通过Watch API机制连接到Kube-apiserver服务,实时监控Kubernetes集群中新建Pod产生的事件,将Pod事件存入到队列中,并根据Pod资源Yaml配置中的“schedulerName”字段过滤掉不需要调度的Pod;/nS2、管理员通过容器云平台创建应用,当创建应用时,指定应用创建的Pod绑定到指定工作节点的配置,用于将需要持久化数据到工作节点上的Pod与对应的工作节点进行绑定;/nS3、当容器云平台接收到应用创建请求时,将管理员配置的Pod绑定节点的配置格式化之后,提交到Etcd集群中;/nS4、根据管理员指定的配置,格式化生成Statefulset资源的配置文件并指定“schedulerName”字段的值为自定义调度器的名称,而后,调用Kube-apiserver的接口,将Statefulset资源提交到Kubernetes集群中;/nS5、当Kubernetes集群根据Statefulset配置生成Pod资源时,自定义调度器获取到该Pod资源配置,通过获取Pod中自定义的调度器名称,判断是否需要调度该Pod,当调度器名称与Pod中指定的调度器名称一致时,确定该Pod由本调度器执行调度操作;/nS6、调度器根据Pod的名称、Pod的Namespace值,到Etcd集群中查询该Pod配置的绑定节点配置,如果Etcd集群中没有到该Pod绑定节点的配置,则不执行绑定操作,并进行重新调度;/nS7、当被绑定节点上的Kubelet服务接收到Pod绑定请求后,执行Pod创建流程,至此完成Pod的创建流程。/n...

【技术特征摘要】
1.一种实现kubernetes自定义调度器的方法,其特征在于:具体包括以下步骤:
S1、启动自定义调度器程序时,会通过WatchAPI机制连接到Kube-apiserver服务,实时监控Kubernetes集群中新建Pod产生的事件,将Pod事件存入到队列中,并根据Pod资源Yaml配置中的“schedulerName”字段过滤掉不需要调度的Pod;
S2、管理员通过容器云平台创建应用,当创建应用时,指定应用创建的Pod绑定到指定工作节点的配置,用于将需要持久化数据到工作节点上的Pod与对应的工作节点进行绑定;
S3、当容器云平台接收到应用创建请求时,将管理员配置的Pod绑定节点的配置格式化之后,提交到Etcd集群中;
S4、根据管理员指定的配置,格式化生成Statefulset资源的配置文件并指定“schedulerName”字段的值为自定义调度器的名称,而后,调用Kube-apiserver的接口,将Statefulset资源提交到Kubernetes集群中;
S5、当Kubernetes集群根据Statefulset配置生成Pod资源时,自定义调度器获取到该Pod资源配置,通过获取Pod中自定义的调度器名称,判断是否需要调度该Pod,当调度器名称与Pod中指定的调度器名称一致时,确定该Pod由本调度器执行调度操作;
S6、调度器根据Pod的名称、Pod的Namespace值,到Etcd集群中查询该Pod配置的...

【专利技术属性】
技术研发人员:王伟华梅进
申请(专利权)人:广西梯度科技有限公司
类型:发明
国别省市:广西;45

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1