编译 Kubernetes 二进制文件
Kubernetes 的编译需要一个工作 Go 环境。 本页通过多种方式编译 Linux 二进制文件和跨编译 Windows 二进制文件。
注意
此页面是完全自愿的,仅适用于想要试验最新和最出色的源代码的感兴趣的 Kubernetes 开发人员。
提示
若要接收有关最新开发情况的通知,可以订阅 @kubernetes报。
安装 Go
为简单起见,这会在临时自定义位置安装 Go:
cd ~
wget https://redirector.gvt1.com/edgedl/go/go1.11.1.linux-amd64.tar.gz -O go1.11.1.tar.gz
tar -vxzf go1.11.1.tar.gz
mkdir gopath
export GOROOT="$HOME/go"
export GOPATH="$HOME/gopath"
export PATH="$GOROOT/bin:$PATH"
注意
这些设置会话的环境变量。 将 export
s 添加到永久 ~/.profile
设置。
运行 go env
以确保路径已正确设置。 有多种选项可用于生成 Kubernetes 二进制文件:
- 在本地生成它们。
- 使用 Vagrant 生成二进制文件。
- 利用 Kubernetes 项目中的标准容器化生成脚本。 为此,请遵循在本地生成
make
步骤的步骤,然后使用链接的说明。
若要将 Windows 二进制文件复制到各自的节点,请使用 WinSCP 等可视化工具或 pscp 等命令行工具将其C:\k
传输到目录。
在本地生成
提示
如果遇到“权限被拒绝”错误,可以先根据以下acs-engine
说明生成 Linux kubelet
来避免这些错误:
由于 Kubernetes Windows 生成系统中似乎是一个 bug,因此必须首先生成 Linux 二进制文件才能生成 _output/bin/deepcopy-gen
。 生成到 Windows w/o 执行此操作将生成空 deepcopy-gen
。
首先,检索 Kubernetes 存储库:
KUBEREPO="k8s.io/kubernetes"
go get -d $KUBEREPO
# Note: the above command may spit out a message about
# "no Go files in...", but it can be safely ignored!
cd $GOPATH/src/$KUBEREPO
现在,检查从分支中生成和生成 Linux kubelet
二进制文件。 这是避免上面提到的 Windows 生成错误所必需的。 在这里,我们将使用 v1.12.2
。 git checkout
之后,可以应用挂起的 PR、修补程序,或对自定义二进制文件进行其他修改。
git checkout tags/v1.12.2
make clean && make WHAT=cmd/kubelet
最后,生成必要的 Windows 客户端二进制文件(最后一步可能会有所不同,具体取决于应从以后检索 Windows 二进制文件的位置):
KUBE_BUILD_PLATFORMS=windows/amd64 make WHAT=cmd/kubectl
KUBE_BUILD_PLATFORMS=windows/amd64 make WHAT=cmd/kubelet
KUBE_BUILD_PLATFORMS=windows/amd64 make WHAT=cmd/kube-proxy
cp _output/local/bin/windows/amd64/kube*.exe ~/kube-win/
生成 Linux 二进制文件的步骤相同;只需离开 KUBE_BUILD_PLATFORMS=windows/amd64
命令的前缀即可。 输出目录将 _output/.../linux/amd64
改为。
使用 Vagrant 生成
此处提供了 Vagrant 设置。 使用它来准备 Vagrant VM,然后在其中执行以下命令:
DIST_DIR="${HOME}/kube/"
SRC_DIR="${HOME}/src/k8s-main/"
mkdir ${DIST_DIR}
mkdir -p "${SRC_DIR}"
git clone https://github.com/kubernetes/kubernetes.git ${SRC_DIR}
cd ${SRC_DIR}
git checkout tags/v1.12.2
KUBE_BUILD_PLATFORMS=linux/amd64 build/run.sh make WHAT=cmd/kubelet
KUBE_BUILD_PLATFORMS=windows/amd64 build/run.sh make WHAT=cmd/kubelet
KUBE_BUILD_PLATFORMS=windows/amd64 build/run.sh make WHAT=cmd/kube-proxy
cp _output/dockerized/bin/windows/amd64/kube*.exe ${DIST_DIR}
ls ${DIST_DIR}