在实现的开发过程中,开发人员需要借助 Operator 开发框架来扩展 Kubernetes API。operator framework
可以提供 webhook
和 controller
的框架,它的主要意义在于帮助开发者屏蔽了一些通用的底层细节,不需要开发者再去实现消息通知触发、失败重新入队等,只需关注被管理应用的运维逻辑实现即可。主流的 operator framework
主要有两个:kubebuilder 和 operator-sdk。
主要步骤是首先定义好 Group、version 以及 kind,然后使用 operator framework
命令即可生成所需的 operator 框架,CRD结构等,具体用法这里不详细叙述。
自定义controller实现
// Define some nested types to simplify the codebase
type Controller interface {
Run(int, <-chan struct{})
}
type InformerFactory interface {
Start(stopCh <-chan struct{})
WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool
}
// 初始化两种 CRD 的 controller
// Initialize all controllers
controllers := []Controller{
// add serverlessdb controller
serverlessdb.NewController(deps),
// add backup controller
backup.NewController(deps),
}