@@ -38,6 +38,8 @@ import (
3838 argocdprovisioner "github.com/argoproj-labs/argocd-operator/controllers/argocd"
3939 "github.com/argoproj-labs/argocd-operator/controllers/argoutil"
4040 notificationsprovisioner "github.com/argoproj-labs/argocd-operator/controllers/notificationsconfiguration"
41+ "github.com/argoproj-labs/argocd-operator/pkg/cacheutils"
42+ cw "github.com/argoproj-labs/argocd-operator/pkg/clientwrapper"
4143 appsv1 "github.com/openshift/api/apps/v1"
4244 configv1 "github.com/openshift/api/config/v1"
4345 console "github.com/openshift/api/console/v1"
@@ -47,11 +49,14 @@ import (
4749 operatorsv1 "github.com/operator-framework/api/pkg/operators/v1"
4850 operatorsv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1"
4951 monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
52+ corev1 "k8s.io/api/core/v1"
5053 crdv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
5154 "k8s.io/apimachinery/pkg/labels"
5255 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
5356 clientgoscheme "k8s.io/client-go/kubernetes/scheme"
5457 ctrl "sigs.k8s.io/controller-runtime"
58+ "sigs.k8s.io/controller-runtime/pkg/cache"
59+ crclient "sigs.k8s.io/controller-runtime/pkg/client"
5560 "sigs.k8s.io/controller-runtime/pkg/client/config"
5661 controllerconfig "sigs.k8s.io/controller-runtime/pkg/config"
5762 "sigs.k8s.io/controller-runtime/pkg/healthz"
@@ -147,7 +152,8 @@ func main() {
147152 TLSOpts : []func (* tls.Config ){disableHTTP2 },
148153 }
149154
150- mgr , err := ctrl .NewManager (ctrl .GetConfigOrDie (), ctrl.Options {
155+ // Set default manager options
156+ options := ctrl.Options {
151157 Scheme : scheme ,
152158 Metrics : metricsServerOptions ,
153159 WebhookServer : webhookServer ,
@@ -157,12 +163,39 @@ func main() {
157163 Controller : controllerconfig.Controller {
158164 SkipNameValidation : & skipControllerNameValidation ,
159165 },
160- })
166+ }
167+
168+ // Use transformers to strip data from Secrets and ConfigMaps
169+ // that are not tracked by the operator to reduce memory usage.
170+ if strings .ToLower (os .Getenv ("MEMORY_OPTIMIZATION_ENABLED" )) != "false" {
171+ setupLog .Info ("memory optimization is enabled" )
172+ options .Cache = cache.Options {
173+ Scheme : scheme ,
174+ ByObject : map [crclient.Object ]cache.ByObject {
175+ & corev1.Secret {}: {Transform : cacheutils .StripDataFromSecretOrConfigMapTransform ()},
176+ & corev1.ConfigMap {}: {Transform : cacheutils .StripDataFromSecretOrConfigMapTransform ()},
177+ },
178+ }
179+ }
180+
181+ mgr , err := ctrl .NewManager (ctrl .GetConfigOrDie (), options )
161182 if err != nil {
162183 setupLog .Error (err , "unable to start manager" )
163184 os .Exit (1 )
164185 }
165186
187+ var client crclient.Client
188+ if strings .ToLower (os .Getenv ("MEMORY_OPTIMIZATION_ENABLED" )) != "false" {
189+ liveClient , err := crclient .New (ctrl .GetConfigOrDie (), crclient.Options {Scheme : mgr .GetScheme ()})
190+ if err != nil {
191+ setupLog .Error (err , "unable to create live client" )
192+ os .Exit (1 )
193+ }
194+ client = cw .NewClientWrapper (mgr .GetClient (), liveClient )
195+ } else {
196+ client = mgr .GetClient ()
197+ }
198+
166199 registerComponentOrExit (mgr , console .AddToScheme )
167200 registerComponentOrExit (mgr , routev1 .AddToScheme ) // Adding the routev1 api
168201 registerComponentOrExit (mgr , operatorsv1 .AddToScheme )
@@ -186,7 +219,7 @@ func main() {
186219 }
187220
188221 if err = (& controllers.ReconcileGitopsService {
189- Client : mgr . GetClient () ,
222+ Client : client ,
190223 Scheme : mgr .GetScheme (),
191224 DisableDefaultInstall : strings .ToLower (os .Getenv (common .DisableDefaultInstallEnvVar )) == "true" ,
192225 }).SetupWithManager (mgr ); err != nil {
@@ -195,15 +228,15 @@ func main() {
195228 }
196229
197230 if err = (& controllers.ReconcileArgoCDRoute {
198- Client : mgr . GetClient () ,
231+ Client : client ,
199232 Scheme : mgr .GetScheme (),
200233 }).SetupWithManager (mgr ); err != nil {
201234 setupLog .Error (err , "unable to create controller" , "controller" , "Argo CD route" )
202235 os .Exit (1 )
203236 }
204237
205238 if err = (& controllers.ArgoCDMetricsReconciler {
206- Client : mgr . GetClient () ,
239+ Client : client ,
207240 Scheme : mgr .GetScheme (),
208241 }).SetupWithManager (mgr ); err != nil {
209242 setupLog .Error (err , "unable to create controller" , "controller" , "Argo CD metrics" )
@@ -225,7 +258,7 @@ func main() {
225258 argocdprovisioner .Register (openshift .ReconcilerHook , openshift .BuilderHook )
226259
227260 if err = (& argocdprovisioner.ReconcileArgoCD {
228- Client : mgr . GetClient () ,
261+ Client : client ,
229262 Scheme : mgr .GetScheme (),
230263 LabelSelector : labelSelectorFlag ,
231264 K8sClient : k8sClient ,
@@ -251,7 +284,7 @@ func main() {
251284 }
252285
253286 if err = (& rolloutManagerProvisioner.RolloutManagerReconciler {
254- Client : mgr . GetClient () ,
287+ Client : client ,
255288 Scheme : mgr .GetScheme (),
256289 OpenShiftRoutePluginLocation : getArgoRolloutsOpenshiftRouteTrafficManagerPath (),
257290 NamespaceScopedArgoRolloutsController : isNamespaceScoped ,
@@ -262,7 +295,7 @@ func main() {
262295 }
263296
264297 if err = (& notificationsprovisioner.NotificationsConfigurationReconciler {
265- Client : mgr . GetClient () ,
298+ Client : client ,
266299 Scheme : mgr .GetScheme (),
267300 }).SetupWithManager (mgr ); err != nil {
268301 setupLog .Error (err , "unable to create controller" , "controller" , "Notifications Configuration" )
0 commit comments