K8S学习指南(62)-K8S源代码走读之Kube-Scheduler
发布时间:2024年01月05日
前言
Kubernetes 源代码存放在 GitHub 上,你可以通过以下链接获取:Kubernetes GitHub 仓库。Kube-Scheduler 相关的代码位于 pkg/scheduler
和 cmd/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 的源代码走读提供了帮助。
文章来源:https://blog.csdn.net/zhaopeng_yu/article/details/135046963
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!