@@ -34,7 +34,6 @@ import (
3434 policyv1 "k8s.io/api/policy/v1"
3535 schedulingv1 "k8s.io/api/scheduling/v1"
3636 apierrors "k8s.io/apimachinery/pkg/api/errors"
37- "k8s.io/apimachinery/pkg/api/meta"
3837 "k8s.io/apimachinery/pkg/labels"
3938 "k8s.io/apimachinery/pkg/runtime"
4039 "k8s.io/apimachinery/pkg/runtime/schema"
@@ -153,6 +152,60 @@ func metricsProviderListToMap(providersList []api.MetricsProvider) map[api.Metri
153152 return providersMap
154153}
155154
155+ // preserveNeeded returns the obj preserving fields needed for memory efficiency.
156+ // Only keep scheduler related fields
157+ func preserveNeeded (obj interface {}) (interface {}, error ) {
158+ if pod , ok := obj .(* v1.Pod ); ok {
159+ preserveContainer := func (c * v1.Container ) {
160+ c .Command = nil
161+ c .Args = nil
162+ c .WorkingDir = ""
163+ c .Ports = nil
164+ c .EnvFrom = nil
165+ c .Env = nil
166+ c .ResizePolicy = nil
167+ c .VolumeMounts = nil
168+ c .VolumeDevices = nil
169+ c .LivenessProbe = nil
170+ c .ReadinessProbe = nil
171+ c .StartupProbe = nil
172+ c .Lifecycle = nil
173+ c .TerminationMessagePath = ""
174+ c .TerminationMessagePolicy = ""
175+ c .ImagePullPolicy = ""
176+ c .SecurityContext = nil
177+ }
178+
179+ // metadata related
180+ pod .ManagedFields = nil
181+ pod .Finalizers = nil
182+
183+ // spec related
184+ for i := 0 ; i < len (pod .Spec .InitContainers ); i ++ {
185+ preserveContainer (& pod .Spec .InitContainers [i ])
186+ }
187+ for i := 0 ; i < len (pod .Spec .Containers ); i ++ {
188+ preserveContainer (& pod .Spec .Containers [i ])
189+ }
190+ pod .Spec .EphemeralContainers = nil
191+ pod .Spec .SecurityContext = nil
192+ pod .Spec .ImagePullSecrets = nil
193+ pod .Spec .Hostname = ""
194+ pod .Spec .Subdomain = ""
195+ pod .Spec .HostAliases = nil
196+ pod .Spec .PriorityClassName = ""
197+ pod .Spec .DNSConfig = nil
198+ pod .Spec .ReadinessGates = nil
199+ pod .Spec .RuntimeClassName = nil
200+ pod .Spec .PreemptionPolicy = nil
201+ }
202+ if node , ok := obj .(* v1.Node ); ok {
203+ node .ManagedFields = nil
204+ node .Status .Images = nil
205+ }
206+ return obj , nil
207+ }
208+
156209func newDescheduler (ctx context.Context , rs * options.DeschedulerServer , deschedulerPolicy * api.DeschedulerPolicy , evictionPolicyGroupVersion string , eventRecorder events.EventRecorder , sharedInformerFactory , namespacedSharedInformerFactory informers.SharedInformerFactory ) (* descheduler , error ) {
157210 podInformer := sharedInformerFactory .Core ().V1 ().Pods ().Informer ()
158211
@@ -585,7 +638,7 @@ func RunDeschedulerStrategies(ctx context.Context, rs *options.DeschedulerServer
585638 ctx , span = tracing .Tracer ().Start (ctx , "RunDeschedulerStrategies" )
586639 defer span .End ()
587640
588- sharedInformerFactory := informers .NewSharedInformerFactoryWithOptions (rs .Client , 0 , informers .WithTransform (trimManagedFields ))
641+ sharedInformerFactory := informers .NewSharedInformerFactoryWithOptions (rs .Client , 0 , informers .WithTransform (preserveNeeded ))
589642
590643 var nodeSelector string
591644 if deschedulerPolicy .NodeSelector != nil {
@@ -608,7 +661,7 @@ func RunDeschedulerStrategies(ctx context.Context, rs *options.DeschedulerServer
608661 if prometheusProvider != nil && prometheusProvider .Prometheus != nil && prometheusProvider .Prometheus .URL != "" {
609662 if prometheusProvider .Prometheus .AuthToken != nil {
610663 // Will get reconciled
611- namespacedSharedInformerFactory = informers .NewSharedInformerFactoryWithOptions (rs .Client , 0 , informers .WithTransform (trimManagedFields ), informers .WithNamespace (prometheusProvider .Prometheus .AuthToken .SecretReference .Namespace ))
664+ namespacedSharedInformerFactory = informers .NewSharedInformerFactoryWithOptions (rs .Client , 0 , informers .WithTransform (preserveNeeded ), informers .WithNamespace (prometheusProvider .Prometheus .AuthToken .SecretReference .Namespace ))
612665 metricProviderTokenReconciliation = secretReconciliation
613666 } else {
614667 // Use the sa token and assume it has the sufficient permissions to authenticate
@@ -711,10 +764,3 @@ func createClients(clientConnection componentbaseconfig.ClientConnectionConfigur
711764
712765 return kClient , eventClient , nil
713766}
714-
715- func trimManagedFields (obj interface {}) (interface {}, error ) {
716- if accessor , err := meta .Accessor (obj ); err == nil {
717- accessor .SetManagedFields (nil )
718- }
719- return obj , nil
720- }
0 commit comments