1 在linux下編譯kubernetes
1) 安裝GO
下載Go并且配置相關(guān)環(huán)境變量,版本要求1.10+
https://golang.org/dl/
Download the archive and extract it into /usr/local, creating a Go tree in /usr/local/go. For example:
tar -C /usr/local -xzf go1.10.2.linux-amd64.tar.gz
Add /usr/local/go/bin to the PATH environment variable. You can do this by adding this line to your /etc/profile (for a system-wide installation) or $HOME/.profile:
export PATH=$PATH:/usr/local/go/bin
配置環(huán)境變量GOPath等,默認(rèn)是/root/go。
2) 下載k8s源碼
可以直接下載k8s源碼,也可以使用git clone,我是下的k8s源碼:
https://github.com/kubernetes/kubernetes/releases
我用的是目前的最新版:
v1.11.0-alpha.2
下載后,解壓到到gopath/src/k8s.io/.
tar -xzf
3) 安裝相關(guān)工具
godep工具
go get github.com/tools/godep
安裝hg工具
yum install mercurial
(否則會(huì)出godep: error downloading dep (bitbucket.org/ww/goautoneg): exec: "hg": executable file not found in $PATH)
4) godep獲取依賴(lài)包
cd /usr/lib/go-1.6/src/k8s.io/kubernetes
godep restore
這里會(huì)卡很久,我就跳過(guò)了。應(yīng)該用make會(huì)自動(dòng)做這件事。
5) 執(zhí)行編譯
直接在kubernetes目錄下,執(zhí)行make
這里需要4G+的內(nèi)存,最好8G,否則會(huì)出現(xiàn)錯(cuò)誤。
6) 執(zhí)行單元測(cè)試。
可以執(zhí)行g(shù)o test。
go test -v k8s.io/kubernetes/pkg/kubelet
也可以執(zhí)行
make test WHAT=./pkg/kubelet
2 在windows跑apiserver
1) 下載Go的IDE,推薦使用IDEA+go插件。
下載和配置參考https://xuxinkun.github.io/2016/03/21/idea-svn/
安裝IDE后導(dǎo)入k8s源碼,配置對(duì)應(yīng)的GOPATH,我的如下圖所示

2) 下載k8s源碼
我fork了當(dāng)前的github代碼,https://github.com/shinepengwei/kubernetes
直接編譯運(yùn)行kubernetes/cmd/kube-apiserver.go,會(huì)提示找不到GetOpenAPIDefinitions,這東西是OpenAPI的描述性文件,是在make階段生成的。
3) 從linux拷貝文件
第五步make時(shí)會(huì)生成/root/go/src/k8s.io/kubernetes/pkg/generated/openapizz_generated.openapi.go,把它拷貝到windows對(duì)應(yīng)的目錄。
4) 安裝etcd
windows下直接下載etcd的執(zhí)行文件https://github.com/coreos/etcd/releases,然后執(zhí)行,會(huì)自動(dòng)開(kāi)放2379端口。
5) 運(yùn)行調(diào)試
編譯運(yùn)行kubernetes/cmd/kube-apiserver.go已經(jīng)可以跑了,提示沒(méi)有配置etcd服務(wù)器地址。加一下"http://localhost:2379"這個(gè)地址就好了。
這樣就可以在windows的IDE下設(shè)斷點(diǎn)調(diào)試執(zhí)行api-server了,這樣閱讀代碼就方便多了。不過(guò)api-server的testcase在windows下并不能全部正常執(zhí)行,畢竟是linux程序。