编译Kubernetes源码

一、安装Golang

默认$GOPATH目录为 /root/go/

wget -c https://dl.google.com/go/go1.12.1.linux-amd64.tar.gz -P /opt/
cd /opt/
tar -C /usr/local -xzf go1.12.1.linux-amd64.tar.gz 
echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile && source /etc/profile
echo "export GOPATH=/root/go" >> /etc/profile && source /etc/profile

二、指定分支,下载 Kubernetes 源代码

mkdir -p $GOPATH/src/k8s.io
cd $GOPATH/src/k8s.io
git clone https://github.com/kubernetes/kubernetes -b release-1.14
cd $GOPATH/src/k8s.io/kubernetes

三、编译源码

进入Kubernetes根目录下

cd kubernetes

KUBE_BUILD_PLATFORMS指定目标平台,WHAT指定编译的组件,通过GOFLAGS和GOGCFLAGS传入编译时参数,如此处编译kubectl 组件。

KUBE_BUILD_PLATFORMS=linux/amd64 make all WHAT=cmd/kubectl GOFLAGS=-v GOGCFLAGS="-N -l"
  • 如果不指定WHAT,则编译全部。
  • make all是在本地环境中进行编译的。
  • make release和make quick-release在容器中完成编译、打包成docker镜像。
  • 编译kubectl这部分代码,也可执行make clean && make WHAT=cmd/kubectl

四、检查编译成果

编译过程较长,请耐心等待,编译后的文件在kubernetes/_output里。