k8s github地址: https://github.com/kubernetes/kubernetes
k8s的编译有两种方式:
1: go环境:
mkdir -p $GOPATH/src/k8s.io
cd $GOPATH/src/k8s.io
git clone https://github.com/kubernetes/kubernetes
cd kubernetes
make
编译完成之后,会在./_output/bin/目录下生成对应的可执行文件,如下图:
如果只是编译某个组件,可以使用命令make all WHAT=cmd/kubelet GOFLAGS=-v
2: docker 环境:
git clone [https://github.com/kubernetes/kubernetes](https://github.com/kubernetes/kubernetes)
cd kubernetes
make quick-release
docker环境编译,mac系统下需要安装 gnu.tar, 使用brew install gnu.tar
安装,最终生成的二进制文件在_output/dockerized/bin/linux/amd64目录下,也可以使用./build/run.sh hack/build-go.sh cmd/kubelet
单独编译某个组件
k8s源码采用 go module(go 1.11rc1开始支持)管理包,go module的使用方法可以参考该文档:https://talks.godoc.org/github.com/myitcv/talks/2018-08-15-glug-modules/main.slide
如下图所示,部分module直接引用staging下面的包
|--api // 存放api规范相关的文档
|------api-rules //已经存在的违反Api规范的api
|------openapi-spec //OpenApi规范
|--build // 构建和测试脚本
|------run.sh //在容器中运行该脚本,后面可接多个命令:make, make cross 等
|------copy-output.sh //把容器中_output/dockerized/bin目录下的文件拷贝到本地目录
|------make-clean.sh //清理容器中和本地的_output目录
|------shell.sh // 容器中启动一个shell终端
|------......
|--cluster // 自动创建和配置kubernetes集群的脚本,包括networking, DNS, nodes等
|--cmd // 内部包含各个组件的入口,具体核心的实现部分在pkg目录下
|--hack // 编译、构建及校验的工具类
|--logo // kubernetes的logo
|--pkg // 主要代码存放类,后面会详细补充该目录下内容
|------kubeapiserver
|------kubectl
|------kubelet
|------proxy
|------registry
|------scheduler
|------security
|------watch
|------......
|--plugin
|------pkg/admission //认证
|------pkg/auth //鉴权
|--staging // 这里的代码都存放在独立的repo中,以引用包的方式添加到项目中
|------k8s.io/api
|------k8s.io/apiextensions-apiserver
|------k8s.io/apimachinery
|------k8s.io/apiserver
|------k8s.io/client-go
|------......
|--test //测试代码
|--third_party //第三方代码,protobuf、golang-reflect等
|--translations //不同国家的语言包,使用poedit查看及编辑
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。