本文主要介绍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