From 01f37c160c308eb7b638d9e3a14e6163ad66830f Mon Sep 17 00:00:00 2001 From: dddddai Date: Fri, 16 Sep 2022 10:41:04 +0800 Subject: [PATCH] adopt transform func to save memory Signed-off-by: dddddai --- cmd/agent/app/agent.go | 5 +++++ cmd/controller-manager/app/controllermanager.go | 5 +++++ pkg/descheduler/descheduler.go | 5 +++++ pkg/estimator/server/server.go | 5 +++++ pkg/scheduler/event_handler.go | 7 +++++++ pkg/search/controller.go | 4 ++++ 6 files changed, 31 insertions(+) diff --git a/cmd/agent/app/agent.go b/cmd/agent/app/agent.go index 81a31fb8b..bc69f7ab2 100644 --- a/cmd/agent/app/agent.go +++ b/cmd/agent/app/agent.go @@ -17,6 +17,7 @@ import ( "k8s.io/component-base/term" "k8s.io/klog/v2" controllerruntime "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/config/v1alpha1" "sigs.k8s.io/controller-runtime/pkg/healthz" @@ -34,6 +35,7 @@ import ( "github.com/karmada-io/karmada/pkg/sharedcli/klogflag" "github.com/karmada-io/karmada/pkg/sharedcli/profileflag" "github.com/karmada-io/karmada/pkg/util" + "github.com/karmada-io/karmada/pkg/util/fedinformer" "github.com/karmada-io/karmada/pkg/util/fedinformer/genericmanager" "github.com/karmada-io/karmada/pkg/util/fedinformer/typedmanager" "github.com/karmada-io/karmada/pkg/util/gclient" @@ -188,6 +190,9 @@ func run(ctx context.Context, karmadaConfig karmadactl.KarmadaConfig, opts *opti clusterv1alpha1.SchemeGroupVersion.WithKind("Cluster").GroupKind().String(): opts.ConcurrentClusterSyncs, }, }, + NewCache: cache.BuilderWithOptions(cache.Options{ + DefaultTransform: fedinformer.StripUnusedFields, + }), }) if err != nil { return fmt.Errorf("failed to build controller manager: %w", err) diff --git a/cmd/controller-manager/app/controllermanager.go b/cmd/controller-manager/app/controllermanager.go index 39c8a6f66..ec55e909e 100644 --- a/cmd/controller-manager/app/controllermanager.go +++ b/cmd/controller-manager/app/controllermanager.go @@ -18,6 +18,7 @@ import ( "k8s.io/component-base/term" "k8s.io/klog/v2" controllerruntime "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/config/v1alpha1" "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/healthz" @@ -48,6 +49,7 @@ import ( "github.com/karmada-io/karmada/pkg/sharedcli/klogflag" "github.com/karmada-io/karmada/pkg/sharedcli/profileflag" "github.com/karmada-io/karmada/pkg/util" + "github.com/karmada-io/karmada/pkg/util/fedinformer" "github.com/karmada-io/karmada/pkg/util/fedinformer/genericmanager" "github.com/karmada-io/karmada/pkg/util/fedinformer/typedmanager" "github.com/karmada-io/karmada/pkg/util/gclient" @@ -134,6 +136,9 @@ func Run(ctx context.Context, opts *options.Options) error { schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Namespace"}.GroupKind().String(): opts.ConcurrentNamespaceSyncs, }, }, + NewCache: cache.BuilderWithOptions(cache.Options{ + DefaultTransform: fedinformer.StripUnusedFields, + }), }) if err != nil { klog.Errorf("failed to build controller manager: %v", err) diff --git a/pkg/descheduler/descheduler.go b/pkg/descheduler/descheduler.go index d38bfca90..a2ea14d88 100644 --- a/pkg/descheduler/descheduler.go +++ b/pkg/descheduler/descheduler.go @@ -26,6 +26,7 @@ import ( clusterlister "github.com/karmada-io/karmada/pkg/generated/listers/cluster/v1alpha1" worklister "github.com/karmada-io/karmada/pkg/generated/listers/work/v1alpha2" "github.com/karmada-io/karmada/pkg/util" + "github.com/karmada-io/karmada/pkg/util/fedinformer" "github.com/karmada-io/karmada/pkg/util/gclient" ) @@ -70,6 +71,10 @@ func NewDescheduler(karmadaClient karmadaclientset.Interface, kubeClient kuberne unschedulableThreshold: opts.UnschedulableThreshold.Duration, deschedulingInterval: opts.DeschedulingInterval.Duration, } + // ignore the error here because the informers haven't been started + _ = desched.bindingInformer.SetTransform(fedinformer.StripUnusedFields) + _ = desched.clusterInformer.SetTransform(fedinformer.StripUnusedFields) + schedulerEstimatorWorkerOptions := util.Options{ Name: "scheduler-estimator", KeyFunc: nil, diff --git a/pkg/estimator/server/server.go b/pkg/estimator/server/server.go index 38b8e0f59..b57a3c8ca 100644 --- a/pkg/estimator/server/server.go +++ b/pkg/estimator/server/server.go @@ -32,6 +32,7 @@ import ( "github.com/karmada-io/karmada/pkg/estimator/server/replica" estimatorservice "github.com/karmada-io/karmada/pkg/estimator/service" "github.com/karmada-io/karmada/pkg/util" + "github.com/karmada-io/karmada/pkg/util/fedinformer" "github.com/karmada-io/karmada/pkg/util/fedinformer/genericmanager" "github.com/karmada-io/karmada/pkg/util/fedinformer/keys" "github.com/karmada-io/karmada/pkg/util/helper" @@ -92,6 +93,10 @@ func NewEstimatorServer( }, parallelizer: lifted.NewParallelizer(opts.Parallelism), } + // ignore the error here because the informers haven't been started + _ = es.nodeInformer.Informer().SetTransform(fedinformer.StripUnusedFields) + _ = es.podInformer.Informer().SetTransform(fedinformer.StripUnusedFields) + _ = informerFactory.Apps().V1().ReplicaSets().Informer().SetTransform(fedinformer.StripUnusedFields) // Establish a connection between the pods and their assigned nodes. _ = es.podInformer.Informer().AddIndexers(cache.Indexers{ diff --git a/pkg/scheduler/event_handler.go b/pkg/scheduler/event_handler.go index e6e7477b8..32ffc2f11 100644 --- a/pkg/scheduler/event_handler.go +++ b/pkg/scheduler/event_handler.go @@ -14,6 +14,7 @@ import ( policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1" "github.com/karmada-io/karmada/pkg/scheduler/metrics" "github.com/karmada-io/karmada/pkg/util" + "github.com/karmada-io/karmada/pkg/util/fedinformer" "github.com/karmada-io/karmada/pkg/util/gclient" ) @@ -56,6 +57,12 @@ func (s *Scheduler) addAllEventHandlers() { DeleteFunc: s.deleteCluster, }, ) + // ignore the error here because the informers haven't been started + _ = bindingInformer.SetTransform(fedinformer.StripUnusedFields) + _ = policyInformer.SetTransform(fedinformer.StripUnusedFields) + _ = clusterBindingInformer.SetTransform(fedinformer.StripUnusedFields) + _ = clusterPolicyInformer.SetTransform(fedinformer.StripUnusedFields) + _ = memClusterInformer.SetTransform(fedinformer.StripUnusedFields) eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartStructuredLogging(0) diff --git a/pkg/search/controller.go b/pkg/search/controller.go index edb6fddd0..d8c42cd13 100644 --- a/pkg/search/controller.go +++ b/pkg/search/controller.go @@ -26,6 +26,7 @@ import ( clusterlister "github.com/karmada-io/karmada/pkg/generated/listers/cluster/v1alpha1" "github.com/karmada-io/karmada/pkg/search/backendstore" "github.com/karmada-io/karmada/pkg/util" + "github.com/karmada-io/karmada/pkg/util/fedinformer" "github.com/karmada-io/karmada/pkg/util/fedinformer/genericmanager" "github.com/karmada-io/karmada/pkg/util/gclient" "github.com/karmada-io/karmada/pkg/util/restmapper" @@ -103,6 +104,9 @@ func (c *Controller) addAllEventHandlers() { UpdateFunc: c.updateResourceRegistry, DeleteFunc: c.deleteResourceRegistry, }) + // ignore the error here because the informers haven't been started + _ = clusterInformer.SetTransform(fedinformer.StripUnusedFields) + _ = resourceRegistryInformer.SetTransform(fedinformer.StripUnusedFields) } // Start the controller