Kubernetes源码编译
目前有2种方向, 一种是直接使用golang来编译出二进制包, 另外一种是通过容器来编译.
前提当然是本地需要下载k8s源码
Golang编译
直接编译也可以分成2种,一种是一次编译出来, 一种是每个模块单独编译
全编译
这种方法比较简单, 进入源码目录直接执行make
命令即可, 不过对应的k8s版本, 对go语言版本有一些要求, 具体可看k8s网站或者直接编译会提示需要哪个版本go语言.
编译会显示如下信息
[root@SZD-L0113231 kubernetes-release-1.9]# make +++ [0830 08:50:54] Building the toolchain targets: k8s.io/kubernetes/hack/cmd/teststale k8s.io/kubernetes/vendor/github.com/jteeuwen/go-bindata/go-bindata +++ [0830 08:50:54] Generating bindata: test/e2e/generated/gobindata_util.go /home/czs/code/kubernetes-release-1.9 /home/czs/code/kubernetes-release-1.9/test/e2e/generated /home/czs/code/kubernetes-release-1.9/test/e2e/generated +++ [0830 08:50:55] Building go targets for linux/amd64: ./vendor/k8s.io/code-generator/cmd/deepcopy-gen +++ [0830 08:51:02] Building the toolchain targets: k8s.io/kubernetes/hack/cmd/teststale k8s.io/kubernetes/vendor/github.com/jteeuwen/go-bindata/go-bindata +++ [0830 08:51:02] Generating bindata: test/e2e/generated/gobindata_util.go /home/czs/code/kubernetes-release-1.9 /home/czs/code/kubernetes-release-1.9/test/e2e/generated /home/czs/code/kubernetes-release-1.9/test/e2e/generated +++ [0830 08:51:03] Building go targets for linux/amd64: ./vendor/k8s.io/code-generator/cmd/defaulter-gen +++ [0830 08:51:08] Building the toolchain targets: k8s.io/kubernetes/hack/cmd/teststale k8s.io/kubernetes/vendor/github.com/jteeuwen/go-bindata/go-bindata +++ [0830 08:51:08] Generating bindata: test/e2e/generated/gobindata_util.go /home/czs/code/kubernetes-release-1.9 /home/czs/code/kubernetes-release-1.9/test/e2e/generated /home/czs/code/kubernetes-release-1.9/test/e2e/generated +++ [0830 08:51:09] Building go targets for linux/amd64: ./vendor/k8s.io/code-generator/cmd/conversion-gen +++ [0830 08:51:14] Building the toolchain targets: k8s.io/kubernetes/hack/cmd/teststale k8s.io/kubernetes/vendor/github.com/jteeuwen/go-bindata/go-bindata +++ [0830 08:51:14] Generating bindata: test/e2e/generated/gobindata_util.go /home/czs/code/kubernetes-release-1.9 /home/czs/code/kubernetes-release-1.9/test/e2e/generated /home/czs/code/kubernetes-release-1.9/test/e2e/generated +++ [0830 08:51:15] Building go targets for linux/amd64: ./vendor/k8s.io/code-generator/cmd/openapi-gen +++ [0830 08:51:21] Building the toolchain targets: k8s.io/kubernetes/hack/cmd/teststale k8s.io/kubernetes/vendor/github.com/jteeuwen/go-bindata/go-bindata +++ [0830 08:51:21] Generating bindata: test/e2e/generated/gobindata_util.go /home/czs/code/kubernetes-release-1.9 /home/czs/code/kubernetes-release-1.9/test/e2e/generated /home/czs/code/kubernetes-release-1.9/test/e2e/generated +++ [0830 08:51:21] Building go targets for linux/amd64: cmd/kube-proxy cmd/kube-apiserver cmd/kube-controller-manager cmd/cloud-controller-manager cmd/kubelet cmd/kubeadm cmd/hyperkube vendor/k8s.io/kube-aggregator vendor/k8s.io/apiextensions-apiserver plugin/cmd/kube-scheduler cluster/gce/gci/mounter cmd/kubectl cmd/gendocs cmd/genkubedocs cmd/genman cmd/genyaml cmd/genswaggertypedocs cmd/linkcheck vendor/github.com/onsi/ginkgo/ginkgo test/e2e/e2e.test cmd/kubemark vendor/github.com/onsi/ginkgo/ginkgo test/e2e_node/e2e_node.test cmd/gke-certificates-controller
最后在 _output
里面生成二进制文件
编译指定模块
可以指定相关参数
make WHAT=cmd/kubelet
单独编译
把k8s源码放到如下路径/root/go/src/k8s.io/
, 并且把源码文件夹名称改成kubernetes/
然后进入/cmd/kubelet
(只是以kubelet为例子)
执行go build -v
命令,如果没出错,可以生成可执行文件
生成的可执行文件在当前文件夹下面
[root@SZD-L0113231 kubectl]# ls -l total 66592 drwxr-x--- 2 root root 37 Aug 29 13:09 app -rw-r----- 1 root root 1233 Aug 29 13:09 BUILD -rwxr-x--- 1 root root 68177868 Aug 30 17:28 kubectl -rw-r----- 1 root root 772 Aug 29 13:09 kubectl.go -rw-r----- 1 root root 54 Aug 29 13:09 OWNERS
镜像编译
可以通过编译镜像来编译, 不过编译镜像一般是被墙的,需要自己在dockerhub或其镜像网站先下载好,
需要注意的是, 每个对应的k8s, 对应的编译镜像有特别的版本要求, 这个可以在源代码中间的build-image/cross/VERSION
里面可以看到对应的版本
docker pull googlecontainer/kube-cross:v1.9.3-1 docker pull googlecontainer/debian-iptables-amd64:v5
然后把tag改为k8s的tag,
docker tag docker.io/googlecontainer/kube-cross:v1.9.3-1 gcr.io/google_containers/kube-cross:v1.9.3-1 docker tag docker.io/googlecontainer/debian-iptables-amd64:v5 gcr.io/googlecontainer/debian-iptables-amd64:v5
不要直接执行很多网上说的命令 ./build/release.sh , 实测会编译很多处理器(如arm,ppc之类的)的版本,直接把我60G的磁盘写满(写了27G),然后出错退出了。
执行 ./build/run.sh make
, 只编译linux/amd64
最后会打印如下信息
+++ [0830 16:30:14] Building go targets for linux/amd64: cmd/kube-proxy cmd/kube-apiserver cmd/kube-controller-manager cmd/cloud-controller-manager cmd/kubelet cmd/kubeadm cmd/hyperkube vendor/k8s.io/kube-aggregator vendor/k8s.io/apiextensions-apiserver plugin/cmd/kube-scheduler cluster/gce/gci/mounter cmd/kubectl cmd/gendocs cmd/genkubedocs cmd/genman cmd/genyaml cmd/genswaggertypedocs cmd/linkcheck vendor/github.com/onsi/ginkgo/ginkgo test/e2e/e2e.test cmd/kubemark vendor/github.com/onsi/ginkgo/ginkgo test/e2e_node/e2e_node.test cmd/gke-certificates-controller Env for linux/amd64: GOOS=linux GOARCH=amd64 GOROOT=/usr/local/go CGO_ENABLED= CC= +++ [0830 16:36:23] Placing binaries +++ [0830 16:37:27] Syncing out of container +++ [0830 16:37:27] Stopping any currently running rsyncd container +++ [0830 16:37:27] Starting rsyncd container +++ [0830 16:37:28] Running rsync +++ [0830 16:38:47] Stopping any currently running rsyncd container
并且把生成的二进制放到 _output/dockerized/
下面
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
安卓面试中高级安卓开发工程师总结之——大公司的任职资格要求总结(2018年)
最近很多大公司陆续开始有技术岗位的人事招聘。很多安卓开发攻城狮也跃跃欲试。在这里,博主根据最近面试经验简单写一篇《写给中高级安卓开发攻城狮进阶大公司的几点建议》。如果你现在也从事安卓开发2年以上(最好是3年以上),有独立开发的能力,项目经验在3个以上的,对现在的工作状态,环境,薪水不满意的,想跳槽到大公司的。可以稍微借鉴一下,提高自己进大公司的竞争力。 先简单说一下博主本身吧,如果你觉得比我还不如,那我真的不建议你现在就跳槽。如果你觉得博主很low,那么恭喜你,你有很大能进大公司的可能。博主是专科,自学的Java和安卓开发。第一次撸码是在外包公司,撸了2年代码,参与写了6-7个项目。说实话,都不是自己一个人写的。第二份工作,经过了笔试,和3轮面试,最后做的是母婴行业的人工智能产品。因为现在有保密协议和行业竞争限制协议,所以不能说太多。一个人开发,有硬件交互的模块。 好了言归正传:目前北京安卓开发岗位还是比较多的。尤其是现在更多的是招聘的 中高级安卓开发。薪资也很不错。那么问题来了,这么多中高级安卓开发岗位,这么诱人的薪水,究竟大公司的中高级安卓开发工程师都有哪些要求?大公司中高级安卓开...
- 下一篇
谈谈“野生”Java程序员学习的道路!
一、引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来。LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的。 但是,最近问LZ的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了。 其实之前LZ写过一篇文章,但是那篇文章更多的是在讨论“面试前该不该刷题”这个话题,而这篇文章将会更加聚焦在面试前如何准备,以及工作当中如何学习这个话题上,而且会尽量写出一些干货。 二、第一个问题:阿里面试都问什么? 这个是让LZ最头疼的一个问题,也是群里的猿友们问的最多的一个问题。 说实话,LZ只能隐约想起并发、JVM、分布式、TCP/IP协议这些个关键字,具体的问题真的是几乎都没记住。而且就算LZ记住了,也告诉你了,你也背会了,但LZ觉得,在面试中,你被问到一模一样问题的可能性依然很小。 甚至,就算你运气好被问到了,你也照着背下来了,也不一定就能对你的面试起到正面的作用,因为面试官万一多问一句,你可能就露馅了,那还不如干脆点说不会更好。 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群