跳过正文

初识代码生成器

·140 字·1 分钟
K8s-Codegen - 这篇文章属于一个选集。
§ 1: 本文

初识代码生成器
#

在 Kubernetes 源码中,默认保留了通过代码生成器生成代码文件的功能,如 pkg/apis/core/zz_generated.deepcopy.go 文件 。顶层 Makefile 中定义了 generated_files 命令,该命令用于构建代码生成器,generated_filesMakefile.generated_files 中的定义如下:

.PHONY: generated_files
generated_files: gen_prerelease_lifecycle gen_deepcopy gen_defaulter gen_conversion gen_openapi

generated_files 中定义了 5 个代码生成器的二进制工具,经过 make all 操作后,这些二进制工具被输出到 _output/bin/ 目录下 。如果二进制文件不存在,则可以通过 make generated_files 命令单独构建代码生成器的二进制工具 。下面分别介绍这些代码生成器 :

tree _output/bin/
_output/bin/
├── conversion-gen
├── deepcopy-gen
├── defaulter-gen
├── openapi-gen
└── prerelease-lifecycle-gen

此处的 5 种代码生成器是构建 Kubernetes 源码过程中所需要的,除了以上 5 种代码生成器,Kubernetes 还支持更多代码生成器,如 client-genlister-geninformer-genapplyconfiguration-gen 等,如下表所示 。

代码生成器生成的代码文件说明
deepcopy-genzz_generated.deepcopy.go自动生成 DeepCopy 相关函数的代码生成器,用于资源对象的深复制操作函数
defaulter-genzz_generated.defaults.go自动生成 Defaulter 相关函数的代码生成器,用于资源对象的默认值函数
conversion-genzz_generated.conversion.go自动生成 Convert 相关函数的代码生成器,用于资源对象的版本转换函数
openapi-genzz_generated.openapi.go自动生成 OpenAPI 定义文件 (OpenAPI Definition File) 的代码生成器
prerelease-lifecycle-genzz_generated.prerelease-lifecycle.go为 beta 资源自动生成 API 生命周期管理 (APILifecycle) 函数的代码生成器
client-genk8s.io/kubernetes/vendor/k8s.io/client-go/kubernetes/typed 目录下的代码文件自动生成资源对应的 ClientSet 客户端,ClientSet 客户端对资源组、资源版本、资源进行了封装,可以针对资源执行生产资源操作方法 (create、update、delete、get 等)
lister-genk8s.io/kubernetes/vendor/k8s.io/client-go/listers 目录下的代码文件自动生成资源对应的 Lister,为每一个 Kubernetes 资源提供 Lister 功能 (即提供 Get 和 List 方法)
informer-genk8s.io/kubernetes/vendor/k8s.io/client-go/informers 目录下的代码文件自动生成资源对应的 Informer,为 client-go 提供与 kube-apiserver 通信的机制
applyconfiguration-genk8s.io/kubernetes/vendor/k8s.io/client-go/applyconfigurations 目录下的代码文件自动为资源的 Apply 和 ApplyStatus 方法生成专属的 ApplyConfiguration 资源配置应用类型
凉柠
作者
凉柠
专注于 Kubernetes、分布式系统与 AI Agent 架构探索。
K8s-Codegen - 这篇文章属于一个选集。
§ 1: 本文