Kubebuilder 是一个用于构建 Kubernetes API 和控制器的开源工具集,由 Kubernetes SIGs(Special Interest Groups)社区开发和维护。它旨在简化开发者创建自定义资源(Custom Resources,CR)和控制器(Controllers)的过程,帮助开发者快速构建符合 Kubernetes 设计理念的扩展功能。Kubebuilder 基于 Go 语言,结合了 Kubernetes 的客户端库(如 client-go)和控制器运行时(controller-runtime),提供了脚手架代码生成、项目结构管理和测试工具等功能。
Kubebuilder 的主要目标是:
- 简化开发流程:通过自动生成样板代码,减少手动编写复杂 Kubernetes API 交互代码的工作量。
- 规范化设计:遵循 Kubernetes 的控制器模式和声明式 API 设计,确保扩展与 Kubernetes 原生组件一致。
- 提高效率:提供内置工具支持本地测试、部署和调试。
它适用于需要扩展 Kubernetes 功能的场景,例如创建自定义资源定义(CRD)、实现 Operator 或开发特定业务逻辑的控制器。
架构

这张图展示了 Kubebuilder 框架的架构和核心组件,清晰地描述了其工作流程和各部分之间的关系。以下是对图中内容的详细介绍:
图解架构介绍
1. Process (main.go)
- 描述:main.go 是 Kubebuilder 项目的入口文件,负责启动整个应用程序。
- 作用:它初始化一个或多个 Manager 实例(如果需要高可用性 HA,则可能有多个)。main.go 是整个流程的起点,设置并运行所有的控制器、Webhook 等组件。
- 描述:Manager 是 controller-runtime 库的核心组件,每个进程通常只有一个 Manager。
- 作用:
- 负责领导选举(Leader Election),确保高可用性(HA)场景下只有一个 Manager 实例是活跃的。
- 管理 Webhook 证书(certs)。
- 缓存事件(caches events)。
- 持有与 Kubernetes API 服务器交互的客户端(clients)。
- 向控制器(Controllers)广播事件(broadcasts events)。
- 处理信号(signals)和优雅关闭(shutdown)。
3. Client 和 Cache
- Client:
- 描述:Client 负责与 Kubernetes API 服务器通信,处理认证和协议。
- 作用:通过 Client,Manager 可以与 Kubernetes 集群交互,执行资源的创建、更新、删除等操作。
- Cache:
- 描述:Cache 存储最近获取(GET)或列出的(List)对象。
- 作用:由控制器和 Webhook 使用,减少直接与 API 服务器的交互,提高性能。