add-license-1
yinwenqin 6 years ago
commit 068d459619

@ -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/

@ -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
```
Loading…
Cancel
Save