Merge pull request #533 from pigletfly/watchedNamespace
controller-manager: introduce --skipped-propagating-namespaces flag
This commit is contained in:
commit
e7887f4fb8
|
@ -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)
|
||||
|
|
|
@ -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-).")
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue