環境準備
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
,國內訪問不了

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
目錄下,可以檢視到編譯後的二進位制包。
