一、问题描述
Kubernetes 源码自带了编译脚本,简单执行 make quick-release 即可编译
但遗憾的是,该命令会编译所有的源码,耗时较长,这对于 Kubernetes 开发来说无疑是高代价的
因此,我们有了单独编译部分代码的需求,本文就介绍一种简单的方法
二、部分编译步骤
考虑到 Kubernetes 是基于 Golang 语言编写的,博主提供了一个容器化的 golang 环境,以便实现快速编译
Dockerfile 地址:https://github.com/SataQiu/kube-build
基于该 Dockerfile 编译好的镜像可以在 DockerHub 下载(shidaqiu/kube-build)
基于此镜像,实现模块化编译仅需两步:
1. 下载 kube-build 镜像
# docker pull shidaqiu/kube-build
2. 以编译 kubeadm 模块为例,假设你从 GitHub 上克隆下来的 kubernetes 文件夹存在于 /root/src 目录
执行以下命令,进入容器环境
# docker run -it -v /root/src:/usr/lib/go/src/k8s.io shidaqiu/kube-build
然后,在容器内进入 kubeadm 模块路径,执行编译命令
# cd /usr/lib/go/src/k8s.io/kubernetes/cmd/kubeadm
# go build
编译好的 kubeadm 二进制文件就自动生成在命令执行所在路径下了,整个过程也就1分钟(视机器配置)
相比全量编译,该方法能有效缩短代码编译时间,提升开发效率!