Kubernetes 編譯 === ## 目錄 [TOC] ## 安裝GO (在Ubuntu) **<如果有舊版要先移除>** 到官網下載 https://golang.org/dl/ 解壓縮到usr/local ``` tar -C /usr/local -xzf go1.x.x.linux-amd64.tar.gz ``` 添加環境變數 ``` export PATH=$PATH:/usr/local/go/bin ``` 檢查 ``` go version ``` 正常情況會出現 ![](https://i.imgur.com/sNoCwSB.png) 查看環境變數 ``` go env ``` GOROOT是Golang主程式安裝的位置 GOPATH是我們的工作目錄,集中管理code, package和執行檔 (通常GOPATH下面會有bin、src、pkg三個資料夾) 工作目錄可以改成自己喜歡的目錄 ``` export GOPATH=/home/golang export GOBIN=$GOPATH/bin ``` ## 安裝etcd **<如果有舊版要先移除>** 到官網下載 https://github.com/etcd-io/etcd 解壓縮 ``` tar zxvf etcd-v3.3.13-linux-amd64.tar.gz ``` 將etcd etcdctl移至/usr/local/bin ``` mv etcd etcdctl /usr/local/bin ``` 檢查 ``` etcd --version ``` 會出現 ![](https://i.imgur.com/DaO5YO8.png) ## 下載kunerntes source code 在go的工作目錄下建一個新資料夾給k8s使用 ``` mkdir -p $GOPATH/src/k8s.io ``` 進入該資料夾後,下載source dode ``` git clone https://github.com/kubernetes/kubernetes -b release-1.14 ``` 下載完後就會出現一個名爲kubernetes的資料夾,裡面就是我們的source code ## 嘗試修改並編譯 編輯kubectl,位置: /cmd/kubectl/kubectl.go 加入一段程式碼 ``` func init() { fmt.Println("你好,歡迎使用kubectl!") } ``` 在目錄$GOPATH/src/k8s.io/kubernetes執行以下命令,就會建構linux平臺下的kubectl文件 ``` KUBE_BUILD_PLATFORMS=linux/amd64 make WHAT=cmd/kubectl ``` 在目錄$GOPATH/src/k8s.io/kubernetes/_output/bin,可以見到剛剛建構的kubectl文件 執行命令為 ``` $GOPATH/src/k8s.io/kubernetes/_output/bin/kubectl ``` ## 嘗試啟動叢集 ``` export KUBERNETES_PROVIDER=local hack/local-up-cluster.sh ```