使用kubebuilder和code-generator构建你的crd套件
什么是Kubebuilder
Kubebuilder 是一个基于 CRD(Custom Resource Definitions,自定义资源定义)构建 Kubernetes API 的框架。它允许开发者使用 CRD 来构建 Kubernetes API、Controller 和 Admission Webhook。Kubebuilder 的主要目的是简化 Kubernetes API 和工具的构建过程,减少样板代码的编写,使得开发者可以更专注于业务逻辑的实现。
Kubebuilder 的工作流程大致如下:
创建一个新的工程目录。 创建一个或多个资源 API CRD 并将字段添加到资源中。 在控制器中实现协调循环(reconcile loop),watch 额外的资源。 在集群中运行测试(自动安装 CRD 并自动启动控制器)。 更新引导集成测试测试新字段和业务逻辑。 使用用户提供的 Dockerfile 构建和发布容器。
什么是code-generator
Kubernetes code-generator 是一个代码生成工具集合,它位于 Kubernetes 代码库中的 staging/src/k8s.io/code-generator 包中,这个工具的主要目的是自动化生成与 Kubernetes 相关的客户端库、API 服务器(API server)和其他与 Kubernetes 相关的代码,以提高代码的可维护性和一致性,减少重复代码的开发工作。
code-generator 的主要功能包括:
自动生成客户端库 clientset:通过定义自定义资源的 API 规范,code-generator 可以自动生成用于访问和操作这些自定义资源的客户端库。 自动生成 API 服务器代码:可以根据自定义资源的 API 规范,自动生成与之对应的 API 服务器代码,使得开发者可以快速构建自己的自定义资源的 API 服务器,并将其部署到 Kubernetes 集群中。 自动生成 DeepCopy 方法:对于 Kubernetes 对象,深拷贝是一种常见的操作,用于创建对象的副本。 自动生成其他辅助代码:除了上述功能外,code-generator 还可以生成其他与 Kubernetes 相关的辅助代码,如列表(List)、转换器(Converter)等。 code-generator 包含多个生成工具(gen tools),例如:
deepcopy-gen:为每个类型生成 DeepCopy 方法。 client-gen:生成类型化客户端集合(typed client sets)。 informer-gen:生成基于 Kubernetes API 资源的 Informer。 lister-gen:生成 Kubernetes API 资源的 Lister。 register-gen:自动生成 API 资源类型的注册表代码。 conversion-gen:用于生成 Kubernetes 对象之间的转换器(Converter)。 openapi-gen:用于生成 Kubernetes API 的 OpenAPI 规范。
综上,这两个工具都可以提升我们管理CRD的效率。首先我们使用Kubebuilder生成我们想要的crd对应的type和对应的crd文件。code-generator可以帮助我们生成与api交互需要的资源,比如lister。
接下来老高会讲解如何使用kubebuilder和code-generator构建你的crd套件。