k8s版本:v1.13

k8s代码的结构

api: 输出接口文档用,基本是json源码

build:构建脚本

cmd:所有的二进制可执行文件入口代码,也就是各种命令的接口代码。

pkg:项目diamante主目录,cmd只是接口,这里是具体实现。cmd类似业务代码,pkg类似核心

plugin:插件

test:测试相关的工具

third_party:第三方工具

docs:文档

example:使用例子

Godeps:项目依赖的Go的第三方包,比如docker客户端sdk,rest等

hack:工具箱,各种编译,构建,校验的脚本都在这。

translations :不同国家的语言包,使用poedit查看及编辑

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
/cmd/kube-scheduler
├── app  
   ├── BUILD
   ├── server.go  //schedule初始化以及运行启动函数
├── BUILD
├── OWNERS
├── scheduler.go   //schedule main函数
/pkg
├── plugin/pkg/admission
├── plugin/pkg/auth  //相关认证
├── plugin/pkg/scheduler  //schedule主要逻辑,包含预选优选算法、测量等
├── plugin/pkg/scheduler/algorithm  //schedule预选优选算法
├── ...
├── plugin/pkg/scheduler/schedulercache //schedule缓存,便于业务逻辑
├── plugin/pkg/scheduler/metrics// 测量相关
├── BUILD
├── testutil.go    
├── OWNERS
├── scheduler.go // scheduler的代码逻辑入口,其中scheduleOne函数就在里面
├── scheduler_test.go

根据功能主要分成以下三类: 1、文档类(api、docs、logo) 2、工具类(build、cluster、Godeps、hack、staging、translations) 3、代码类(cmd、pkg、plugin、test、third_party)

工具类主要用到的build目录下的文件,自己动手编译的时候会用到;核心代码集中在cmd和pkg中。 cmd内部包含各个组件的入口,具体核心的实现部分在pkg目录下,分别如图:

plugin目录之前的版本包括scheduler部分的代码,在1.10之后,已经将scheduler部分代码移到和其他组件一致的pkg目录,所以目前plugin主要包含的是认证鉴权部分的代码。

参考的学习资料

https://github.com/farmer-hutao/k8s-source-code-analysis/blob/master/README.md

https://juejin.im/post/6844903795198001166