阅读 968

Kubernetes源码编译

环境准备

Kubernetes编译依赖Go环境和gcc,所以编译之前需要先下载好基本环境

Golang安装

Golang下载在官网Golang,当前最新版本为1.12(具体安装以版本为准)
1、wget https://dl.google.com/go/go1.12.linux-amd64.tar.gz
2、tar -zxf go1.12.linux-amd64.tar.gz -C /usr/local/
3、export PATH=$PATH:/usr/local/go/bin
检查是否安装成功

gcc安装

Centos下gcc可以直接使用yum安装yum -y install gcc

编译

Kubernetes支持容器编译和主机编译,主机编译需要安装基本环境(Go、gcc),容器编译使用Docker的Dockerfile编译,也是比较流行的方式。编译对内存有一定的要求,建议机器内存至少在4G以上。

主机编译

主机编译可以直接使用kubernetes自带的Makefile,使用make即可编译。但是由于编译生成的二进制较多,一般情况下对不同的模块可以进行单独的编译,以kubelet为例:
1、配置编译环境:将下载好的kubernetes源码拷贝到$GOPATH/src/k8s.io目录,进入$GOPATH/src/k8s.io/kubernetes目录,GOPATH为/root/kube


2、使用make all WHAT=cmd/kubelet GOFLAGS=-v命令编译kubelet模块

3、编译生成的二进制包在_output/bin目录下
如果想要知道编译使用的脚本,可以通过查看Makefile文件代码,查看编译执行脚本

容器编译

容器编译由于使用Dockerfile,基础镜像访问的是k8s.gcr.io,国内访问不了

可以先将镜像下载下来,重新打tag,这里以阿里云为例:
1、docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-cross:v1.11.5-1
2、docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-cross:v1.11.5-1 k8s.gcr.io/kube-cross:v1.11.5-1
执行./build/run.sh hack/build-go.sh cmd/kubelet单独编译kubelet模块,会看到一系列的输出,最终在_output/dockerized/bin/linux/amd64目录下,可以查看到编译后的二进制包。