scheduler 源码解析
上一篇文章主要介绍了kubernetes scheduler的原理kubernetes原理解读——scheduler
本文主要对kubernetes的scheduler模块的源码进行分析。
scheduler源码结构
kubernetes scheduler 模块在kubernetes源码目录的/kubernetes/plugin
下,由于调度算法不同公司往往会依据自己的需求进行定制化,这里设计成plugin形式,方便定制化开发。下面是scheduler的目录结构,会详细介绍一下各个文件的功能:
.
├── BUILD
├── OWNERS
├── cmd # scheduler模块的启动代码
│ └── kube-scheduler
│ ├── BUILD
│ ├── OWNERS
│ ├── app # scheduler app server的启动逻辑
│ │ ├── BUILD
│ │ ├── configurator.go # app启动run函数中子过程的实现
│ │ ├── configurator_test.go
│ │ ├── options
│ │ │ ├── BUILD
│ │ │ └── options.go #定义了SchedulerServer结构体
│ │ └── server.go # SchedulerServer启动逻辑
│ └── scheduler.go # scheduler模块的的入口函数
└── pkg
└── scheduler
├── BUILD
├── OWNERS
├── algorithm # 预选和优选方法详细实现
│ ├── BUILD
│ ├── doc.go
│ ├── listers.go # 定义各类Lister接口
│ ├── predicates # predicate policy的主要函数实现
│ │ ├── BUILD
│ │ ├── error.go
│ │ ├── metadata.go
│ │ ├── predicates.go # 各个predicate policy函数实现
│ │ ├── predicates_test.go
│ │ ├── utils.go
│ │ └── utils_test.go
│ ├── priorities # kube自带priority policy的主要实现
│ │ ├── BUILD
│ │ ├── balanced_resource_allocation.go #资源均衡节点优选
│ │ ├── balanced_resource_allocation_test.go
│ │ ├── image_locality.go # 已获取镜像节点优先
│ │ ├── image_locality_test.go
│ │ ├── interpod_affinity.go # InterPodAffinityPriority
│ │ ├── interpod_affinity_test.go
│ │ ├── least_requested.go # Least Requested Priority
│ │ ├── least_requested_test.go
│ │ ├── metadata.go
│ │ ├── metadata_test.go
│ │ ├── most_requested.go # MostRequestedPriority
│ │ ├── most_requested_test.go
│ │ ├── node_affinity.go # CalculateNodeAffinityPriority
│ │ ├── node_affinity_test.go
│ │ ├── node_label.go # 机器上是否存在label
│ │ ├── node_label_test.go
│ │ ├── node_prefer_avoid_pods.go
│ │ ├── node_prefer_avoid_pods_test.go
│ │ ├── selector_spreading.go # SelectorSpreadPriority
│ │ ├── selector_spreading_test.go
│ │ ├── taint_toleration.go #TaintTolerationPriority
│ │ ├── taint_toleration_test.go
│ │ ├── test_util.go
│ │ └── util
│ │ ├── BUILD
│ │ ├── non_zero.go
│ │ ├── topologies.go
│ │ └── util.go
│ ├── scheduler_interface.go # 定义SchedulerExtender接口和ScheduleAlgorithm接口
│ ├── scheduler_interface_test.go
│ └── types.go
├── algorithmprovider #一组predicates和priorities的组合
│ ├── BUILD
│ ├── defaults
│ │ ├── BUILD
│ │ ├── compatibility_test.go
│ │ └── defaults.go #kubernetes默认的预选优选policies
│ ├── plugins.go
│ └── plugins_test.go
├── api
│ ├── BUILD
│ ├── latest
│ │ ├── BUILD
│ │ └── latest.go #定义api版本