文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何顺利完成Kubernetes源码编译

2023-06-04 16:31

关注

本篇文章给大家分享的是有关如何顺利完成Kubernetes源码编译,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

为什么要编译源码 ?

Kubernetes是一个非常棒的容器集群管理平台。通常情况下,我们并不需要修改K8S代码即可直接使用。但如果,我们在环境中发现了某个问题/缺陷,或按照特定业务需求需要修改K8S代码时,如定制Kubelet的StopContainer 逻辑、kube-scheduler的pod调度逻辑等。为了让修改生效,那么就需要编译K8S代码了。

Kubernetes源码编译,大致分为本地二进制可执行文件编译和docker镜像编译两种。由于在我们的环境中,Kubernetes是由Docker容器方式运行的。故此我们需要采用后面一种方式编译,即镜像编译。

由于Kubernetes每个组件服务的镜像Dockerfile文件是由Kubernetes源码自动生成的,因此,社区并未提供每个组件的镜像Dockerfile文件。编译本地二进制可执行文件很简单,也更直接。而docker镜像编译资料却很少,且碍于某种特殊网络原因,会导致失败。此处,将介绍如何顺利的完成K8S镜像编译。

安装依赖 

安装Golang

如何顺利完成Kubernetes源码编译

指定分支,下载 Kubernetes 源代码(默认$GOPATH目录为/root/go/)

如何顺利完成Kubernetes源码编译

本地二进制文件编译Kubernetes(方法一) 

修改运行平台配置参数(可选)

根据自己的运行平台(linux/amd64)修改hack/lib/golang.sh,把KUBE_SERVER_PLATFORMS,KUBE_CLIENT_PLATFORMS和KUBE_TEST_PLATFORMS中除linux/amd64以外的其他平台注释掉,以此来减少编译所用时间。

编译源码

进入Kubernetes根目录下

如何顺利完成Kubernetes源码编译

KUBE_BUILD_PLATFORMS指定目标平台,WHAT指定编译的组件,通过GOFLAGS和GOGCFLAGS传入编译时参数,如此处编译kubelet 组件。

如何顺利完成Kubernetes源码编译
  • 如果不指定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

如何顺利完成Kubernetes源码编译

生成的可执行文件在当前文件夹下面

如何顺利完成Kubernetes源码编译

Docker镜像编译Kubernetes(方法二)

查看kube-cross的TAG版本号

如何顺利完成Kubernetes源码编译

查看debian_iptables_version版本号

如何顺利完成Kubernetes源码编译

这里,我使用DockerHub的Auto build功能,来构建K8s镜像。自然将编译需要用到的base镜像,放在了DockerHub上(也算是为促进国内K8s源码docker编译贡献绵薄之力吧!)。

如何顺利完成Kubernetes源码编译

把build/lib/release.sh中的–pull去掉,避免构建镜像继续拉取镜像:

如何顺利完成Kubernetes源码编译

编辑文件hack/lib/version.sh

将KUBE_GIT_TREE_STATE=”dirty” 改为 KUBE_GIT_TREE_STATE=”clean”,确保版本号干净。

执行编译命令

如何顺利完成Kubernetes源码编译

其中KUBE_BUILD_PLATFORMS=linux/amd64指定目标平台为linux/amd64,GOFLAGS=-v开启verbose日志,GOGCFLAGS=”-N -l”禁止编译优化和内联,减小可执行程序大小。

编译的K8s Docker镜像以压缩包的形式发布在_output/release-tars目录中

如何顺利完成Kubernetes源码编译

使用编译镜像

等待编译完成后,在_output/release-stage/server/linux-amd64/kubernetes/server/bin/目录下保存了编译生成的二进制可执行程序和docker镜像tar包。如导入kube-apiserver.tar镜像,并更新环境上部署的kube-apiserver镜像。

如何顺利完成Kubernetes源码编译

整个编译过程结束后,现在就可以到master节点上,修改/etc/kubernetes/manifests/kube-apiserver.yaml描述文件中的image,修改完立即生效。

以上就是如何顺利完成Kubernetes源码编译,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯