文章目录
- 前提
- 如何编译
- 参考
本文以k8s v1.14为例,到v1.28也适用。
前提
-
已配好相应的go v1.12.2(go 版本选择按k8s的CHANGELOG.md选)
- 放在:/usr/local/
- GOPATH=/root/go/
-
已下载k8s的1.14.9源码 kubernetes/,或直接
git clone ...
-
放在:$GOPATH/src/k8s.io/。这里是/root/go/src/k8s.io/
-
如何找下载链接:下载地址在k8s的repo中,release搜索1.14找到链接:
src
字样代表源。区别source code vs binary。binary是编译好的二进制,如含
amd64
字样。命名必须是
.../k8s.io/kubernetes/各种内容
,不然import时可能会有影响(?),比如./pkg/scheduler/scheduler.go中:import ("k8s.io/kubernetes/pkg/scheduler/framework")
-
如何编译
进入k8s源码文件夹kubernetes
。里面已经有Makefile了,所以直接:
KUBE_BUILD_PLATFORMS=linux/amd64 make WHAT=cmd/kube-scheduler GOFLAGS=-v GOGCFLAGS="-N -l" -j8
执行完毕后,二进制可执行文件默认生成到 ./_output/bin
目录下。
参数说明:
-
KUBE_BUILD_PLATFORMS=linux/amd64
指定当前编译平台环境类型为linux/amd64
。否则默认会分别编译多种环境,编译时间很长。 -
make cmd/kube-scheduler
表示只编译kube-scheduler。-
make all
表示在本地环境中编译所有组件。 -
若我们只想编译某个组件,例如,只想编译
kube-apiserver
,那么可以执行make WHAT=cmd/kube-apiserver
命令。这里可选组件有很多,详细可参考kubernetes/cmd/
目录下所有组件。// 可行。从[official docs](file:///C:/Users/dell/Zotero/storage/NZPBHWF2/configure-multiple-schedulers.html)中发现,后面唯一用到编译出来的二进制文件(位于
./_output/
)的就只有这一句,ADD ./_output/local/bin/linux/amd64/kube-scheduler
,而它只需要编译scheduler就可以得到
-
-
GOFLAGS=-v
编译参数,开启 verbose 日志。 -
GOGCFLAGS="-N -l"
编译参数,禁止编译优化和内联,减小可执行程序大小。
参考
- 官方文档 configure-multiple-schedulers.html (k8s v1.28)
- https://cloud.tencent.com/developer/article/1433219