本文原始地址:https://farmer-hutao.github.io/k8s-source-code-analysis/
項目github地址:https://github.com/farmer-hutao/k8s-source-code-analysis
源碼准備
1. 環境准備
操作系統:我們使用Linux作為k8s源碼分析和調試環境,fedora、centos、ubuntu都行,我這里使用fedora;
golang相關:
- GOROOT=/usr/local/lib/golang
- GOPATH=/root/go
- go version go1.10.3 linux/amd64
2. 源碼下載
mkdir -p /root/go/src/k8s.io cd /root/go/src/k8s.io/ git clone https://github.com/kubernetes/kubernetes.git
下載后本地目錄:
3. 源碼編譯
我們先看一下幾個主要的目錄:
目錄名 | 用途 |
---|---|
cmd | 每個組件代碼入口(main函數) |
pkg | 各個組件的具體功能實現 |
staging | 已經分庫的項目 |
vendor | 依賴 |
考慮到國內網絡環境等因素,我們不使用容器化方式構建。我們嘗試在kubernetes項目cmd目錄下構建一個組件(執行路徑:/root/go/src/k8s.io/kubernetes/cmd/kube-scheduler
):
這里需要注意一下,如果報依賴錯誤,找不到k8s.io下的某些項目,就到vendor下看一下軟鏈接是不是都還在,如下:
注意到k8s是使用這種方式解決k8s.io下的依賴問題的,如果我們在windows下下載的代碼,然后copy到linux下,就很容易遇到這些軟鏈接丟失的情況,導致go找不到依賴,編譯失敗。
4. IDE
我們使用Goland看代碼:
最后,別忘了在正式研讀源碼前切換到release-1.13
分支~