共計 1956 個字符,預計需要花費 5 分鐘才能閱讀完成。
本篇文章給大家分享的是有關如何順利完成 Kubernetes 源碼編譯,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。
為什么要編譯源碼 ?
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,修改完立即生效。
以上就是如何順利完成 Kubernetes 源碼編譯,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。