本发明属于kubernetes云平台领域,具体的说是一种自动化更新kubernetes调度器的方法。
背景技术:
1、目前生产环境一般以单调度器方式部署,以规避多调度器因为状态不共享带来的资源竞争问题,调度器是操作系统中的一个重要功能部件,主要负责将系统中的任务或进程调度到各个cpu上去执行,而kubernetes调度器以静态pod方式部署,由kubelet守护进程管理,当manifest配置文件变更时,kubelet会重新拉起调度器容器组,所以更新时需手动更改配置文件,从而触发新的调度器pod拉起。目前业界常规方式是ssh登录到对应节点,更新调度器的manifest文件以调整调度器的镜像和配置内容,但是这种方式方式缺乏任务状态管理,且难以处理大量节点。
2、如授权公告号为cn111352717b的中国专利公开了一种实现kubernetes自定义调度器的方法,其特征是,将pod事件存入到队列中,并根据pod资源yaml配置中的“schedulername”字段过滤掉不需要调度的pod;指定应用创建的pod绑定到指定工作节点的配置;将管理员配置的pod绑定节点的配置格式化之后,提交到etcd集群中;将statefulset资源提交到kubernetes集群中;判断是否需要调度该pod;本发明涉及容器编排技术领域。该实现kubernetes自定义调度器的方法,当pod重建时,该statefulset创建的pod依然会调度到该节点之上运行,保证挂载在工作节点上的数据pod依然能够读取到,当要将指定pod绑定到新的工作节点之上时,通过容器云平台修改绑定配置,自定义调度器会根据该pod新的绑定配置,将pod绑定到新的工作节点之上运行,能够满足实际的使用需求。
3、如申请公开号为cn116841718a的中国专利公开了基于kubernetes的物理资源调度方法及调度器,本发明包括:通过获取kubernetes集群中的调度信息,调度信息包括待调度pod的pod信息以及各节点的负载信息;然后遍历各节点,将待调度pod的pod信息以及当前节点的负载信息输入至调度评价模型,得到调度评价模型输出的待调度pod被调度至当前节点时的评价信息;最好基于各节点对应的评价信息,对待调度pod进行调度。该方法引入了当前节点的负载信息,避免了只考虑硬件资源而导致的节点上物理资源出现异常的情况,保证了kubernetes集群的安全运行,提高了kubernetes集群的稳定性。
4、以上现有技术均存在以下问题:1)无法自动化、规模化处理,无法满足大量的调度器更新需求;2)调度器更新缺乏保障机制;3)依赖ssh。
技术实现思路
1、针对现有技术的不足,本发明提出了一种自动化更新kubernetes调度器的方法,基于job方式更新调度器,生成作业任务的描述文件,仅在master节点运行,且增加滚动更新调度器、调度器更新回滚保障机制,减少更新过程对集群稳定性的影响。
2、为实现上述目的,本发明提供如下技术方案:
3、一种自动化更新kubernetes调度器的方法,包括:
4、步骤s1:配置apiserver虚拟机,部署高可用kubernetes集群;
5、步骤s2:配置job controller,利用job controller生成master节点的kubernetes jobs并提交到apiserver部署的kubernetes集群;
6、步骤s3:kubernetes集群中的kubelet检测到新的job配置文件,滚动更新机制拉起job配置文件对应的pod并执行更新调度器逻辑;
7、步骤s4:检查job状态,验证更新结果。
8、具体的,所述步骤s1中高可用kubernetes集群包括3个master节点。
9、具体的,所述步骤s2的具体步骤包括:
10、步骤s201:获取master节点信息;
11、步骤s202:生成job描述信息,并对绑定的节点进行限制;
12、步骤s203:根据不同的灰度策略提交任务。
13、具体的,所述步骤s202中对绑定的节点进行限制的具体方法包括:
14、步骤s2021:对于有label标注的节点使用nodeselector限定job执行范围;
15、步骤s2022:没有label标注的集群,通过api查询master节点列表,然后通过nodename限定job的执行范围。
16、具体的,所述步骤s203的具体步骤包括:
17、步骤s2031:根据需求和策略,确定要使用的灰度策略;
18、步骤s2032:使用yaml或json配置文件创建一个kubernetes jobs;
19、步骤s2033:使用dockerfile构建新的docker镜像,为新的docker镜像添加标签,并将构建的docker镜像推送到一个可访问的dockerregistry;
20、步骤s2034:在kubernetes jobs的配置文件中,更新容器镜像的引用,指向新的docker镜像,并根据灰度策略,更新部署目标、端口号的配置参数;
21、步骤s2035:使用kubectl命令或kubernetesapi将更新后的kubernetes jobs提交到apiserver部署的kubernetes集群。
22、具体的,所述步骤s3的具体步骤包括:
23、步骤s301:检测新的job配置文件,分析文件内容并根据定义的pod布局和策略以创建和启动新的pod;
24、步骤s302:增加滚动更新机制,在滚动更新机制中,kubelet将新的pod添加到kubernetes集群中,同时将旧的pod进行替换或删除;
25、步骤s303:拉起job配置文件对应的pod;
26、步骤s304:启动pod,容器执行相应的更新调度器逻辑。
27、具体的,所述步骤s4的具体步骤包括:
28、步骤s401:使用kubernetesapi或kubectl命令获取更新后job的状态;
29、步骤s402:分析获取到的job状态信息,检查是否有错误或异常;
30、步骤s403:根据job配置文件中的定义,验证更新后的调度器运行状态;
31、步骤s404:验证更新结果,进行性测试测试和验证操作;
32、步骤s405:清理不再需要的临时文件或资源,持续监控调度器的性能和集群的状态。
33、具体的,所述步骤s402中状态信息包括:job的名称、描述、执行策略、依赖项。
34、具体的,一种自动化更新kubernetes调度器的方法,其特征在于,包括:jobcontroller模块、jobs模块,
35、所述job controller模块,用于生成作业任务的描述文件,并提交到apiserver;
36、所述jobs模块,用于执行升级调度器的逻辑。
37、具体的,所述job controller模块包括:状态管理单元、任务调度单元、任务执行单元、更新管理单元,
38、所述状态管理单元,用于维护job的状态信息;
39、所述任务调度单元,用于根据定义的执行策略和依赖关系,负责确定job执行的具体任务和顺序;
40、所述任务执行单元,用于与kubernetes api交互,创建、启动和监控pod来执行任务;
41、所述更新管理单元,用于分析新的job配置文件,根据滚动更新机制逐步引入新的版本,并协调任务的滚动升级过程。
42、与现有技术相比,本发明的有益效果是:
43、1.本发明提出一种自动化更新kubernetes调度器的方法,并进行了架构、运行步骤和流程上的优化改进,系统具备流程简单,投资运行费用低廉,生产工作成本低的优点。
44、2.本发明提出一种自动化更新kubernetes调度器的方法,基于kubernetes job实现升级调度器逻辑,不依赖ssh,适用于不能使用ssh的环境,支持查看任务进度信息和状态。
45、3.本发明提出一种自动化更新kubernetes调度器的方法,增加作业状态管理、灰度更新和操作回滚功能,更新过程更加可靠,减少更新失败带来的影响,同时,更新方式采用自动化更新,适用于大规模更新场景。