共计 1956 个字符,预计需要花费 5 分钟才能阅读完成。
本篇文章给大家分享的是有关如何顺利完成 Kubernetes 源码编译,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。
为什么要编译源码 ?
Kubernetes 是一个非常棒的容器集群管理平台。通常情况下,我们并不需要修改 K8S 代码即可直接使用。但如果,我们在环境中发现了某个问题 / 缺陷,或按照特定业务需求需要修改 K8S 代码时,如定制 Kubelet 的 StopContainer 逻辑、kube-scheduler 的 pod 调度逻辑等。为了让修改生效,那么就需要编译 K8S 代码了。
Kubernetes 源码编译,大致分为本地二进制可执行文件编译和 docker 镜像编译两种。由于在我们的环境中,Kubernetes 是由 Docker 容器方式运行的。故此我们需要采用后面一种方式编译,即镜像编译。
由于 Kubernetes 每个组件服务的镜像 Dockerfile 文件是由 Kubernetes 源码自动生成的,因此,社区并未提供每个组件的镜像 Dockerfile 文件。编译本地二进制可执行文件很简单,也更直接。而 docker 镜像编译资料却很少,且碍于某种特殊网络原因,会导致失败。此处,将介绍如何顺利的完成 K8S 镜像编译。
安装依赖
安装 Golang
指定分支,下载 Kubernetes 源代码(默认 $GOPATH 目录为 /root/go/)
本地二进制文件编译 Kubernetes(方法一)
修改运行平台配置参数(可选)
根据自己的运行平台(linux/amd64) 修改 hack/lib/golang.sh,把 KUBE_SERVER_PLATFORMS,KUBE_CLIENT_PLATFORMS 和 KUBE_TEST_PLATFORMS 中除 linux/amd64 以外的其他平台注释掉,以此来减少编译所用时间。
编译源码
进入 Kubernetes 根目录下
KUBE_BUILD_PLATFORMS 指定目标平台,WHAT 指定编译的组件,通过 GOFLAGS 和 GOGCFLAGS 传入编译时参数,如此处编译 kubelet 组件。
如果不指定 WHAT,则编译全部。
make all 是在本地环境中进行编译的。
make release 和 make quick-release 在容器中完成编译、打包成 docker 镜像。
编译 kubelet 这部分代码,也可执行 make clean make WHAT=cmd/kubelet
检查编译成果
编译过程较长,请耐心等待,编译后的文件在 kubernetes/_output 里。
或者进入 cmd/kubelet (以 kubelet 为例子)
执行 go build - v 命令, 如果没出错, 会生成可执行文件 kubelet
生成的可执行文件在当前文件夹下面
Docker 镜像编译 Kubernetes(方法二)
查看 kube-cross 的 TAG 版本号
查看 debian_iptables_version 版本号
这里,我使用 DockerHub 的 Auto build 功能,来构建 K8s 镜像。自然将编译需要用到的 base 镜像,放在了 DockerHub 上(也算是为促进国内 K8s 源码 docker 编译贡献绵薄之力吧!)。
把 build/lib/release.sh 中的–pull 去掉,避免构建镜像继续拉取镜像:
编辑文件 hack/lib/version.sh
将 KUBE_GIT_TREE_STATE=”dirty” 改为 KUBE_GIT_TREE_STATE=”clean”,确保版本号干净。
执行编译命令
其中 KUBE_BUILD_PLATFORMS=linux/amd64 指定目标平台为 linux/amd64,GOFLAGS=- v 开启 verbose 日志,GOGCFLAGS=”-N -l”禁止编译优化和内联,减小可执行程序大小。
编译的 K8s Docker 镜像以压缩包的形式发布在_output/release-tars 目录中
使用编译镜像
等待编译完成后,在_output/release-stage/server/linux-amd64/kubernetes/server/bin/ 目录下保存了编译生成的二进制可执行程序和 docker 镜像 tar 包。如导入 kube-apiserver.tar 镜像,并更新环境上部署的 kube-apiserver 镜像。
整个编译过程结束后,现在就可以到 master 节点上,修改 /etc/kubernetes/manifests/kube-apiserver.yaml 描述文件中的 image,修改完立即生效。
以上就是如何顺利完成 Kubernetes 源码编译,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。