云原生实践-kubernetes本地编译构建

2020/03/16 云原生实践

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

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

部署go运行环境

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

Alt text

2)安装

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

3)配置环境变量

配置系统环境变量:
两个目录,一个表示go sdk的路径(安装路径),一个是go的工作目录(工作目录自己定义)

Alt text

Alt text

本地编译kubernetes源码

1.准备下载代码

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

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

D:\go_workspace\src\k8s.io

2.Goland IDE导入工程

1)打开IDE

Alt text

2)导入工程项目

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

Alt text

3)配置环境

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

Alt text

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

Alt text

3.操作依赖包

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

Alt text

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

Alt text

4.模块编译验证

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

1)配置模块运行启动

配置本地的go运行sdk:

Alt text

配置运行启动:

Alt text

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

Alt text

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

Alt text

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

5.出错问题解决方案

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

登录linux环境:

Alt text

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

Alt text

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

Alt text

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

Alt text

2)再次运行

Alt text

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

etcd的windows环境部署

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

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

Alt text

2)选择windows环境的包下载

部署安装:

a. 解压etcd包

Alt text

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

b. etcd介绍

Alt text

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

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

c. 安装etcd
点击运行服务端应用:

Alt text

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

配置etcd服务运行apiserver

Alt text

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

Alt text

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

注意:

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

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

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

Search

    Table of Contents