vendor/sigs.k8s.io/controller-runtime/pkg/manager/internal.go
controllerManager Start启动
1.使用分布式锁
在分布式锁的回调里启动:startLeaderElection -》startLeaderElectionRunnables
2.不使用分布式锁,直接启动相关controller
startLeaderElectionRunnables
controllerManager有两个数组对象:
1.nonLeaderElectionRunnables 在controllerManager Start的时候,肯定会启动的controller
2.leaderElectionRunnables 通过分布式锁管理的controller
业务代码
总controller.go:
AddToManagerFuncs 这个slice,这个slice中function就是 业务controller的add方法。业务controller的add方法本质是构建 sigs.k8s.io/controller-runtime/pkg/controller/controller.go 这个对象,然后启动监听。
AddToManager 方法,一般是在整个operator启动的时候,调用这个方法,这个方法本质上就是遍历AddToManagerFuncs,然后调用这个slice的方法,就相当于启动所有controller。
业务 xxxx_controllergo
add方法:构建sigs.k8s.io/controller-runtime/pkg/controller/controller.go, 主要启动监听需要的对象
Reconcile方法:主要的业务实现