今天咱們開始講kubernetes的源碼!git
以前的其餘開源項目尚未說完,後續會陸陸續續更新,咱們把主線先放到k8s的源碼上。github
以前我想詳細講解每一行k8s源碼,可是越看愈加現一個大型開源項目若是拘泥於每一行的邏輯,很容易把戰線拉得太長,最後失去興趣。因此今天咱們先聊聊源碼該怎麼看。golang
咱們爲何要看k8s源碼?api
我認爲無非是提高golang功力、深刻k8s原理、參與k8s社區,最後成爲一個資深的雲計算技術人,享受技術的樂趣(固然雲計算技術棧之大不是一個k8s所能表明的,可是顯然雲計算已經離不開k8s,有能力參與k8s社區的工程師後續繼續深刻各類cncf技術也會輕鬆不少,cncf裏涉及的各類技術基本奠基了paas,或者說容器雲的基礎)。架構
第一步:熟悉k8s的基本功能,理解各個組件的分工,作到心中有數,可是不拘泥於掌握每個功能細節,由於不少特性在平常開發中很難用到(好比各類alpha階段的api,生產中不會讓用的)。學習
第二步:選定第一個要深刻研究的組件,概覽其支持的全部子命令和flag,知道該組件能實現哪些功能(知道基於什麼實現,和哪些組件打交道),好比看kube-proxy至少先知道是用iptables實現的,得先補補iptables的知識。測試
第三步:選定源碼版本,不要追求master分支,每天變想一想也心累啊!建議選一個相對新的,或者是大家公司正在使用的版本雲計算
第四步:準備編譯、測試環境。也就是一個至少可以把你看的組件編譯出來,可以運行起來後debug的環境,這樣才能在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。