Go 获取触发kubebuilder中控制器的事件类型
我刚刚开始使用kubebuilder和Golang,用自定义资源扩展Kubernetes集群。我希望根据实际调用的事件在协调器函数中执行不同的操作 资源是否已创建?更新了吗?删除了吗 这些事件中的每一个都会触发控制器,但是,我似乎找不到一种可能来查看,到底发生了哪些事件。我可以通过编写如下对账器来解决此问题:Go 获取触发kubebuilder中控制器的事件类型,go,kubernetes,kubernetes-custom-resources,kubebuilder,Go,Kubernetes,Kubernetes Custom Resources,Kubebuilder,我刚刚开始使用kubebuilder和Golang,用自定义资源扩展Kubernetes集群。我希望根据实际调用的事件在协调器函数中执行不同的操作 资源是否已创建?更新了吗?删除了吗 这些事件中的每一个都会触发控制器,但是,我似乎找不到一种可能来查看,到底发生了哪些事件。我可以通过编写如下对账器来解决此问题: func(r*ServiceDescriptorReconciler)协调(ctx context.context,req ctrl.Request)(ctrl.Result,error)
func(r*ServiceDescriptorReconciler)协调(ctx context.context,req ctrl.Request)(ctrl.Result,error){
服务:=&batchv1.ServiceDescriptor{}
如果err:=r.Get(context.TODO(),req.NamespacedName,service);err!=nil&&errors.IsNotFound(err){
fmt.Println(“未找到资源->必须已删除”)
否则{
fmt.Println(“未发现错误->必须已创建或更新资源”)
}
}
然而,这让人感到奇怪的含蓄和有点刻薄
是否有一种干净的(可能是本机的)方式来获取对账器调用的事件类型?您将无法做到这一点,因为此系统设计为基于级别的,它不是由单个事件更改触发的,而是由从apiserver获取的实际群集状态触发的 查看
对账。转到你会注意到第行中有这样的评论:
对账是基于级别的,这意味着行动不会受到变化的影响
在单个事件中,而是由实际群集状态驱动
从apiserver或本地缓存读取。例如,如果响应
Pod Delete事件,请求将不包含Pod已删除
已删除,相反,协调函数在读取
群集状态,并看到Pod丢失
与此一致:
请求包含协调请求所需的信息
Kubernetes对象。这包括要
标识对象-其名称和命名空间。它不包含
有关任何特定事件或对象内容本身的信息
谢谢你的回答!这对我来说非常清楚。现在,我尝试r.Get
资源,并检查返回的错误为if err!=nil&&errors.IsNotFound(err)
,它一直在可靠地检测资源是否被删除。从您的角度来看,这是一个很好的解决方法吗?我不是专家,但是的,看起来是一个很好的解决方法。它以类似的方式实现,因此它是正确的。如果您觉得这个答案有用,请不要忘记留下upvote。