虽然大多数的kubernetes在生产中都是部署在linux环境下,源码编译调试也自然在linux环境下做,不过windows环境下以便捷的可视化操作闻名,特别是丰富功能的IDE对阅读理解和调试源码有很好的帮助。
下面就本机系统kubernetes源码的编译过程作一个详细的说明,另外虽然windows操作系统可能无法全部的运行kubernetes的功能,但是对kubernetes的运作机制,代码认识已经足够了。
部署go运行环境
1)下载go的sdk,可以选择国内go中文网下载(https://studygolang.com/dl)
2)安装
下载的文件默认安装即可。
3)配置环境变量
配置系统环境变量:
两个目录,一个表示go sdk的路径(安装路径),一个是go的工作目录(工作目录自己定义)
本地编译kubernetes源码
1.准备下载代码
通过git工具下载kubernetes代码(这里下载的是1.15版本)
代码存放于go的工作目录,这里放置在如下目录:
D:\go_workspace\src\k8s.io
2.Goland IDE导入工程
1)打开IDE
2)导入工程项目
选择打开项目“Open Project”,定位到源码目录k8s.io,导入项目工程。
3)配置环境
导入代码工程后,代码结构如下:
由于工程需要下载依赖的代码包,国内直接连接谷歌相关东西下载比较慢,这里可以配置相应的代理。
3.操作依赖包
自动下载相应的代码依赖包之后,需要将部分依赖包进行拷贝,从staging目录拷贝到对应的vendor目录中。
拷贝至对应的vendor目录下面(首先将其该部分模块在该目录下的文件删除掉,然后拷贝):
4.模块编译验证
挑选一个统一入口模块kube-apiserver
1)配置模块运行启动
配置本地的go运行sdk:
配置运行启动:
启动参数主要是启动程序的程序名,指定启动的入口文件,这里先不配置启动以来的参数。
启动运行,等待模块运行情况:
初始运行apiserver模块出错,该错误是因为缺少apiserver的开放接口描述文件导致的,这时候需要linux环境上编译生成该文件(另外一篇介绍linux环境编译kubernetes,这里先拷贝过来)
5.出错问题解决方案
1)初次编译运行出错(依赖openapi描述文件)
登录linux环境:
执行make命令,编译时间稍长,等待编译结束后:_output下生成编译结果
进入代码的pkg区域:找到make生成的代码描述文件
将该代码文件拷贝至本地goland工程:
2)再次运行
因为apiserver的启动运行,需要依赖etcd作为相应的分布式数据一致性的存储,这里需要配置对应的etcd的服务。
etcd的windows环境部署
1)找到etcd的下载包地址:
https://github.com/etcd-io/etcd/releases
2)选择windows环境的包下载
部署安装:
a. 解压etcd包
安装部署在指定的目录,这里解压在go的工作目录。
b. etcd介绍
etcd是一个分布式一致的kv存储,主要用于分布式系统共享配置和服务发现。
etcd.exe为服务端,etcdctl.exe为客户端,提供操作控制的命令入口。
c. 安装etcd
点击运行服务端应用:
运行之后的etcd服务端会自动打开2379的服务端口,配置本地地址可以访问。
配置etcd服务运行apiserver
配置相应的etcd地址后,开始编译运行:
运行模块成功,可以设置断点等调试理解源码了!
注意:
在linux环境下make编译生成的“zz_generated.openapi.go”文件,需要在+k8s:openapi-gen=true模式下编译出来。
编译linux环境的kubernetes的时候修改编译文件“Makefile.generated_files”:
+k8s:openapi-gen=true //将其注释去除