k8s (kubernetes) 代码分析
结构图:

API源码分析
API server 是中心. https://www.jianshu.com/p/88c6ed78b668
$ git ls-files |grep apiserver |less
cmd/kube-apiserver/apiserver.go 是入口
scheduler 源码分析.
$ git ls-files |grep scheduler |less
可以看到 scheduler 的主要目录,有cmd, algorithm, api ...
可以猜出来这些文件是干啥的.
算法下面:
ls plugin/pkg/scheduler/algorithm/
BUILD doc.go listers.go predicates priorities scheduler_interface.go scheduler_interface_test.go types.go

cmd是 就是command吗,main 函数的入口.
打开 plugin/cmd/kube-scheduler/scheduler.go 发现启动了一个SchedulerServer.
深入进去
配置
plugin/cmd/kube-scheduler/app/options/options.go -> pkg/apis/componentconfig/types.go
看到其实 KubeSchedulerConfiguration, 就是一个http的server.
看来这个与openstack不同,不是采用rpc通信.
监听的server
plugin/cmd/kube-scheduler/app/server.go
Run 起了两个server.
1. startHTTP
主要是 Profiling 和 metrics
2. sched.Run
需要先创建有两个函数scheduler,有两个函数 CreateFromProvider 和 CreateFromConfig.
主要执行的函数是scheduleOne
做了一个Binding, 不知道做啥用,先看 pkg/api/v1/types.go 说明
// Binding ties one object to another.
// For example, a pod is bound to a node by a scheduler.
type Binding struct {
metav1.TypeMeta `json:",inline"`
// Standard object's metadata.
// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
// +optional
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // The target object that you want to bind to the standard object.
Target ObjectReference `json:"target" protobuf:"bytes,2,opt,name=target"`
}
开启的貌似是个http的client.
主要数据结构看 plugin/pkg/scheduler/scheduler.go 中Config的定义.
3. 还有LeaderElection, 先略过去, 后面单独分析选举算法.
4. 具体怎么找到未分配的pod, 还需要进一步的分析.
http://cizixs.com/ 写了一系列的分析文章
对比opentstack的schedule
Kubelet源码分析(一):启动流程分析
入口 cmd/kubelet/kubelet.go
有很多分析 http://cizixs.com/
自己动手打包编译
k8s (kubernetes) 代码分析的更多相关文章
- k8s源码分析准备工作 - 源码准备
本文原始地址:https://farmer-hutao.github.io/k8s-source-code-analysis/ 项目github地址:https://github.com/farmer ...
- Kubernetes代码解读-apiserver之list-watch
list-watch,作为k8s系统中统一的异步消息传递方式,对系统的性能.数据一致性起到关键性的作用.今天我想从代码这边探究一下list-watch的实现方式.并看是否能在后面的工作中优化这个过程. ...
- sidecar-inject代码分析
Istio通过对serviceMesh中的每个pod注入sidecar,来实现无侵入式的服务治理能力.其中,sidecar的注入是其能力实现的重要一环(本文主要介绍在kubernetes集群中的注入方 ...
- k8s garbage collector分析(1)-启动分析
k8s garbage collector分析(1)-启动分析 garbage collector介绍 Kubernetes garbage collector即垃圾收集器,存在于kube-contr ...
- k8s garbage collector分析(2)-处理逻辑分析
garbage collector介绍 Kubernetes garbage collector即垃圾收集器,存在于kube-controller-manger中,它负责回收kubernetes中的资 ...
- k8s endpoints controller分析
k8s endpoints controller分析 endpoints controller简介 endpoints controller是kube-controller-manager组件中众多控 ...
- 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)
前言 我们之前搭建了第一个docker项目: windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互):https://www.cnblogs.com/xiongze520/p ...
- k8s replicaset controller分析(1)-初始化与启动分析
replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...
- Android代码分析工具lint学习
1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...
随机推荐
- Redux 笔记详解
npm install --save redux 多数情况下,你还需要使用 React 绑定库和开发者工具. npm install --save react-redux npm install -- ...
- 从零开始一起学习SLAM | 你好,点云
本文提纲 先热热身点云是啥你知道点云优缺点吗?点云库PCL:开发者的福音PCL安装指北炒鸡简单的PCL实践留个作业再走先热热身 小白:hi,师兄,好久不见师兄:师妹好,上周单应矩阵作业做了吗?小白:嗯 ...
- node.js初识12
1.express框架属于后端的框架 cnpm install --save express --save的作用是将下载的保存在package.json中 你可以点击http://www.expres ...
- Hello py
https://www.cnblogs.com/AdaminXie/p/8339863.html https://www.cnblogs.com/-clq/p/8340515.html https:/ ...
- discuz用户组
非公众用户组当用户组设置为“非公众用户组”时,无论是以主用户组的形式,还是以扩展用户组的形式,均只能由管理员手工将用户加入本组. 公众用户组当本用户组设置为“公众用户组”,且用户当前所在的用户组被允许 ...
- keras tensorboard的使用
http://blog.csdn.net/xiaojiajia007/article/details/72865764 https://stackoverflow.com/questions/4211 ...
- xpath ,css
https://docs.scrapy.org/en/latest/intro/tutorial.html xpath @选择属性 .当前目录下选择 //任意路径选择 /bookstore/book ...
- codeoforces 932A
题意: A和B在玩一个游戏,首先有一个X0 >= 3,之后选择一个小于X0的质数p,然后在找一个最小的X1 >= X0,并且p可以整除X1:之后再选择一个小于X1的质数p,然后再找一个最小 ...
- Mybatis分页插件pagehelper的使用
加入依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pageh ...
- GCD(III)
GCD 线程间的通信 在iOS开发过程中,我们一般在主线程里边进行UI刷新,例如:点击.滚动.拖拽等事件.我们通常把一些耗时的操作放在其他线程,比如说图片下载.文件上传等耗时操作.而当我们有时候在其他 ...