注:結合書中的大概內容以及筆者自身的k8s經驗 總結學到的一些新知識每一篇篇幅不會很長
書很棒強烈推薦買一本讀
本次讀書來自於《kubernetes源碼剖析》 作者鄭東旭
因爲第二章確實筆者只看了一遍,也是有很多地方不懂,所以只能根據自己的能力大概寫,如果覺得有補充或者等等可以留言或者私聊,學習就是需要不斷地交流才能進步
第二章 kubernetes構建過程
第二章分爲幾個部分
1.構建方式
自己的理解:基本在大型的go項目中都會有makefile 的存在 我們就可以使用makerfile去構建開源的應用
k8s還可以用bazel構建和測試kubernetes源碼
這個構建方式這裏就不多說了 因爲確實我也不太看得懂 可以買一本《kubernetes源碼剖析》 來看一下
2.代碼生成器
conversion-gen | 自動生成convert函數的代碼生成器,用於資源對象的版本轉換函數 |
---|---|
deepocpy-gen | 自動生成deecopy函數的代碼生成器,用於資源對象的深複製函數 |
defaulter-gen | 自動生成defaulter函數的代碼生成器,用於資源對象的默認值函數 |
go-bindata | 是一個第三方工具/她能夠將靜態資源文件嵌入go語言中,例如web開發中將靜態的html,javascript等靜態文件嵌入go語言代碼文件中並提取一些操作方法 |
openapi-gen | 自動生成openapi定義文件的代碼生成器 |
3.代碼生成過程
代碼生成器的代碼生成方式都類似
(1)構建deepcopy-gen二進制文件
(2)生成.todu文件
(3)生成deepcopy深複製相關函數
4.gengo代碼生成器核心
目錄結構
args | 代碼生成器的通用flags參數 |
---|---|
examples | 包含deepcopy-gen、defaulter-gen、import-boss、set-gen代碼生成器的生成邏輯 |
generator | 代碼生成器通用接口generator |
namer | 命名慣例支持創建不同類型的名稱 |
parser | 代碼解析器,用來構造抽象語法樹 |
types | 類型系統,用於數據類型的定義及類型檢查算法的實現 |
代碼生成原理
(1)Gather The Info 手機Go語言源碼文件信息及內容
(2)Lexer/Parser 通過Lexer詞法分析器進行一系列此番分析
(3)AST Generator:生成抽象語法樹
(4)Type Checker 對抽象語法樹進行類型檢查
(5)Code Generation 生成代碼 將抽象語法樹轉換爲機器代碼