---
# System prepended metadata

title: Kubernetes 編譯

---

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
```





