本文主要介绍k8s本地编译方法
前提条件,已经配置好go环境,另外配置了gopath,并且下载好k8s源码译即可
mkdir -p $GOPATH/src/k8s.io
cd $GOPATH/src/k8s.io
git clone https://github.com/kubernetes/kubernetes
使用cloc统计k8s代码行数,480多万行代码了
cloc kubernetes
22768 text files.
17456 unique files.
5783 files ignored.
github.com/AlDanial/cloc v 1.92 T=52.44 s (332.9 files/s, 121301.8 lines/s)
--------------------------------------------------------------------------------
Language files blank comment code
--------------------------------------------------------------------------------
Go 14794 495857 906599 3762694
JSON 306 4 0 853959
YAML 1140 744 1240 102285
Markdown 464 19648 0 69427
Bourne Shell 334 6322 12335 31097
Protocol Buffers 116 5610 18703 11466
PO File 12 1873 13413 11291
Assembly 99 2599 2634 9827
make 63 545 918 4388
PowerShell 7 418 1067 2688
C/C++ Header 1 399 4367 839
Bourne Again Shell 12 89 74 773
Starlark 21 56 0 740
Lua 1 30 26 453
Dockerfile 51 221 733 447
sed 4 4 32 445
Python 7 119 159 412
SVG 4 4 4 378
C 7 49 79 156
ANTLR Grammar 1 31 17 138
TOML 5 24 86 74
INI 1 2 0 10
HTML 3 0 0 3
DOS Batch 1 2 17 2
Bazel 1 0 0 1
CSV 1 0 0 1
--------------------------------------------------------------------------------
SUM: 17456 534650 962503 4863994
--------------------------------------------------------------------------------
Makefile作用
Makefile: 顶层Makefile文件,描述了整个项目所有代码文件的编译顺序、编译规则及编译后的二进制输出等。 Makefile.generated_files: 描述了代码生成的逻辑 通过make help命令,可以展示出所有可用的构建选项,从构建到测试的选项都有。首先,看一下make all命令在Makefile中的定义, 代码示例如下:
使用make命令进行本地编译(也可以执行make all)
mac进行编译的话,要保持bash的版本大于4.2,执行:
brew install bash
编译开始
cd kubernetes
make
+++ [0119 21:15:30] Building go targets for darwin/amd64:
具体输出省略......
+++ [0119 21:16:42] Building go targets for darwin/amd64:
cmd/kube-proxy
cmd/kube-apiserver
cmd/kube-controller-manager
cmd/kubelet
cmd/kubeadm
编译完成后,生成的二进制文件保存在_output/bin目录下:
➜ kubernetes git:(huaihe) ✗ cd _output/bin ll
total 3343848
-rwxr-xr-x 1 daixuan staff 66799552 1 19 21:22 apiextensions-apiserver
-rwxr-xr-x 1 daixuan staff 6804320 1 19 21:15 conversion-gen
-rwxr-xr-x 1 daixuan staff 6486912 1 19 21:15 deepcopy-gen
-rwxr-xr-x 1 daixuan staff 6490448 1 19 21:15 defaulter-gen
-rwxr-xr-x 1 daixuan staff 167559680 1 19 21:22 e2e.test
-rwxr-xr-x 1 daixuan staff 57253072 1 19 21:22 gendocs
-rwxr-xr-x 1 daixuan staff 201889800 1 19 21:22 genkubedocs
-rwxr-xr-x 1 daixuan staff 209752936 1 19 21:22 genman
-rwxr-xr-x 1 daixuan staff 4241392 1 19 21:22 genswaggertypedocs
-rwxr-xr-x 1 daixuan staff 57245400 1 19 21:22 genyaml
-rwxr-xr-x 1 daixuan staff 7748432 1 19 21:22 ginkgo
-rwxr-xr-x 1 daixuan staff 1849072 1 19 21:22 go-runner
-rwxr-xr-x 1 daixuan staff 3357632 1 19 21:15 go2make
-rwxr-xr-x 1 daixuan staff 59695264 1 19 21:22 kube-aggregator
-rwxr-xr-x 1 daixuan staff 150943040 1 19 21:22 kube-apiserver
-rwxr-xr-x 1 daixuan staff 139147248 1 19 21:22 kube-controller-manager
-rwxr-xr-x 1 daixuan staff 1613872 1 19 21:22 kube-log-runner
-rwxr-xr-x 1 daixuan staff 48879872 1 19 21:22 kube-proxy
-rwxr-xr-x 1 daixuan staff 57273632 1 19 21:22 kube-scheduler
-rwxr-xr-x 1 daixuan staff 51743120 1 19 21:22 kubeadm
-rwxr-xr-x 1 daixuan staff 58093248 1 19 21:22 kubectl
-rwxr-xr-x 1 daixuan staff 54034944 1 19 21:22 kubectl-convert
-rwxr-xr-x 1 daixuan staff 135765360 1 19 21:22 kubelet
-rwxr-xr-x 1 daixuan staff 135554912 1 19 21:22 kubemark
-rwxr-xr-x 1 daixuan staff 5029056 1 19 21:22 linkcheck
-rwxr-xr-x 1 daixuan staff 1530960 1 19 21:22 mounter
-rwxr-xr-x 1 daixuan staff 8756192 1 19 21:16 openapi-gen
-rwxr-xr-x 1 daixuan staff 6456560 1 19 21:15 prerelease-lifecycle-gen
使用编译成功的二进制,测试命令输出
➜ bin git:(huaihe) ✗ ./kubeadm
┌──────────────────────────────────────────────────────────┐
│ KUBEADM │
│ Easily bootstrap a secure Kubernetes cluster │
│ │
│ Please give us feedback at: │
│ https://github.com/kubernetes/kubeadm/issues │
└──────────────────────────────────────────────────────────┘
Example usage:
.......
清理编译输出
make clean
如果只需要编译kubeadm,执行:
make WHAT=cmd/kubeadm