编译kubernetes并在windows下运行调试api-server

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获取依赖包
【编译kubernetes并在windows下运行调试api-server】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,我的如下图所示

编译kubernetes并在windows下运行调试api-server
文章图片

image.png
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程序。


作者:水风
链接:https://www.jianshu.com/p/b90712911ed3

    推荐阅读