编译 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"

注意

这些设置会话的环境变量。 将 exports 添加到永久 ~/.profile 设置。

运行 go env 以确保路径已正确设置。 有多种选项可用于生成 Kubernetes 二进制文件:

若要将 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.2git 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}