- Kubernetes源碼剖析
- 鄭東旭
- 904字
- 2020-07-23 17:12:16
2.3 容器環(huán)境構建
通過容器(Docker)進行Kubernetes構建也非常簡單,Kubernetes提供了兩種容器環(huán)境下的構建方式:make release和make quick-release,它們之間的區(qū)別如下。
● make release:構建所有的目標平臺(Darwin、Linux、Windows),構建過程會比較久,并同時執(zhí)行單元測試過程。
● make quick-release:快速構建,只構建當前平臺,并略過單元測試過程。
make quick-release在Makefile中的定義如下:


make quick-release與make release相比多了兩個變量,即KUBE_RELEASE_RUN_TESTS和KUBE_FASTBUILD。KUBE_RELEASE_RUN_TESTS變量,將其設為n則跳過運行單元測試;KUBE_FASTBUILD變量,將其設為true則跳過跨平臺交叉編譯。通過這兩個變量可以實現(xiàn)快速構建,最終執(zhí)行build/release.sh腳本,運行容器環(huán)境構建。Kubernetes容器環(huán)境構建過程如圖2-2所示。

圖2-2 Kubernetes容器環(huán)境構建過程
在容器環(huán)境構建過程中,有多個容器鏡像參與其中,分別介紹如下。
● build容器(kube-cross):即構建容器,在該容器中會對代碼文件執(zhí)行構建操作,完成后其會被刪除。
● data容器:即存儲容器,用于存放構建過程中所需的所有文件。
● rsync容器:即同步容器,用于在容器和主機之間傳輸數據,完成后其會被刪除。
下面介紹一下Kubernetes容器環(huán)境構建過程。
1.kube::build::verify_prereqs
進行構建環(huán)境的配置及驗證。該過程會檢查本機是否安裝了Docker容器環(huán)境,而對于Darwin平臺,該過程會檢查本機是否安裝了docker-machine環(huán)境。
2.kube::build::build_image
根據Dockerfile文件構建容器鏡像。Dockerfile文件來源于build/build-image/Dockerfile,代碼示例如下:
代碼路徑:build/common.sh

構建容器鏡像的流程如下。
● 通過mkdir命令創(chuàng)建構建鏡像的文件夾(即_output/images/…)。
● 通過cp命令復制構建鏡像所需的相關文件,如Dockerfile文件和rsyncd同步腳本等。
● 通過kube::build::docker_build函數,構建容器鏡像。
● 通過kube::build::ensure_data_container函數,運行存儲容器并掛載Volume。
● 通過kube::build::sync_to_container函數,運行同步容器并掛載存儲容器的Volume,然后通過rsync命令同步Kubernetes源碼到存儲容器的Volume。
3.kube::build::run_build_command make cross
此時,容器構建環(huán)境已經準備好,下面開始運行構建容器并在構建容器內部執(zhí)行構建Kubernetes源碼的操作,代碼示例如下:
代碼路徑:build/common.sh

在kube::build::run_build_command_ex函數中,通過${docker_cmd[@]}""${cmd[@]}命令執(zhí)行構建操作(即在容器內執(zhí)行make cross命令)。容器內的構建過程與本地環(huán)境下的構建過程相同,故不再贅述。
其中,構建的平臺由KUBE_SUPPORTED_SERVER_PLATFORMS變量控制,代碼示例如下:
代碼路徑:hack/lib/golang.sh

構建的組件由KUBE_SERVER_TARGETS變量控制,代碼示例如下:
代碼路徑:hack/lib/golang.sh

4.kube::build::copy_output
使用同步容器,將編譯后的代碼文件復制到主機上。
5.kube::release::package_tarballs
進行打包,將二進制文件打包到_output目錄中。
最終,代碼文件以tar.gz壓縮包的形式輸出至_output/release-tars文件夾。
- 程序員考試案例梳理、真題透解與強化訓練
- Learning Apache Mahout Classification
- Spring Boot企業(yè)級項目開發(fā)實戰(zhàn)
- Android程序設計基礎
- Creating Mobile Apps with jQuery Mobile(Second Edition)
- INSTANT Silverlight 5 Animation
- Red Hat Enterprise Linux Troubleshooting Guide
- Instant Debian:Build a Web Server
- Python從入門到精通(第3版)
- Python 3 數據分析與機器學習實戰(zhàn)
- OpenCV Android Programming By Example
- Python Deep Learning
- Python趣味創(chuàng)意編程
- Modern R Programming Cookbook
- Python接口自動化測試