久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何順利完成Kubernetes源碼編譯

149次閱讀
沒有評論

共計 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 源碼編譯

指定分支,下載 Kubernetes 源代碼(默認 $GOPATH 目錄為 /root/go/)

如何順利完成 Kubernetes 源碼編譯

本地二進制文件編譯 Kubernetes(方法一) 

修改運行平臺配置參數(可選)

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

編譯源碼

進入 Kubernetes 根目錄下

如何順利完成 Kubernetes 源碼編譯

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

如何順利完成 Kubernetes 源碼編譯

如果不指定 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

如何順利完成 Kubernetes 源碼編譯

生成的可執行文件在當前文件夾下面

如何順利完成 Kubernetes 源碼編譯

Docker 鏡像編譯 Kubernetes(方法二)

查看 kube-cross 的 TAG 版本號

如何順利完成 Kubernetes 源碼編譯

查看 debian_iptables_version 版本號

如何順利完成 Kubernetes 源碼編譯

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

如何順利完成 Kubernetes 源碼編譯

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

如何順利完成 Kubernetes 源碼編譯

編輯文件 hack/lib/version.sh

將 KUBE_GIT_TREE_STATE=”dirty”  改為  KUBE_GIT_TREE_STATE=”clean”,確保版本號干凈。

執行編譯命令

如何順利完成 Kubernetes 源碼編譯

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

編譯的 K8s Docker 鏡像以壓縮包的形式發布在_output/release-tars 目錄中

如何順利完成 Kubernetes 源碼編譯

使用編譯鏡像

等待編譯完成后,在_output/release-stage/server/linux-amd64/kubernetes/server/bin/ 目錄下保存了編譯生成的二進制可執行程序和 docker 鏡像 tar 包。如導入 kube-apiserver.tar 鏡像,并更新環境上部署的 kube-apiserver 鏡像。

如何順利完成 Kubernetes 源碼編譯

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

以上就是如何順利完成 Kubernetes 源碼編譯,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計1956字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 辽宁省| 肃北| 钟祥市| 壤塘县| 习水县| 清远市| 宝应县| 四川省| 通江县| 上栗县| 三亚市| 凤翔县| 黄冈市| 龙胜| 金塔县| 措美县| 航空| 澄城县| 威信县| 西昌市| 浦县| 沂南县| 多伦县| 彝良县| 秦皇岛市| 文水县| 东丽区| 清丰县| 吴桥县| 崇州市| 永靖县| 扶绥县| 奎屯市| 五河县| 营山县| 兖州市| 正蓝旗| 凤阳县| 宁都县| 留坝县| 克什克腾旗|