架构图

这张图展示了 Kubebuilder 框架的架构,详细描述了其核心组件及其交互方式。Kubebuilder 基于 controller-runtime 库,用于构建 Kubernetes 控制器和 Webhook,帮助开发者实现自定义资源(CR)和 Operator 的逻辑。
Process (main.go)
描述
- main.go 是 Kubebuilder 项目的入口文件,负责启动整个应用程序。
- “One of these per cluster, or several if using HA”:表示每个 Kubernetes 集群通常运行一个进程,但如果需要高可用性(High Availability, HA),可以运行多个进程,通过领导选举(Leader Election)机制确保只有一个实例活跃。
作用
- 初始化 Manager 并启动控制器和 Webhook。
- main.go 通常包含以下步骤:
- 创建 Manager 实例。
- 注册控制器和 Webhook。
- 启动 Manager,进入事件处理循环。
描述
- “One of these per process”:每个进程只有一个 Manager。
- 功能:
- 领导选举(Leader Election):在 HA 场景下,确保只有一个 Manager 实例是活跃的。
- 导出指标(Exports Metrics):通过 Prometheus 暴露控制器运行指标。
- 处理 Webhook 证书(Handles Webhook Certs):管理 Webhook 的 TLS 证书。
- 缓存事件(Caches Events):通过 Informer 缓存资源事件。
- 持有客户端(Holds Clients):提供与 API 服务器交互的客户端。
- 广播事件(Broadcasts Events to Controllers):将事件分发给控制器。
- 处理信号和关闭(Handles Signals and Shutdown):响应系统信号,优雅关闭。
作用
- Manager 是 controller-runtime 的核心组件,协调所有控制器和 Webhook。
- 它初始化 Informer、Cache 和事件队列,管理控制器的生命周期。
原理
- Manager 启动时:
- 创建与 API 服务器的连接(通过 client.Client)。
- 初始化 Informer 和 Cache,监听资源变化。
- 启动事件处理循环,将事件分发给控制器。
Client 和 Cache