1、使用kubebuilder
cd /mnt/d/GoLand/workspace/src/proj_test/client-go/practice06-kubebuilder/
go mod init github.com/practice06-kubebuilder
kubebuilder init --domain baiding.tech
kubebuilder create api --group ingress --version v1beta1 --kind App
kubebuilder create webhook --group ingress --version v1beta1 --kind App --defaulting --programatic-validation
2、controller-runtime由kubebuilder和operator-SDK共同完成;
3、kubebuilder的manager,用于创建和管理controllers(controllerManager是manager的具体实现)
kubebuilder流程
(1)创建controller并把controller作为Runnable add到manager中,在manager.start时一块启动controller,并且每个controller循环的从workQueue中取元素进行reconcile处理。
Complete(r)
if err := blder.doController(r); err != nil {
blder.ctrl, err = newController(controllerName, blder.mgr, ctrlOptions)
c, err := NewUnmanaged(name, mgr, options)
return &controller.Controller{ 同文件的start方法
for i := 0; i < c.MaxConcurrentReconciles; i++ {
c.reconcileHandler(ctx, obj)
result, err := c.Reconcile(ctx, req)
return c.Do.Reconcile(ctx, req)
(2)创建watch,通过informer将事件过滤后放入WorkQueue,从而触发reconcile处理
Complete(r)
if err := blder.doWatch(); err != nil {
4、可以通过WithEventFilter添加predicates,predicates来决定create、update、delete、generic事件是否需要被处理。
kubebuiler的reconciler的client默认是delegatingClient,读走的是informer来读indexer的缓存,写是直接写到apiserver;apireader是读写直接走apiserver。
5、webhook参考https://zhuanlan.zhihu.com/p/404764407



