云原生实践-kubernetes源码本地IDE编译调试

虽然大多数的kubernetes在生产中都是部署在linux环境下,源码编译调试也自然在linux环境下做,不过windows环境下以便捷的可视化操作闻名,特别是丰富功能的IDE对阅读理解和调试源码有很好的帮助。

下面就本机系统kubernetes源码的编译过程作一个详细的说明,另外虽然windows操作系统可能无法全部的运行kubernetes的功能,但是对kubernetes的运作机制,代码认识已经足够了。

部署go运行环境

1)下载go的sdk,可以选择国内go中文网下载(https://studygolang.com/dl)

云原生实践-kubernetes源码本地IDE编译调试_第1张图片

2)安装

下载的文件默认安装即可。

3)配置环境变量

配置系统环境变量:

两个目录,一个表示go sdk的路径(安装路径),一个是go的工作目录(工作目录自己定义)

云原生实践-kubernetes源码本地IDE编译调试_第2张图片

云原生实践-kubernetes源码本地IDE编译调试_第3张图片

本地编译kubernetes源码

1.准备下载代码

通过git工具下载kubernetes代码(这里下载的是1.15版本)

代码存放于go的工作目录,这里放置在如下目录:

D:\go_workspace\src\k8s.io

2.Goland IDE导入工程

1)打开IDE

云原生实践-kubernetes源码本地IDE编译调试_第4张图片

2)导入工程项目

选择打开项目“Open Project",定位到源码目录k8s.io,导入项目工程。

云原生实践-kubernetes源码本地IDE编译调试_第5张图片

3)配置环境

导入代码工程后,代码结构如下:

云原生实践-kubernetes源码本地IDE编译调试_第6张图片

由于工程需要下载依赖的代码包,国内直接连接谷歌相关东西下载比较慢,这里可以配置相应的代理。

云原生实践-kubernetes源码本地IDE编译调试_第7张图片

3.操作依赖包

自动下载相应的代码依赖包之后,需要将部分依赖包进行拷贝,从staging目录拷贝到对应的vendor目录中。

云原生实践-kubernetes源码本地IDE编译调试_第8张图片

拷贝至对应的vendor目录下面(首先将其该部分模块在该目录下的文件删除掉,然后拷贝):

云原生实践-kubernetes源码本地IDE编译调试_第9张图片

4.模块编译验证

挑选一个统一入口模块kube-apiserver

1)配置模块运行启动

配置本地的go运行sdk:

云原生实践-kubernetes源码本地IDE编译调试_第10张图片

配置运行启动:

云原生实践-kubernetes源码本地IDE编译调试_第11张图片

启动参数配置:

云原生实践-kubernetes源码本地IDE编译调试_第12张图片

启动参数主要是启动程序的程序名,指定启动的入口文件,这里先不配置启动以来的参数。

云原生实践-kubernetes源码本地IDE编译调试_第13张图片

启动运行,等待模块运行情况:

云原生实践-kubernetes源码本地IDE编译调试_第14张图片

初始运行apiserver模块出错,该错误是因为缺少apiserver的开放接口描述文件导致的,这时候需要linux环境上编译生成该文件(另外一篇介绍linux环境编译kubernetes,这里先拷贝过来)

5.出错问题解决方案

1)初次编译运行出错(依赖openapi描述文件)

登录linux环境:

执行make命令,编译时间稍长,等待编译结束后:_output下生成编译结果

云原生实践-kubernetes源码本地IDE编译调试_第15张图片

进入代码的pkg区域:找到make生成的代码描述文件

云原生实践-kubernetes源码本地IDE编译调试_第16张图片

将该代码文件拷贝至本地goland工程:

云原生实践-kubernetes源码本地IDE编译调试_第17张图片

2)再次运行

云原生实践-kubernetes源码本地IDE编译调试_第18张图片

因为apiserver的启动运行,需要依赖etcd作为相应的分布式数据一致性的存储,这里需要配置对应的etcd的服务。

etcd的windows环境部署

1)找到etcd的下载包地址:

https://github.com/etcd-io/etcd/releases

云原生实践-kubernetes源码本地IDE编译调试_第19张图片

2)选择windows环境的包下载

部署安装:

  • 解压etcd包

云原生实践-kubernetes源码本地IDE编译调试_第20张图片

安装部署在指定的目录,这里解压在go的工作目录。

  • etcd介绍

云原生实践-kubernetes源码本地IDE编译调试_第21张图片

etcd是一个分布式一致的kv存储,主要用于分布式系统共享配置和服务发现。

etcd.exe为服务端,etcdctl.exe为客户端,提供操作控制的命令入口。

  • 安装etcd

点击运行服务端应用:

云原生实践-kubernetes源码本地IDE编译调试_第22张图片

运行之后的etcd服务端会自动打开2379的服务端口,配置本地地址可以访问。

配置etcd服务运行apiserver

云原生实践-kubernetes源码本地IDE编译调试_第23张图片

配置相应的etcd地址后,开始编译运行:

云原生实践-kubernetes源码本地IDE编译调试_第24张图片

运行模块成功,可以设置断点等调试理解源码了!

注意:

 

在linux环境下make编译生成的“zz_generated.openapi.go”文件,需要在+k8s:openapi-gen=true模式下编译出来。

编译linux环境的kubernetes的时候修改编译文件“Makefile.generated_files”:

+k8s:openapi-gen=true //将其注释去除

你可能感兴趣的:(云原生实践)