云其它

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > 云其它 > k8s扩展调度能力

k8s扩展调度能力的三种实现方式

作者:云原生运维

Kubernetes调度器扩展主要通过调度框架和调度器扩展器实现,调度框架提供多种插件接口,如QueueSort、Filter、Score等,允许扩展调度逻辑,调度器扩展器通过HTTP服务扩展调度功能,支持Filter、Prioritize等扩展点

Kubernetes 调度器扩展原理

Kubernetes 调度器扩展主要通过两种机制实现:

调度框架(Scheduling Framework)调度器扩展器(Extender)

前者是内置的可编程插件体系,后者是外部的独立服务。

调度框架(Scheduling Framework)

调度框架将调度过程分解为多个阶段,每个阶段允许通过插件扩展:

1. 调度周期(Scheduling Cycle)

2. 绑定周期(Binding Cycle)

插件通过实现接口注册到框架,例如:

type ScorePlugin interface {
    Score(ctx context.Context, state *CycleState, pod *v1.Pod, nodeName string) (int64, *Status)
}

调度器扩展器(Extender)

Extender 是独立于调度器的 HTTP 服务,通过配置 kube-scheduler--policy-config-file 实现扩展:

1. 扩展点支持

2. 通信协议

调度器通过 HTTP POST 请求与 Extender 交互,请求体包含 Pod 和节点列表,响应返回过滤结果或打分。

示例 Filter 请求体:

{
  "Pod": {"metadata": {"name": "nginx"}},
  "Nodes": {"items": [{"metadata": {"name": "node-1"}}]}
}

3. 配置示例

{
  "extenders": [{
    "urlPrefix": "http://extender-service:80",
    "filterVerb": "filter",
    "prioritizeVerb": "prioritize",
    "weight": 1
  }]
}

自定义调度器(Custom Scheduler)

完全独立的调度器实现:

  1. 监听未调度的 Pod(pod.spec.schedulerName 匹配自定义名称)。
  2. 调用 Kubernetes API 完成绑定(需具备 bind 权限)。
  3. 可与默认调度器共存,通过 schedulerName 区分。

性能与隔离考量

典型场景选择:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文