代码地址
kubernetes代码地址托管在Github上,代码地址为:https://github.com/kubernetes/kubernetes
如何编译
主要有两种方式进行编译:
- 本地Go语言环境构建:
1
2
3
4
5mkdir -p $GOPATH/src/k8s.io
cd $GOPATH/src/k8s.io
git clone https://github.com/kubernetes/kubernetes
cd kubernetes
make - Docker构建,官方的Kubernetes构建采用此方式
1
2
3git clone https://github.com/kubernetes/kubernetes
cd kubernetes
make quick-release
关于向官方提交代码和创建Issue的规范可以查看这篇文档。
Macos本地构建Kubernetes
博主使用Macos M1进行本地构建。
安装GUN软件包
首先安装编译所需的GUN软件包:
1 | find `brew --prefix`/opt -type d -follow -name gnubin -print |
设置PATH到.zshrc:
1 | GNUBINS="$(find `brew --prefix`/opt -type d -follow -name gnubin -print)" |
安装etcd
在本地安装etcd:
1 | brew install etcd |
开始编译
- 支持按需编译所需的模块,通过
make WHAT=cmd/<subsystem>的方式,比如:1
make WHAT=cmd/kubectl
- 跨平台编译:
1
2make cross
make cross KUBE_BUILD_PLATFORMS=windows/amd64 # 执行平台
编译成功后的产物将在_output/bin/kubectl。
我们选择编译所有的组件,使用make all在代码根目录下执行
- 需要 bash版本 >= 4.2,可以使用
brew install bash来更新版本
执行完毕之后,可以在_output/bin看到如下输出:
1 | apiextensions-apiserver go-runner kube-controller-manager kube-scheduler kubectl-convert mounter |
如何测试
开发者提交的patch需要经过单元、集成和端到端测试并通过才能被合并。
- 提交前验证
运行以下命令进行提交代码前的一系列验证
1 | make verify |
- 单元测试
针对一个特定的包进行测试:
1 | make test WHAT=./pkg/apis/core/helper GOFLAGS=-v |
每次拉取请求都需要通过所有的单元测试,运行以下进行单元测试:
1 | make test |
- 集成测试
运行集成测试需要以来etcd,可以运行以下执行集成测试:
1 | make test-integration |
- 端到端测试
端到端测试需要花费很长时间,会启动,测试一个集群,最后删除一个集群:
目录结构
├── api/ # Kubernetes API 定义
│ ├── v1/ # Kubernetes API 版本 1
│ ├── v1beta1/ # Kubernetes API 版本 1beta1
│ └── …/
├── cmd/ # Kubernetes 命令行工具
│ ├── kube-apiserver/ # Kubernetes API Server
│ ├── kube-controller-manager/ # Kubernetes Controller Manager
│ ├── kube-proxy/ # Kubernetes Proxy
│ ├── kube-scheduler/ # Kubernetes Scheduler
│ ├── kubeadm/ # Kubernetes 初始化工具
│ ├── kubectl/ # Kubernetes 命令行客户端
│ └── …/
├── pkg/ # Kubernetes 代码库
│ ├── apis/ # Kubernetes API 实现
│ ├── apiserver/ # Kubernetes API Server 实现
│ ├── client/ # Kubernetes 客户端实现
│ ├── controller/ # Kubernetes 控制器实现
│ ├── kubelet/ # Kubernetes Kubelet 实现
│ ├── proxy/ # Kubernetes Proxy 实现
│ ├── scheduler/ # Kubernetes Scheduler 实现
│ ├── util/ # Kubernetes 工具库
│ └── …/
├── vendor/ # 第三方依赖
├── Godeps/ # 过时的第三方依赖管理
├── hack/ # 构建、测试、发布脚本
├── docs/ # Kubernetes 文档
├── test/ # 测试代码
├── examples/ # Kubernetes 示例
├── LICENSES/ # 第三方依赖许可证
├── OWNERS # Kubernetes 代码库的所有者列表
├── README.md # Kubernetes 代码库说明文档
├── go.mod # Go 模块文件
└── go.sum # Go 模块文件