Operator 是 Kubernetes 用来拓展其 API 的一种开发范式(Pattern),其核心是定义若干的自定义资源及其对应的资源控制器,当这些资源发生变化时其对应的控制器对变化进行调解(Reconcile),最终使得实际状态与预期状态达成一致。K8s-sigs 推出的 kubebuilder 是一个用于构建 Operator 应用的框架,和 Operator-SDK 一样都依赖了 controller-runtime,提供了高级 API 和抽象,让开发者更直观地编写操作逻辑,并提供用于快速启动新项目的脚手架和代码生成工具。
截至目前我已经参与了两个 Operator 项目的搭建和维护,均采用了 kubebuilder 做基础脚手架。我目前对 CRD 的设计生成、Webhook 的校验机制和、Controller 的控制循环机制有了一定认识,接触时间稍长后在日常开发 Operator 项目时难免出现缺乏新意的情况,Operator 模式看久了和 CURD 之于后端有些许相似。但我乐观地估计通过观察下层实现可以收获一些启发。既然 kubebuilder 和 Operator-SDK 都依赖了 controller-runtime,那么就先从它出发吧。