1. 程式人生 > >k8s原始碼分析-準備工作

k8s原始碼分析-準備工作

今天我們開始講kubernetes的原始碼!

之前的其他開源專案還沒有說完,後續會陸陸續續更新,我們把主線先放到k8s的原始碼上。

之前我想詳細講解每一行k8s原始碼,但是越看越發現一個大型開源專案如果拘泥於每一行的邏輯,很容易把戰線拉得太長,最後失去興趣。所以今天我們先聊聊原始碼該怎麼看。

1、目標

我們為什麼要看k8s原始碼?

我認為無非是提升golang功力、深入k8s原理、參與k8s社群,最後成為一個資深的雲端計算技術人,享受技術的樂趣(當然雲端計算技術棧之大不是一個k8s所能代表的,但是顯然雲端計算已經離不開k8s,有能力參與k8s社群的工程師後續繼續深入各種cncf技術也會輕鬆很多,cncf裡涉及的各種技術基本奠定了paas,或者說容器雲的基礎)。

 

2、方法

第一步:熟悉k8s的基本功能,理解各個元件的分工,做到心中有數,但是不拘泥於掌握每一個功能細節,因為很多特性在日常開發中很難用到(比如各種alpha階段的api,生產中不會讓用的)。

第二步:選定第一個要深入研究的元件,概覽其支援的所有子命令和flag,知道該元件能實現哪些功能(知道基於什麼實現,和哪些元件打交道),比如看kube-proxy至少先知道是用iptables實現的,得先補補iptables的知識。

第三步:選定原始碼版本,不要追求master分支,天天變想想也心累啊!建議選一個相對新的,或者是你們公司正在使用的版本

第四步:準備編譯、測試環境。也就是一個至少能夠把你看的元件編譯出來,能夠執行起來後debug的環境,這樣才能在debug中看各種你在讀原始碼時不理解的物件在執行中到底存了哪些資料。

第五步:最快的速度抓住程式碼主線,泛讀原始碼。

第六步:針對特定功能精讀,除錯,深入理解。

第七步:整體精讀,適當深入三方庫,公共庫,繪製整理單個元件架構圖、流程圖等,幫助自己理解整個元件工作全流程,在平時使用中遇到bug後能夠快速反應過來是哪個模組的問題。

最後:讀完所有元件後融會貫通,理解各種公共庫的抽取邏輯,整個k8s瞭然於胸!

 

今天準備啥?

我們選擇從1.10版本入手,一方面是目前1.9及之前版本的資料比較多,1.10是不久的將來資料會比較豐富,使用者基數比較多的一個版本,所以等到多數人看到本教程的時候,有不懂的地方到網上查時相對1.12這種新版會更輕鬆。另外是我們在專案中選型用了1.10版本,在近一兩年工作中我主要使用的也是1.10版本(當然社群新特性會關注,參與社群也是跟著master走)。

今天我們需要下載好1.10版本的原始碼,準備go開發環境。

->下程式碼:

$ git clone https://github.com/kubernetes/kubernetes.git

->本地路徑:

$ D:\go\src\k8s.io\kubernetes

->gopath:

$ D:\go\src

ok,go開發環境配置預設大家都是會的,不然也不適合開始後面的學習。

kubernetes的編譯和debug環境後面我們再準備,下一講我們先開始過scheduler元件的邏輯,熟悉程式碼後再準備環境開始debug。