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方法:主要的业务实现