Kubernetes调度器与扩展器详解与分析
·
Kubernetes调度器与扩展器详解与分析
1. Kubernetes调度器概述
Kubernetes调度器(kube-scheduler)是Kubernetes集群的核心组件之一,负责将Pod分配到合适的节点上运行。
其核心目标是:
- 资源优化:确保集群资源(CPU、内存、GPU等)被高效利用。
- 策略驱动:根据用户定义的策略(如节点亲和性、资源请求等)进行调度。
- 高可用性:支持多副本部署,避免单点故障。
2. 调度器的工作流程
- 监听Pod事件
调度器通过Watch机制监听Kube-APIServer,筛选出PodSpec.NodeName为空的Pod(即未调度的Pod)。 - 调度周期(Scheduling Cycle)
- 预选阶段(Predicates):
遍历集群中的所有节点,通过预选策略(如资源匹配、端口冲突、节点亲和性等)过滤掉不满足条件的节点。 - 优选阶段(Priorities):
对通过预选的节点进行打分(0-10分),选择得分最高的节点作为最佳调度目标。
- 绑定周期(Binding Cycle)
将Pod与选定的节点进行绑定,更新Kube-APIServer中的Pod信息
3.调度器的扩展方式
(1)默认调度器修改(Default Scheduler)
- 方式:直接修改Kubernetes默认调度器的代码,重新编译部署。
- 缺点:侵入性强,升级和维护困难。
(2)独立调度器(Standalone Scheduler)
- 方式:实现一个独立的调度器,与默认调度器并行运行。
- 优点:灵活性高,不与默认调度器冲突。
- 缺点:需要自行处理资源竞争和调度策略的一致性。
(3)调度器框架插件(Scheduler Framework)
- 方式:通过实现插件接口(如QueueSort、Filter、Score等)扩展调度逻辑。
- 优点:标准化、插件化,易于维护和升级。
- 适用场景:需要深度定制调度策略的场景。
(4)调度器扩展器(Scheduler Extender)
- 方式:通过HTTP/HTTPS接口与外部服务交互,实现自定义调度逻辑。
- 优点:非侵入式,无需修改调度器代码。
- 缺点:
- 性能开销大(HTTP通信+JSON序列化)。
- 错误处理复杂,无法共享调度器缓存
4. Extender 模式
介绍:
Extender 模式是 Kubernetes 调度器的一种扩展机制,允许用户在不修改调度器核心代码的情况下,通过外部服务(Extender)实现自定义调度逻辑。Extender 以独立服务的形式运行,通过 HTTP/HTTPS 与调度器通信,实现预选(Predicates)、优选(Priorities)和绑定(Bind)等扩展功能.
工作原理
- 调度器调用时机:在默认调度策略执行完成后,调度器会根据配置调用 Extender 的接口
- 通信方式:通过 HTTP/HTTPS 协议,以 JSON 格式传递数据。
- 接口类型:
- Filter(预选):过滤不满足条件的节点。
- Prioritize(优选):对节点进行打分。
- Bind(绑定):将 Pod 绑定到节点。
Extender 的配置
Extender 的配置通过调度器的策略配置文件(JSON 格式)定义,主要字段包括
{
"urlPrefix": "http://extender-server:port",
"filterVerb": "filter",
"prioritizeVerb": "prioritize",
"bindVerb": "bind",
"weight": 5,
"managedResources": ["example.com/gpu"]
}
更多推荐

所有评论(0)