kubernetes调度组件kube-scheduler源码分析
来源:互联网 发布:app数据抓取 编辑:程序博客网 时间:2024/06/09 18:30
2 默认调度算法介绍
3 数据结构
runtime.GOMAXPROCS(runtime.NumCPU())
s:=options.NewSchedulerServer()
s.AddFlags(pflag.CommandLine)
util.InitFlags()
util.InitLogs()
defer util.FlushLogs()
verflag.PrintAndExitIfRequested()
app.Run(s)
}
主函数首先构建并初始化schedulerserver结构体,下面来看看主要数据结构
调度可以分成两个部分,第一部分是调度算法部分,第二部分是调度执行部分。
genericScheduler 调度执行部分的数据结构
type genericScheduler struct{
cacheschedulercache.Cache
predicates map[string]algorithm.FitPredicate
prioritizers []algorithm.PriorityConfig
extenders []algorithm.SchedulerExtender
pods algorithm.PodLister
random *rand.Rand
random Locksync.Mutex
lastNodeIndex uint64
}
FitPredicate函数用来在Node中判断POD请求的资源是否满足需要。
type PriorityConfig struct{
Function PriorityFunction
Weight int
}
PriorityConfig结构体包括Function函数和Weight整型变量,Function函数用来表示预测算法,Weight变量用来表示预测算法权重。
genericScheduler中Schedule是负责调度的函数,里面用到了findNodesThatFit和PrioritizeNodes两个函数。
4 执行流程
1、新建schedulerserver结构体
2、传入参数并初始化
run
1、通过kubeconfig创建kubeclient用于访问APIserver
2、创建htttpserver用于性能分析,性能指标度量
3、创建scheduler.config对象(定期获取已经调度的pod列表,并从modeler假定队列中删除。监控可用的node,获取service列表、
创建genericScheduler对象)
4、run不停执行scheduleOne(获取下一个待调度的pod,具体由genericScheduler调度)
kubernetes调度通过结构体genericScheduler最后选取出了一个Node,但是在这个node上面创建pod的工作并没有做。
5、Binding,这个结构体的作用是建立将一个对象绑定到另一个对象的关系,比如在调度过程中将POD绑定到一个Node上,在这个
结构体中就是将ObjectMeta(POD)绑定到ObjectReference(Node)上。
type Binding struct{
unversioned.TypeMeta`json:",inline"`
//ObjectMetadescribestheobjectthatisbeingbound.
ObjectMeta`json:"metadata,omitempty"`
//Targetistheobjecttobindto.
TargetObjectReference`json:"target"`
}
在建立好POD同Node的绑定关系后,执行bindAction函数
6、把调度结果放入假定调度队列中。
- kubernetes调度组件kube-scheduler源码分析
- 【kubernetes/k8s源码分析】kube-scheduler 源码分析
- kubernetes的kube-apiserver组件源码分析
- kubernetes源码分析 -- kube-proxy
- kube-scheduler 组件源码阅读笔记
- Kubernetes Scheduler源码分析
- 【原创】k8s源码分析-----kube-scheduler
- kubernetes之kube-proxy源码分析
- [Kubernetes][scheduler模块源码分析]
- kube-scheduler 组件源码阅读笔记(二)
- 【kubernetes/k8s源码分析】kube-controller-manager 启动流程分析
- nova scheduler 调度实现分析 源码分析
- kubernetes源码分析 -- kubelet组件
- 【kubernetes/k8s源码分析】kube-controller-manager之replication controller源码分析
- 【kubernetes/k8s源码分析】kube-controller-manager之node controller源码分析
- 【kubernetes/k8s源码分析】kube-controller-manager之endpoint controller源码分析
- Kubernetes Scheduler 调度- Node信息管理
- GlusterFS:调度(Scheduler)算法源码分析
- 嵌入式实时操作系统http://www.trtos.com/
- React native:我的windows环境
- [Python]一起来写一个Python爬虫工具类whyspider
- 什么是原子性(r)
- Jmeter+fidder接口测试案例
- kubernetes调度组件kube-scheduler源码分析
- 【垂直搜索引擎搭建10】HtmlParser中Filter实践
- A Self-paced Multiple-instance Learning Framework for Co-saliency Detection文章阅读
- JVM——Java类加载机制总结
- Dubbo-----'消费方'注解引用'提供方'的接口时报空指针
- 解决qextserialport-1.2rc在window下编译提示“DEVICE_NOTIFY_ALL_INTERFACE_CLASSES”未定义错误
- 分页的总页数算法
- GitHub详细教程
- Flurry analytics SDK集成步骤及功能简介