Kubernetes 源码剖析与实战
孔令飞
前腾讯云专家工程师
1011 人已学习
新⼈⾸单¥68
Kubernetes 源码剖析与实战
15
15
1.0x
00:00/00:00
登录|注册

11|Kubernetes代码仓库介绍

你好,我是孔令飞。
Kubernetes 源码量比较大,如果没有一个合理的仓库结构设计,维护起来会很困难。这节课咱们一起来聊聊它的代码仓库结构,以及每个源码目录的作用,看看 Kubernetes 是怎么“排兵布阵”的,让你更轻松地看懂 Kubernetes 的源码。

Kubernetes 仓库结构介绍

Kubernetes 社区在项目迭代过程中,也在不断优化项目的目录结构以适配最新的功能代码以及代码设计方法。
在 v1.30.2 版本中,Kubernetes 源码目录结构如下:
├── api/ # 存放 API 定义相关文件,例如:OpenAPI 文档
├── build/ # 包含了使用容器来构建 Kubernetes 组件的脚本
├── CHANGELOG/ # 存放 Kubernetes 的 CHANGELOG。master 分支会存放所有版本的CHANGELOG。在 tag 分支只会存放对应tag的CHANGELOG
├── cluster/ # 存放一些脚本和工具,用于创建、更新和管理Kubernetes集群
├── cmd # 存放Kubernetes的各种命令行工具的入口文件(即main文件),包括kubelet、kube-apiserver、kube-controller-manager、kube-scheduler等
├── docs # 存放设计、开发文档或用户文档等。为了精简 Kubernetes 仓库,docs目录下的文件已挪至https://github.com/kubernetes/community项目中
├── hack # 包含了一些脚本,这些脚本用来管理Kubernetes项目,例如:代码生成、组件安装、代码构建、代码测试等
│ ├── boilerplate # 各种类型文件的版权头信息。在生成代码时,对应文件类型的版权头信息取自该目录中对应的文件
│ ├── lib # 存放shell脚本库,包含一些通用的Shell函数
│ ├── make-rules # 存放 Makefile 文件
├── Makefile -> build/root/Makefile
├── _output # 保存一些构建产物或者其他临时文件
├── pkg # 存放大部分Kubernetes的核心代码。这里有API对象的定义、客户端库、认证/授权/审计机制、网络插件、存储插件等。这些代码可被项目内部或外部直接引用
│ ├── api # 包含了跟 API 相关的一些功能函数
│ ├── apis # 包含了 Kubernetes 中内置资源的定义、版本转换、默认值设置、参数校验等功能
│ ├── auth # 包含了授权相关的功能实现
│ ├── controller # 包含了kubernetes各类controller实现
│ ├── controlplane # 包含了kube-apiserver的核心实现
│ ├── credentialprovider
│ ├── features # 包含了Kubernetes内置的feature gate
│ ├── generated # 包含了Kubernetes中所有的生成文件。当前只包含了openapi。但是该目录目的是存放更多的生成文件
│ ├── kubeapiserver # 包含了kube-apiserver相关的核心包,当前有adminssion初始化、认证、授权相关的包
│ ├── kubectl # kubectl 命令行工具具体实现
│ ├── kubelet # kubelet 具体实现
│ ├── kubemark # kubemark 具体实现
│ ├── printers # 实现 Kubernetes 对象的打印和显示功能
│ ├── probe # 管理 Kubernetes 的健康检查探针
│ ├── proxy # kube-proxy 具体实现
│ ├── registry # kube-apiserver核心代码实现,包含了资源的CURD、资源注册等
│ ├── scheduler # kube-scheduler 具体实现
│ ├── util # 提供一些通用的工具函数和辅助函数
│ ├── volume # 实现 Kubernetes 存储卷的管理
├── plugin # 存放Kubernetes的各种插件,包括网络插件、设备插件、调度插件、认证插件、授权插件等。这些插件使的Kubernetes更加灵活和强大
├── staging # 存放些即将被移动到其它仓库的代码
├── test # 存放测试工具及测试数据
├── third_party # 存放第三方工具、代码或其他组件
└── vendor # 存放项目依赖的库代码,一般为第三方库代码
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. Kubernetes 的代码仓库结构经过不断优化,保持了良好的组织结构和清晰的目录划分,使得开发者能够更轻松地理解和维护 Kubernetes 的源码。 2. Kubernetes 的代码仓库中的 pkg 目录存放了大部分核心代码,包括 API 对象定义、客户端库、认证、授权、审计机制、网络插件、存储插件等,这些代码可被项目内部或外部直接引用。 3. Kubernetes 的代码仓库中的 cmd 目录存放了各种命令行工具的入口文件,如 kubelet、kube-apiserver、kube-controller-manager、kube-scheduler 等,是 Kubernetes 各个命令行工具的具体实现。 4. Kubernetes 的代码仓库中的 hack 目录包含了一些脚本,用于管理 Kubernetes 项目,例如代码生成、组件安装、代码构建、代码测试等,是 Kubernetes 项目管理的重要工具。 5. Kubernetes 的代码仓库中的 staging 目录是一个暂存区,用来暂时保存未来会发布到其自己代码仓库的项目,这些项目会被定期同步到 k8s.io 组织中,作为 k8s.io 组织的一级项目而存在。 6. Kubernetes 的代码仓库中的 api 目录存放了 API 定义相关文件,如 OpenAPI 文档,是 Kubernetes API 相关功能的重要组成部分。 7. Kubernetes 的代码仓库中的 plugin 目录存放了各种插件,包括网络插件、设备插件、调度插件、认证插件、授权插件等,使得 Kubernetes 更加灵活和强大。 8. Kubernetes 选择了使用 Go 模块的包替代功能,直接将 `k8s.io/xxx` 替换为 staging 目录下的 xxx 模块,因为它最便捷也最合理。 9. 在 Kubernetes 中,了解版本映射非常重要。当第三方项目需要引用 Kubernetes 包及 staging 包时,必须指明对应版本。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kubernetes 源码剖析与实战》
新⼈⾸单¥68
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)