如何順利完成Kubernetes原始碼編譯?

CCE_huawei發表於2019-04-16

為什麼要編譯原始碼 ?

Kubernetes是一個非常棒的容器叢集管理平臺。通常情況下,我們並不需要修改K8S程式碼即可直接使用。但如果,我們在環境中發現了某個問題/缺陷,或按照特定業務需求需要修改K8S程式碼時,如定製Kubelet的StopContainer 邏輯、kube-scheduler的pod排程邏輯等。為了讓修改生效,那麼就需要編譯K8S程式碼了。

Kubernetes原始碼編譯,大致分為本地二進位制可執行檔案編譯和docker映象編譯兩種。由於在我們的環境中,Kubernetes是由Docker容器方式執行的。故此我們需要採用後面一種方式編譯,即映象編譯。

由於Kubernetes每個元件服務的映象Dockerfile檔案是由Kubernetes原始碼自動生成的,因此,社群並未提供每個元件的映象Dockerfile檔案。編譯本地二進位制可執行檔案很簡單,也更直接。而docker映象編譯資料卻很少,且礙於某種特殊網路原因,會導致失敗。此處,將介紹如何順利的完成K8S映象編譯。

安裝依賴 

安裝Golang

指定分支,下載 Kubernetes 原始碼(預設$GOPATH目錄為/root/go/)


本地二進位制檔案編譯Kubernetes(方法一) 

修改執行平臺配置引數(可選)

根據自己的執行平臺(linux/amd64)修改hack/lib/golang.sh,把KUBE_SERVER_PLATFORMS,KUBE_CLIENT_PLATFORMS和KUBE_TEST_PLATFORMS中除linux/amd64以外的其他平臺註釋掉,以此來減少編譯所用時間。

編譯原始碼

進入Kubernetes根目錄下

KUBE_BUILD_PLATFORMS指定目標平臺,WHAT指定編譯的元件,透過GOFLAGS和GOGCFLAGS傳入編譯時引數,如此處編譯kubelet 元件。

  • 如果不指定WHAT,則編譯全部。

  • make all是在本地環境中進行編譯的。

  • make release和make quick-release在容器中完成編譯、打包成docker映象。

  • 編譯kubelet這部分程式碼,也可執行make clean && make WHAT=cmd/kubelet

檢查編譯成果

編譯過程較長,請耐心等待,編譯後的檔案在kubernetes/_output裡。

或者進入cmd/kubelet (以kubelet為例子)

執行go build -v命令,如果沒出錯,會生成可執行檔案kubelet

生成的可執行檔案在當前資料夾下面


Docker映象編譯Kubernetes(方法二)

檢視kube-cross的TAG版本號

檢視debian_iptables_version版本號

這裡,我使用DockerHub的Auto build功能,來構建K8s映象。自然將編譯需要用到的base映象,放在了DockerHub上(也算是為促進國內K8s原始碼docker編譯貢獻綿薄之力吧!)。

把build/lib/release.sh中的–pull去掉,避免構建映象繼續拉取映象:

編輯檔案hack/lib/version.sh

將KUBE_GIT_TREE_STATE=”dirty” 改為 KUBE_GIT_TREE_STATE=”clean”,確保版本號乾淨。

執行編譯命令

其中KUBE_BUILD_PLATFORMS=linux/amd64指定目標平臺為linux/amd64,GOFLAGS=-v開啟verbose日誌,GOGCFLAGS=”-N -l”禁止編譯最佳化和內聯,減小可執行程式大小。

編譯的K8s Docker映象以壓縮包的形式釋出在_output/release-tars目錄中

使用編譯映象

等待編譯完成後,在_output/release-stage/server/linux-amd64/kubernetes/server/bin/目錄下儲存了編譯生成的二進位制可執行程式和docker映象tar包。如匯入kube-apiserver.tar映象,並更新環境上部署的kube-apiserver映象。

整個編譯過程結束後,現在就可以到master節點上,修改/etc/kubernetes/manifests/kube-apiserver.yaml描述檔案中的image,修改完立即生效。

參考資料:

原文連結:

%E7%BC%96%E8%AF%91%E5%92%8C%E8%BF%90%E8%A1%8CKubernetes%E6%BA%90%E7%A0%81/

相關服務請訪問:https://support.huaweicloud.com/cce/index.html?utm_content=cce_helpcenter_2019


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908804/viewspace-2641499/,如需轉載,請註明出處,否則將追究法律責任。

相關文章