写点什么

kubebuilder 构建控制器说明点

用户头像
Geek_f24c45
关注
发布于: 3 小时前
  1. 在 调谐器 内部,我们可以通过 Get,List 方法获得其他类型的对象


// SetupWithManager sets up the controller with the Manager.func (r *GuestbookReconciler) SetupWithManager(mgr ctrl.Manager) error {       return ctrl.NewControllerManagedBy(mgr).						For(&webappv1beta1.Guestbook{}).						Complete(r)
}

func (r *GuestbookReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { _ = r.Log.WithValues("guestbook", req.NamespacedName)
// your logic here // 此处得到 CRD 对象的通知 r.Log.Info("object", "namespace", req.NamespacedName.Namespace) r.Log.Info("object", "name", req.NamespacedName.Name)
// var g webappv1beta1.Guestbook
// err := r.Get(ctx, req.NamespacedName, &g) // 此处 我们获得 特定 ns 下的所有 POD 对象 podItems := &v1.PodList{Items: []v1.Pod{}}
r.List(ctx, podItems, client.InNamespace("volcano-system"))
for _, pod := range podItems.Items { r.Log.Info(pod.Name) }
return ctrl.Result{}, nil}
复制代码


  1. 当 想关心 其他对象的通知时,可以利用 Watch 添加

// SetupWithManager sets up the controller with the Manager.func (r *GuestbookReconciler) SetupWithManager(mgr ctrl.Manager) error {        return ctrl.NewControllerManagedBy(mgr).Watches(&source.Kind{Type: &v1.Pod{}}, &handler.EnqueueRequestForObject{}).                For(&webappv1beta1.Guestbook{}).                Complete(r)}// 这里 watch 了 POD 对象,,POD的变化都会同样通知到 Reconcile 内部
复制代码


  1. 当 想关心 对象中 某些字段或特定条件,可以使用 filter 过滤特定对象

func (r *GuestbookReconciler) SetupWithManager(mgr ctrl.Manager) error {        return ctrl.NewControllerManagedBy(mgr).Watches(&source.Kind{Type: &v1.Pod{}}, &handler.EnqueueRequestForObject{}).                For(&webappv1beta1.Guestbook{}, builder.WithPredicates(filterEvent{})).                Complete(r)}
// 设置 for 的option , 实现 filter 接口,就可以控制特定 对象是否入队// builder 的 watch, own 方法都支持 该 option
// 通过 WithEventFilter 可以设置全局的 event filter,
type filterEvent struct {
}
func (fe filterEvent) Create(event event.CreateEvent) bool { return false}
func (fe filterEvent) Delete(event event.DeleteEvent) bool { return false}
func (fe filterEvent) Update(event event.UpdateEvent) bool { return false}
func (fe filterEvent) Generic(event event.GenericEvent) bool { return false}



复制代码


https://segmentfault.com/a/1190000020359577

用户头像

Geek_f24c45

关注

还未添加个人签名 2018.03.24 加入

还未添加个人简介

评论

发布
暂无评论
kubebuilder 构建控制器说明点