学习 K8s 源码的前置知识
目录
1. GVK 定义
GVK(group version kind): 资源组、资源版本、资源类型
表示 apps 组下 v1 版本 Deployment 类型的资源。
|
|
表示 core 组下 v1 版本 Pod 类型的资源。(没有组信息表示核心组)
|
|
2. kubernetes 对象结构
每个对象都可以分为四个部分。
例如 Deployment 资源:
TypeMeta
: GVK 信息ObjectMeta
: 对象元数据,比如有属性 name、namespaceDeploymentSpec
: 对象定义规范,比如有属性 replicas(控制副本数量)、template(定义 Pod 的模板)、selector(标签选择器,与 Pod 标签一样)、strategy(Pod 升级策略)DeploymentStatus
: 对象运行时状态, 比如有属性 replicas(总的副本数)
代码路径:kubernetes\vendor\k8s.io\api\apps\v1\types.go
|
|
3. kubernetes 源码目录结构
cmd
: 可执行程序包, 例如 kubelet 的入口为kubernetes\cmd\kubelet\kubelet.go
pkg
: kubernetes 包路径, 有些子目录与 cmd 目录一样,就是入口文件依赖的包vendor
: 第三方包,其中也有 kubernetes 的包plugin
: 准入插件和认证插件hack
: 脚本路径,非常有用api
: OpenAPI 定义
上述,只是简单的描述了,目前只需要知道 cmd
, pkg
, vendor
是非常重要的,也是我们经常看的。
4. 如何去阅读源码,真的需要把整个项目都运行起来吗?
我个人认为是完全不需要。
一般来说看源码,只需要了解主线代码,知道哪些类是怎么配合的,一起完成了什么样的功能,即使你把整个程序都运行起来了,有些分支条件的代码,需要特殊的输入数据,在你不熟悉代码的情况下,你也很难去模拟,这时候我们只能看代码的测试类 ,来了解代码是怎样处理这个特殊数据的。
特意说明一下:
以后的阅读代码的部分,我基本以测试类来带领大家阅读。