Merge pull request #533 from pigletfly/watchedNamespace

controller-manager: introduce --skipped-propagating-namespaces flag
This commit is contained in:
karmada-bot 2021-07-22 19:06:46 +08:00 committed by GitHub
commit e7887f4fb8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 15 deletions

View File

@ -105,13 +105,18 @@ func setupControllers(mgr controllerruntime.Manager, opts *options.Options, stop
skippedResourceConfig := util.NewSkippedResourceConfig()
// TODO(pigletfly): add SkippedPropagatingAPIs validation
skippedResourceConfig.Parse(opts.SkippedPropagatingAPIs)
skippedPropagatingNamespaces := map[string]struct{}{}
for _, ns := range opts.SkippedPropagatingNamespaces {
skippedPropagatingNamespaces[ns] = struct{}{}
}
resourceDetector := &detector.ResourceDetector{
DiscoveryClientSet: discoverClientSet,
Client: mgr.GetClient(),
InformerManager: informermanager.NewSingleClusterInformerManager(dynamicClientSet, 0),
RESTMapper: mgr.GetRESTMapper(),
DynamicClient: dynamicClientSet,
SkippedResourceConfig: skippedResourceConfig,
DiscoveryClientSet: discoverClientSet,
Client: mgr.GetClient(),
InformerManager: informermanager.NewSingleClusterInformerManager(dynamicClientSet, 0),
RESTMapper: mgr.GetRESTMapper(),
DynamicClient: dynamicClientSet,
SkippedResourceConfig: skippedResourceConfig,
SkippedPropagatingNamespaces: skippedPropagatingNamespaces,
}
resourceDetector.EventHandler = informermanager.NewFilteringHandlerOnAllEvents(resourceDetector.EventFilter, resourceDetector.OnAdd, resourceDetector.OnUpdate, resourceDetector.OnDelete)
@ -234,8 +239,9 @@ func setupControllers(mgr controllerruntime.Manager, opts *options.Options, stop
}
namespaceSyncController := &namespace.Controller{
Client: mgr.GetClient(),
EventRecorder: mgr.GetEventRecorderFor(namespace.ControllerName),
Client: mgr.GetClient(),
EventRecorder: mgr.GetEventRecorderFor(namespace.ControllerName),
SkippedPropagatingNamespaces: skippedPropagatingNamespaces,
}
if err := namespaceSyncController.SetupWithManager(mgr); err != nil {
klog.Fatalf("Failed to setup namespace sync controller: %v", err)

View File

@ -51,6 +51,8 @@ type Options struct {
ClusterStartupGracePeriod metav1.Duration
// SkippedPropagatingAPIs indicates comma separated resources that should be skipped for propagating.
SkippedPropagatingAPIs string
// SkippedPropagatingNamespaces is a list of namespaces that will be skipped for propagating.
SkippedPropagatingNamespaces []string
}
// NewOptions builds an empty options.
@ -109,4 +111,6 @@ func (o *Options) AddFlags(flags *pflag.FlagSet) {
"<group> for skip resources with a specific API group(e.g. networking.k8s.io),\n"+
"<group>/<version> for skip resources with a specific API version(e.g. networking.k8s.io/v1beta1),\n"+
"<group>/<version>/<kind>,<kind> for skip one or more specific resource(e.g. networking.k8s.io/v1beta1/Ingress,IngressClass) where the kinds are case-insensitive.")
flags.StringSliceVar(&o.SkippedPropagatingNamespaces, "skipped-propagating-namespaces", []string{},
"Comma-separated namespaces that should be skipped from propagating in addition to the default skipped namespaces(namespaces prefixed by kube- and karmada-).")
}

View File

@ -39,8 +39,9 @@ const (
// Controller is to sync Work.
type Controller struct {
client.Client // used to operate Work resources.
EventRecorder record.EventRecorder
client.Client // used to operate Work resources.
EventRecorder record.EventRecorder
SkippedPropagatingNamespaces map[string]struct{}
}
// Reconcile performs a full reconciliation for the object referred to by the Request.
@ -89,6 +90,9 @@ func (c *Controller) namespaceShouldBeSynced(namespace string) bool {
return false
}
if _, ok := c.SkippedPropagatingNamespaces[namespace]; ok {
return false
}
return true
}

View File

@ -46,11 +46,12 @@ type ResourceDetector struct {
// Client is used to retrieve objects, it is often more convenient than lister.
Client client.Client
// DynamicClient used to fetch arbitrary resources.
DynamicClient dynamic.Interface
InformerManager informermanager.SingleClusterInformerManager
EventHandler cache.ResourceEventHandler
Processor util.AsyncWorker
SkippedResourceConfig *util.SkippedResourceConfig
DynamicClient dynamic.Interface
InformerManager informermanager.SingleClusterInformerManager
EventHandler cache.ResourceEventHandler
Processor util.AsyncWorker
SkippedResourceConfig *util.SkippedResourceConfig
SkippedPropagatingNamespaces map[string]struct{}
// policyReconcileWorker maintains a rate limited queue which used to store PropagationPolicy's key and
// a reconcile function to consume the items in queue.
policyReconcileWorker util.AsyncWorker
@ -223,6 +224,7 @@ func (d *ResourceDetector) Reconcile(key util.QueueKey) error {
// If '--skipped-propagating-apis' which used to specific the APIs should be ignored in addition to the defaults, is set,
// the specified apis will be ignored as well.
//
// If '--skipped-propagating-namespaces' is specified, all APIs in the skipped-propagating-namespaces will be ignored.
func (d *ResourceDetector) EventFilter(obj interface{}) bool {
key, err := ClusterWideKeyFunc(obj)
if err != nil {
@ -254,6 +256,11 @@ func (d *ResourceDetector) EventFilter(obj interface{}) bool {
return false
}
}
// if SkippedPropagatingNamespaces is set, skip object events in these namespaces.
if _, ok := d.SkippedPropagatingNamespaces[clusterWideKey.Namespace]; ok {
return false
}
return true
}