From 068d459619e2ae492834d19f7e0e7a99be68606e Mon Sep 17 00:00:00 2001 From: yinwenqin Date: Sat, 3 Aug 2019 14:52:04 +0800 Subject: [PATCH] init --- README.md | 45 ++++++++++++++++ scheduler/调度器初始化启动.md | 74 +++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 README.md create mode 100644 scheduler/调度器初始化启动.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..85d02df --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +## 前言 +在熟悉kubernetes及常用组件、插件的管理使用后,总还觉得差了些什么,不够通透,是时候来读一读源码了,结合代码与实际使用场景来互相印证,有助于对kubernetes的理解更为透彻。这里将会分多篇介绍kubernetes各核心组件的工作模式、调度管理算法等。 +注:本系列文章,全部基于最近部署的v1.14.3版本的源码 + +## 环境准备 +golang(安装步骤略,网上很多),我的环境如下: + +``` +GOPATH="/Users/ywq/go" +go version go1.11.6 darwin/amd64 +``` +注意:本系列文档中,GOPATH路径`/Users/ywq/go/`,在自己的环境下请替换成相应本地的GOPATH,这一点后面不再说明 + +``` +#拉取kubernetes项目源码: +cd /Users/ywq/go/ +mkdir -p src/k8s.io +cd src/k8s.io +git clone https://github.com/kubernetes/kubernetes.git +cd kubernetes +git checkout v1.14.3 # 切换到tag为v1.14.3的版本 +``` + +源码拉取完成后,用自己的IDE打开,准备工作完毕. + +## 核心组件 +- [Scheduler](https://note.youdao.com/) +- Controller +- 待补充 +- + +## Tips +md文档已同步至github: + +Kubernetes这一整个项目颇为庞大,一般情况下,如果熟悉kubernetes的应用,结合应用来理解源码的设计理念会容易许多,因此,对其应用不熟悉的朋友,不建议直接阅读源码。另外,目前处于边阅读代码边输出总结的阶段,如文中有误,请予以指正,非常感谢! + + + + +### 参考 +1.官方开发者向导md文档: https://github.com/kubernetes/community/tree/master/contributors/devel + +2.http://hutao.tech/k8s-source-code-analysis/ + + \ No newline at end of file diff --git a/scheduler/调度器初始化启动.md b/scheduler/调度器初始化启动.md new file mode 100644 index 0000000..3704058 --- /dev/null +++ b/scheduler/调度器初始化启动.md @@ -0,0 +1,74 @@ +# 调度器启动 + +## 前言 +本篇介绍scheduler的初始化相关逻辑 + +## 入口 +入口函数是位于`cmd/kube-scheduler/scheduler.go`中的main()方法,调用的是app.NewSchedulerCommand()方法,跳转至此方法,可以看到函数上方的注释: + +``` +// NewSchedulerCommand creates a *cobra.Command object with default parameters +func NewSchedulerCommand() *cobra.Command { + ... +} +``` +NewSchedulerCommand创建的是一个cobra.Command对象,后续的命令行处理相关功能都是借助cobra来实现的,那么继续往下之前,为了避免一脸懵,有必要了解一下cobra这个工具 + +## cobra +#### 什么是cobra? +github主页: https://github.com/spf13/cobra +主页的介绍是: Cobra是一个强大的用于创建现代化CLI命令行程序的库,用于生成应用程序和命令文件。众多高知名度的项目采用了它,例如我们熟悉的kubernetes和docker +cobra创建的程序CLI遵循的模式是: `APPNAME COMMAND ARG --FLAG`,与常见的其他命令行程序一样,例如git: `git clone URL --bare` + +#### 安装: + +``` +#最简单的安装方式,但毫无意外,事情并没有那么简单,我们的网络的问题,导致无法正常安装依赖, +go get -u github.com/spf13/cobra/cobra + +#怎么办呢?先进入GOPATH中,手动安装报错缺失的两个依赖: +cd /Users/ywq/go/ +mkdir -p src/golang.org/x +cd golang.org/x +git clone https://github.com/golang/text.git +git clone https://github.com/golang/sys.git + +#然后执行: +go install github.com/spf13/cobra/cobra +matebook-x-pro:x ywq$ ls /Users/ywq/go/bin/cobra +/Users/ywq/go/bin/cobra +#安装完毕,记得把GOBIN加入PATH环境变量哦,否则无法直接运行cobra命令 +``` + +#### 简单试用cobra: +``` +matebook-x-pro:local ywq$ cd /Users/ywq/go/src/local/ +matebook-x-pro:local ywq$ cobra init testapp --pkg-name=local/testapp +matebook-x-pro:local ywq$ ls +testapp +matebook-x-pro:local ywq$ ls testapp/ +LICENSE cmd/ main.go +matebook-x-pro:local ywq$ ls testapp/cmd/ +root.go +matebook-x-pro:local ywq$ cd testapp +matebook-x-pro:local ywq$ go run main.go +# 报错:subcommand is required,要求提供子命令 + +# 现在还未创建子命令,那么来创建几个试试: +matebook-x-pro:testapp ywq$ cobra add get +get created at /Users/ywq/go/src/local/testapp +matebook-x-pro:testapp ywq$ cobra add delete +delete created at /Users/ywq/go/src/local/testapp +matebook-x-pro:testapp ywq$ cobra add add +add created at /Users/ywq/go/src/local/testapp +matebook-x-pro:testapp ywq$ cobra add update +matebook-x-pro:testapp ywq$ ls cmd/ +add.go delete.go get.go root.go update.go + +# 创建完成,会发现cmd/目录下多了几个go文件,调用试试: +matebook-x-pro:testapp ywq$ go run main.go get +get called +matebook-x-pro:testapp ywq$ go run main.go add +add called +``` +