如何定制Kubernetes调度算法?

本文探讨了Kubernetes调度器的架构及其可扩展性,提出了两种自定义调度算法BNP和CMDN,旨在优化网络IO和资源分配。通过Scheduler Extender机制实现扩展调度器Liang,实验表明这两种算法能有效提升资源利用率和集群性能。
摘要由CSDN通过智能技术生成

随着云计算和容器技术的发展,以docker为核心的容器技术迅速在开发者和科技公司中应用,Kubernetes凭借丰富的企业级、生产级功能成为事实上的容器集群管理系统。可是k8s的通用性削弱了调度算法的定制性,本文将调研定制化调度算法的方法,并且给出一个开源实现。

k8s与调度器架构

图1-1是Kubernetes的整体架构图,集群节点分为两种角色:Master节点Node节点。Master节点是整个集群的管理中心,负责集群管理、容器调度、状态存储等组件都运行在Master节点上;Node节点是实际上的工作节点,负责运行具体的容器。

bf1c44385bc892974ba8b369152186d0.png

图 1-1 Kubernetes整体架构

Kubernetes调度器是独立运行的进程,内部运行过程从逻辑上可以分为多个模块。图1-2展示了默认调度器内部包含的具体模块,配置模块负责读取调度器相关配置信息,并且根据配置内容初始化调度器。

  • 优先队列模块是一个优先堆数据结构,负责将待调度Pod根据优先级排序,优先级高的Pod排在前面,调度器会轮询优先队列,当队列中存在待调度Pod时就会执行调度过程[1]

  • 调度模块由算法模块Node缓存调度扩展点三部分组成,算法模块提供对Node进行评分的一系列基础算法,比如均衡节点CPU和内存使用率的NodeResourcesBalancedAllocation算法,算法模块是可扩展的,用户可以修改和添加自己的调度算法;Node缓存模块负责缓存集群节点的最新状态数据,为调度算法提供数据支撑;调度扩展点由一系列扩展点构成,每个扩展点负责不同的功能,最重要的扩展点是Filter、Score和Bind这三个扩展点。

  • 最后是绑定模块,负责将调度器选择的Node和Pod绑定在一起。

01783ca1e28ba9a0160b28b6c9a3d7ef.png

图 1-2 Kubernetes调度器架构

Kubernetes调度器代码采用可插拔的插件化设计思路,包括核心部分和可插拔部分。图1-2中的配置模块、优先队列和Node缓存是核心部分,算法模块、调度扩展点属于可插拔部分。这种插件化设计允许调度器一些功能通过插件的方式实现,方便代码修改和功能扩展,同时保持调度器核心代码简单可维护[

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值