Go 获取触发kubebuilder中控制器的事件类型

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)

我刚刚开始使用kubebuilder和Golang,用自定义资源扩展Kubernetes集群。我希望根据实际调用的事件在协调器函数中执行不同的操作

资源是否已创建?更新了吗?删除了吗

这些事件中的每一个都会触发控制器,但是,我似乎找不到一种可能来查看,到底发生了哪些事件。我可以通过编写如下对账器来解决此问题:

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。