- Kubernetes源碼剖析
- 鄭東旭
- 797字
- 2020-07-23 17:12:15
2.2 本地環境構建
使用本地環境構建時,如果讀者使用的是macOS系統,其中可能會附帶過時的BSD工具。Kubernetes官方的建議是安裝macOS GNU工具,詳情見官方Kubernetes開發指南。執行構建操作的命令示例如下:


執行make或make all命令,會編譯Kubernetes的所有組件,組件二進制文件輸出的相對路徑是_output/bin/。如果我們需要對Makefile的執行過程進行調試,可以在make命令后面加-n參數,輸出但不執行所有執行命令,這樣可以展示更詳細的構建過程。假設我們想單獨構建某一個組件,如kubectl組件,則需要指定WHAT參數,命令示例如下:

2.2.1 一切都始于Makefile
Go語言開發者習慣于手動執行go build(構建)和go test(單元測試)命令,因為Go語言為開發者提供了便捷的工具。但在一些生產環境或復雜的大型項目中,這是一種不好的開發習慣,而在實際的Go語言開發項目中使用Makefile是好的約束規范。
Makefile是一個非常有用的自動化工具,可以用來構建和測試Go語言應用程序。Makefile還適用于大多數編程語言,如C++等。在Kubernetes的源碼根目錄中,有兩個與Makefile相關的文件,分別介紹如下。
● Makefile:頂層Makefile文件,描述了整個項目所有代碼文件的編譯順序、編譯規則及編譯后的二進制輸出等。
● Makefile.generated_files:描述了代碼生成的邏輯。
通過make help命令,可以展示出所有可用的構建選項,從構建到測試的選項都有。首先,看一下make all命令在Makefile中的定義,代碼示例如下:

若要在Kubernetes的Makefile文件中定義,其步驟為:第1步,執行generated_files命令(在Makefile中稱其為目標),用于代碼生成(Code Generation);第2步,通過調用hack/make-rules/build.sh腳本開始執行構建操作,其中的$(WHAT)參數表示要指定構建的Kubernetes組件名稱,不指定該參數則默認構建Kubernetes的所有組件。
2.2.2 本地構建過程
通過調用hack/make-rules/build.sh腳本開始構建組件,傳入要構建的組件名稱,不指定組件名稱則構建所有組件。hack/make-rules/build.sh代碼示例如下:

build_binaries接收構建的組件名稱,設置構建所需的環境及一些編譯時所需的Go flags選項,然后通過go install構建組件:

在go install命令執行完成后,二進制輸出的目錄為_output/bin/。通過make all命令構建所有組件,二進制輸出如下(只展示了核心組件):

最后,可以使用make clean命令來清理構建環境。
- UI圖標創意設計
- Deploying Node.js
- AWS Serverless架構:使用AWS從傳統部署方式向Serverless架構遷移
- Learn Swift by Building Applications
- JSP開發案例教程
- Scala謎題
- Learning ELK Stack
- Swift語言實戰精講
- Serverless Web Applications with React and Firebase
- Application Development with Parse using iOS SDK
- 精通Spring:Java Web開發與Spring Boot高級功能
- Python物理建模初學者指南(第2版)
- Building Apple Watch Projects
- C/C++代碼調試的藝術
- 秒懂算法:用常識解讀數據結構與算法