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 關注
- 223 瀏覽
添加回答
舉報