概述
api 信息
api 列表
- admission
- admissionregistration
- apidiscovery
- apiserverinternal
- apps
- authentication
- authorization
- autoscaling
- batch
- certificates
- coordination
- core
- discovery
- doc.go
- events
- extensions
- flowcontrol
- imagepolicy
- networking
- node
- policy
- rbac
- resource
- scheduling
- storage
- storagemigration
API 版本
大部分 api 都有多个版本,如:
- v1
- v1alpha1
- v1beta1
代码学习中,我们以 v1 版本为主。
api 代码结构
基本上每个 api 文件夹都有如下的文件列表:
- doc.go
- generated.pb.go
- register.go
- types.go
- types_swagger_doc_generated.go
- zz_generated.deepcopy.go
- zz_generated.prerelease-lifecycle.go
doc.go
这是包的文档文件,包含包的用途说明和基本的文档注释
通常会包含 +k8s:openapi-gen=true 这样的代码生成标记
定义了包的帮助文档和代码生成器的元数据。
打开看源码,发现除了 license 之外,只定义了 package 名字和该 package 相关的注解,如:
// +k8s:deepcopy-gen=package
// +k8s:protobuf-gen=package
// +k8s:openapi-gen=false
// +k8s:prerelease-lifecycle-gen=true
// +groupName=admission.k8s.io
package v1
generated.pb.go
generated.pb.go 是 Protocol Buffers 的生成文件(由 generated.proto 生成),包含了 AdmissionReview 等类型的 Protocol Buffers 序列化相关代码,用于 Kubernetes API 的 gRPC 通信和存储序列化。
代码都是从 generated.proto 文件生成的,没啥好看的,直接看 generated.proto 文件好了。
generated.proto
generated.proto 是Protocol Buffers 的定义文件,定义了当前 API 类型的 protobuf 消息格式。
generated.proto 文件会被 protoc 编译器用来生成 generated.pb.go
register.go
register.go 包含 API 类型的注册逻辑,将 API 中的类型注册到 Kubernetes API 的 Scheme 中。
register.go 定义了如何将 Go 类型与 API 版本/组进行映射,包含 AddToScheme 函数,其他组件可以调用它来注册这些类型。
types.go
最重要的文件,包含核心 API 类型的 Go 定义,定义了 API 相关的各种结构体,包含字段定义、标签注释和验证逻辑,有详细的字段注释说明每个字段的用途
types_swagger_doc_generated.go
自动生成的 Swagger 文档,包含 API 类型的详细文档,用于生成 Kubernetes API 参考文档。
这些注释会被 Kubernetes API 文档工具使用。
zz_generated.deepcopy.go
自动生成的 DeepCopy 方法实现,包含 api 类型的深拷贝方法,由 deepcopy-gen 工具根据 types.go 中的标记生成。
Kubernetes 运行时需要这些方法来安全地复制对象。
zz_generated.prerelease-lifecycle.go
自动生成的 API 生命周期相关代码,包含 API 版本的弃用和移除策略,由 prerelease-lifecycle-gen 工具生成。
用于管理 API 版本的生命周期(alpha/beta/stable 状态转换)。