从安装Golang到Kubernetes源码编译,一步一步,跳过坑,抗过雷。内附编译过程出现的问题。

Kubernetes源码编译流程

  1. Kubernetes使用Go语言编写,所以编译源代码需要使用Go语言工具。

  2. go的源码安装非常简单,只需运行源码包中src/all.bash,等到出现 ALL TESTS PASSED 字样就安装好了,但是在源码安装1.5版本以上的go时会报 ERROR: Cannot find /root/go1.4/bin/go 这个错误,这是由于go 1.5版以后的编译安装需要1.4版本go,所以如果想要通过源码方式安装高版本go,必须先安装好1.4版本的go。
  3. 首先需要安装Go的编译环境:

    1. 配置go1.4的环境变量GOROOT_BOOTSTRAP :安装路径,github上有问题github上指向到bin/go。

    2. 设置CGO_ENABLED=0 环境变量。

    3. 打开到go1.4的src目录下面使用./all.bash, 也可使用简单运行 ./make.bash,官网推荐使用后面的指令。

    4. 验证是否安装成功:/安装路径/bin/go version,如果提示版本就代表安装成功。

    5. 安装最新版本的go(go1.10.3),在src目录下使用./all.bash进行安装。

      说明:
      如果没有手动安装go1.4版本,就执行下面的命令,但是几乎安装不了,因为无法访问google。所以只能手动安装。
      $ git clone https://go.googlesource.com/go
      $ cd go
      $ git checkout go1.10.3

       

    6. 配置环境变量:

      export GOROOT=$HOME/go1.X//没有bin
      export GOARCH=amd64
      export GOOS=linux
      export PATH=$PATH:$GOROOT/go1.x/bin

       

  4. 开始编译Kubernetes:

    1. 在go/go-go1.10.3/src/的src目录下面新建k8s.io/kubernetes/文件夹。如果出现以下问题

      在环境变量中将之前设置的CGO_ENABLED=0 设置为1。
    2. 验证是否编译成功,去kubernetes/output/local/bin/linux/amd64目录下面使用命令:./kubelet version,如果有大量的说明显示则说明显示成功。如图:

  5. 最后将kubernetes的amd64目录下面所有编译之后的代码全部复制出来,最后进行安装。

  6. 版本限制:kubrenetes1.10版本需要使用go的版本至少在1.10.2(包括1.10.2)以上。