1 在linux下編譯kubernetes
1) 安裝GO
下載Go并且配置相關環境變量,版本要求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
配置環境變量GOPath等,默認是/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) 安裝相關工具
godep工具
go get github.com/tools/godep
安裝hg工具
yum install mercurial
(否則會出godep: error downloading dep (bitbucket.org/ww/goautoneg): exec: "hg": executable file not found in $PATH)
4) godep獲取依賴包
cd /usr/lib/go-1.6/src/k8s.io/kubernetes
godep restore
這里會卡很久,我就跳過了。應該用make會自動做這件事。
5) 執行編譯
直接在kubernetes目錄下,執行make
這里需要4G+的內存,最好8G,否則會出現錯誤。
6) 執行單元測試。
可以執行go test。
go test -v k8s.io/kubernetes/pkg/kubelet
也可以執行
make test WHAT=./pkg/kubelet
2 在windows跑apiserver
1) 下載Go的IDE,推薦使用IDEA+go插件。
下載和配置參考https://xuxinkun.github.io/2016/03/21/idea-svn/
安裝IDE后導入k8s源碼,配置對應的GOPATH,我的如下圖所示
2) 下載k8s源碼
我fork了當前的github代碼,https://github.com/shinepengwei/kubernetes
直接編譯運行kubernetes/cmd/kube-apiserver.go,會提示找不到GetOpenAPIDefinitions,這東西是OpenAPI的描述性文件,是在make階段生成的。
3) 從linux拷貝文件
第五步make時會生成/root/go/src/k8s.io/kubernetes/pkg/generated/openapizz_generated.openapi.go,把它拷貝到windows對應的目錄。
4) 安裝etcd
windows下直接下載etcd的執行文件https://github.com/coreos/etcd/releases,然后執行,會自動開放2379端口。
5) 運行調試
編譯運行kubernetes/cmd/kube-apiserver.go已經可以跑了,提示沒有配置etcd服務器地址。加一下"http://localhost:2379"這個地址就好了。
這樣就可以在windows的IDE下設斷點調試執行api-server了,這樣閱讀代碼就方便多了。不過api-server的testcase在windows下并不能全部正常執行,畢竟是linux程序。