Kubernetes原始碼編譯

NeverMore_RC發表於2019-03-12

環境準備

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

Kubernetes原始碼編譯

2、使用make all WHAT=cmd/kubelet GOFLAGS=-v命令編譯kubelet模組
Kubernetes原始碼編譯

3、編譯生成的二進位制包在_output/bin目錄下
Kubernetes原始碼編譯
Kubernetes原始碼編譯
如果想要知道編譯使用的指令碼,可以通過檢視Makefile檔案程式碼,檢視編譯執行指令碼
Kubernetes原始碼編譯

容器編譯

容器編譯由於使用Dockerfile,基礎映象訪問的是k8s.gcr.io,國內訪問不了

Kubernetes原始碼編譯
可以先將映象下載下來,重新打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目錄下,可以檢視到編譯後的二進位制包。
Kubernetes原始碼編譯

相關文章