[Kubernetes] 多调度器(1/3):如何编译scheduler,以默认调度器 kube-scheduler为例

文章目录

      • 前提
      • 如何编译
      • 参考

本文以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

你可能感兴趣的:(kubernetes,容器,云原生,linux,go)