1 回答
TA贡献1866条经验 获得超5个赞
最有可能的问题是WithEventFIlter适用于控制器的所有监视对象。CRD 的生成是自动递增的,但这并不适用于所有资源类型。
来自 GenerationChangedPredicate 文档:
// Caveats:
//
// * The assumption that the Generation is incremented only on writing to the spec does not hold for all APIs.
// E.g For Deployment objects the Generation is also incremented on writes to the metadata.annotations field.
// For object types other than CustomResources be sure to verify which fields will trigger a Generation increment when they are written to.
您可以通过创建一个秘密/更新一个秘密来检查这一点,您会看到没有生成集(至少在我的本地 k3d 集群上没有)。
它很可能适用于创建,因为最初控制器会将现有资源与集群同步。
要解决它,您可以使用:
func (r *vtsReconciler) SetupWithManager(mgr ctrl.Manager) error {
manager := ctrl.NewControllerManagedBy(mgr).
For(&vts.str, WithPredicates(predicate.Or(predicate.GenerationChangedPredicate{}, predicate.AnnotationChangedPredicate{}))).
manager = manager.Watches(&source.Kind{Type: &v1.Secret{}}, handler.EnqueueRequestsFromMapFunc(func(a client.Object) []reconcile.Request {
return r.SecretRequests.FindForSecret(a.GetNamespace(), a.GetName())
}))
return manager.Complete(r)
}
它应该只将谓词应用于您的自定义资源。
- 1 回答
- 0 关注
- 324 浏览
添加回答
举报
