K8S学习指南(62)-K8S源代码走读之Kube-Scheduler

文章目录

    • 前言
    • Kube-Scheduler 的代码结构
    • Kube-Scheduler 的核心逻辑
      • 1. 调度框架
        • 1.1 阶段划分
        • 1.2 阶段执行
      • 2. 调度算法
        • 2.1 优先级函数
        • 2.2 优选函数
      • 3. 调度器插件
        • 3.1 预选插件
        • 3.2 优选插件
        • 3.3 绑定插件
      • 4. 节点选择
        • 4.1 候选节点选择
        • 4.2 节点权重计算
      • 5. 调度事件处理
        • 5.1 调度事件处理逻辑
        • 5.2 事件队列
    • 二次开发扩展点
      • 1. 调度器插件的自定义
        • 1.1 自定义预选插件
        • 1.2 自定义优选插件
        • 1.3 自定义绑定插件
      • 2. 调度算法的自定义
        • 2.1 优先级函数的扩展
        • 2.2 优选函数的扩展
      • 3. 调度器的扩展
        • 3.1 调度器阶段的扩展
        • 3.2 调度器事件处理的扩展
    • 结语

前言

Kubernetes 源代码存放在 GitHub 上,你可以通过以下链接获取:Kubernetes GitHub 仓库。Kube-Scheduler 相关的代码位于 pkg/schedulercmd/kube-scheduler 等目录中。

  • pkg/scheduler: 包含了 Kube-Scheduler 的核心逻辑,如调度算法、预选和绑定等。
  • cmd/kube-scheduler: 包含 Kube-Scheduler 的入口文件,以及启动 Kube-Scheduler 所需的配置和参数。

Kube-Scheduler 的代码结构

pkg/scheduler 目录下,Kube-Scheduler 的代码结构主要分为以下几个模块:

  • algorithm: 包含调度算法的实现,如优先级函数等。
  • framework: 包含调度框架的实现,定义了调度器的各个阶段。
  • plugins: 包含各种调度器插件的实现,如预选插件和绑定插件。
  • stages: 包含调度器各个阶段的具体实现,如预选阶段、优选阶段等。

Kube-Scheduler 的核心逻辑

1. 调度框架

1.1 阶段划分
  • 代码位置: pkg/scheduler/framework/framework.go
  • 主要功能: 定义了调度器的各个阶段,包括预选、优选等。
1.2 阶段执行
  • 代码位置: pkg/scheduler/scheduler.go
  • 主要功能: 调度器在执行时按照预定义的阶段顺序,依次调用每个阶段的处理逻辑。

2. 调度算法

2.1 优先级函数
  • 代码位置: pkg/scheduler/algorithm/priorities.go
  • 主要功能: 定义了调度器中用于计算优先级的各种函数,影响 Pod 的调度顺序。
2.2 优选函数
  • 代码位置: pkg/scheduler/algorithm/predicates.go
  • 主要功能: 定义了调度器中用于筛选可行节点的各种函数,影响 Pod 的可调度性。

3. 调度器插件

3.1 预选插件
  • 代码位置: pkg/scheduler/plugins/
  • 主要功能: 预选插件影响节点的可用性,决定哪些节点可以继续参与调度。
3.2 优选插件
  • 代码位置: pkg/scheduler/plugins/
  • 主要功能: 优选插件通过给节点打分,影响节点的优选顺序,最终决定 Pod 被调度到哪个节点。
3.3 绑定插件
  • 代码位置: pkg/scheduler/plugins/
  • 主要功能: 绑定插件负责确定 Pod 被绑定到哪个节点上。

4. 节点选择

4.1 候选节点选择
  • 代码位置: pkg/scheduler/algorithm/predicates.go
  • 主要功能: 调度器在节点选择阶段根据预选和优选函数选择候选节点。
4.2 节点权重计算
  • 代码位置: pkg/scheduler/algorithm/priorities.go
  • 主要功能: 调度器通过计算节点的权重,最终确定 Pod 被调度到哪个节点。

5. 调度事件处理

5.1 调度事件处理逻辑
  • 代码位置: pkg/scheduler/scheduler.go
  • 主要功能: 调度器根据调度事件的类型,执行相应的事件处理逻辑。
5.2 事件队列
  • 代码位置: pkg/scheduler/factory/factory.go
  • 主要功能: 调度器使用事件队列来异步处理调度事件,确保调度逻辑是非阻塞的。

二次开发扩展点

1. 调度器插件的自定义

1.1 自定义预选插件
  • 代码位置: pkg/scheduler/plugins/
  • 主要功能: 你可以编写自定义的预选插件,以实现对节点可用性的自定义判断逻辑。
1.2 自定义优选插件
  • 代码位置: pkg/scheduler/plugins/
  • 主要功能: 你可以编写自定义的优选插件,以实现对节点优选顺序的自定义调整。
1.3 自定义绑定插件
  • 代码位置: pkg/scheduler/plugins/
  • 主要功能: 你可以编写自定义的绑定插件,以实现对 Pod 绑定到节点的自定义策略。

2. 调度算法的自定义

2.1 优先级函数的扩展
  • 代码位置: pkg/scheduler/algorithm/priorities.go
  • 主要功能: 你可以编写自定义的优先级函数,以实现对 Pod 调度优先级的自定义计算。
2.2 优选函数的扩展
  • 代码位置: pkg/scheduler/algorithm/predicates.go
  • 主要功能: 你可以编写自定义的优选函数,以实现对节点的可调度性的自定义判断。

3. 调度器的扩展

3.1 调度器阶段的扩展
  • 代码位置: pkg/scheduler/framework/framework.go
  • 主要功能: 你可以扩展调度器的各个阶段,以实现对调度流程的自定义控制。
3.2 调度器事件处理的扩展
  • 代码位置: pkg/scheduler/scheduler.go
  • 主要功能: 你可以扩展调度器的事件处理逻辑,以实现对调度事件的自定义响应。

结语

以上是 Kubernetes Kube-Scheduler 部分的一个简要走读。为了深入理解和学习,建议直接查阅 Kubernetes 源代码,并深入阅读相关文档。希望这个指导对你进行 Kubernetes Kube-Scheduler 的源代码走读提供了帮助。

你可能感兴趣的:(k8s学习指南,kubernetes,etcd,容器)