本文以k8s v1.14为例,到v1.28也适用。
已配好相应的go v1.12.2(go 版本选择按k8s的CHANGELOG.md选)
已下载k8s的1.14.9源码 kubernetes/,或直接git clone ...
进入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" 编译参数,禁止编译优化和内联,减小可执行程序大小。