diff --git a/cmd/main.go b/cmd/main.go index abeabdc4eec..45145c54710 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -38,6 +38,8 @@ import ( argocdprovisioner "github.com/argoproj-labs/argocd-operator/controllers/argocd" "github.com/argoproj-labs/argocd-operator/controllers/argoutil" notificationsprovisioner "github.com/argoproj-labs/argocd-operator/controllers/notificationsconfiguration" + "github.com/argoproj-labs/argocd-operator/pkg/cacheutils" + cw "github.com/argoproj-labs/argocd-operator/pkg/clientwrapper" appsv1 "github.com/openshift/api/apps/v1" configv1 "github.com/openshift/api/config/v1" console "github.com/openshift/api/console/v1" @@ -47,11 +49,14 @@ import ( operatorsv1 "github.com/operator-framework/api/pkg/operators/v1" operatorsv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1" monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" + corev1 "k8s.io/api/core/v1" crdv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/labels" utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/cache" + crclient "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/config" controllerconfig "sigs.k8s.io/controller-runtime/pkg/config" "sigs.k8s.io/controller-runtime/pkg/healthz" @@ -147,7 +152,8 @@ func main() { TLSOpts: []func(*tls.Config){disableHTTP2}, } - mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ + // Set default manager options + options := ctrl.Options{ Scheme: scheme, Metrics: metricsServerOptions, WebhookServer: webhookServer, @@ -157,12 +163,39 @@ func main() { Controller: controllerconfig.Controller{ SkipNameValidation: &skipControllerNameValidation, }, - }) + } + + // Use transformers to strip data from Secrets and ConfigMaps + // that are not tracked by the operator to reduce memory usage. + if strings.ToLower(os.Getenv("MEMORY_OPTIMIZATION_ENABLED")) != "false" { + setupLog.Info("memory optimization is enabled") + options.Cache = cache.Options{ + Scheme: scheme, + ByObject: map[crclient.Object]cache.ByObject{ + &corev1.Secret{}: {Transform: cacheutils.StripDataFromSecretOrConfigMapTransform()}, + &corev1.ConfigMap{}: {Transform: cacheutils.StripDataFromSecretOrConfigMapTransform()}, + }, + } + } + + mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options) if err != nil { setupLog.Error(err, "unable to start manager") os.Exit(1) } + var client crclient.Client + if strings.ToLower(os.Getenv("MEMORY_OPTIMIZATION_ENABLED")) != "false" { + liveClient, err := crclient.New(ctrl.GetConfigOrDie(), crclient.Options{Scheme: mgr.GetScheme()}) + if err != nil { + setupLog.Error(err, "unable to create live client") + os.Exit(1) + } + client = cw.NewClientWrapper(mgr.GetClient(), liveClient) + } else { + client = mgr.GetClient() + } + registerComponentOrExit(mgr, console.AddToScheme) registerComponentOrExit(mgr, routev1.AddToScheme) // Adding the routev1 api registerComponentOrExit(mgr, operatorsv1.AddToScheme) @@ -186,7 +219,7 @@ func main() { } if err = (&controllers.ReconcileGitopsService{ - Client: mgr.GetClient(), + Client: client, Scheme: mgr.GetScheme(), DisableDefaultInstall: strings.ToLower(os.Getenv(common.DisableDefaultInstallEnvVar)) == "true", }).SetupWithManager(mgr); err != nil { @@ -195,7 +228,7 @@ func main() { } if err = (&controllers.ReconcileArgoCDRoute{ - Client: mgr.GetClient(), + Client: client, Scheme: mgr.GetScheme(), }).SetupWithManager(mgr); err != nil { setupLog.Error(err, "unable to create controller", "controller", "Argo CD route") @@ -203,7 +236,7 @@ func main() { } if err = (&controllers.ArgoCDMetricsReconciler{ - Client: mgr.GetClient(), + Client: client, Scheme: mgr.GetScheme(), }).SetupWithManager(mgr); err != nil { setupLog.Error(err, "unable to create controller", "controller", "Argo CD metrics") @@ -225,7 +258,7 @@ func main() { argocdprovisioner.Register(openshift.ReconcilerHook, openshift.BuilderHook) if err = (&argocdprovisioner.ReconcileArgoCD{ - Client: mgr.GetClient(), + Client: client, Scheme: mgr.GetScheme(), LabelSelector: labelSelectorFlag, K8sClient: k8sClient, @@ -251,7 +284,7 @@ func main() { } if err = (&rolloutManagerProvisioner.RolloutManagerReconciler{ - Client: mgr.GetClient(), + Client: client, Scheme: mgr.GetScheme(), OpenShiftRoutePluginLocation: getArgoRolloutsOpenshiftRouteTrafficManagerPath(), NamespaceScopedArgoRolloutsController: isNamespaceScoped, @@ -262,7 +295,7 @@ func main() { } if err = (¬ificationsprovisioner.NotificationsConfigurationReconciler{ - Client: mgr.GetClient(), + Client: client, Scheme: mgr.GetScheme(), }).SetupWithManager(mgr); err != nil { setupLog.Error(err, "unable to create controller", "controller", "Notifications Configuration") diff --git a/go.mod b/go.mod index a8adf072bef..e4c396799b0 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.24.6 require ( github.com/argoproj-labs/argo-rollouts-manager v0.0.7-0.20251105123110-0c547c7a7765 - github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251104052658-38b9581ce39a + github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251105202113-2a10f87771b9 github.com/argoproj/argo-cd/v3 v3.1.8 github.com/argoproj/gitops-engine v0.7.1-0.20250905160054-e48120133eec github.com/go-logr/logr v1.4.3 diff --git a/go.sum b/go.sum index 893fbdb1275..d0802412d28 100644 --- a/go.sum +++ b/go.sum @@ -31,8 +31,8 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFI github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/argoproj-labs/argo-rollouts-manager v0.0.7-0.20251105123110-0c547c7a7765 h1:zVN+W/nQrRB/kB63YcvcCseuiE//sEzNw6Oa8rqiFOs= github.com/argoproj-labs/argo-rollouts-manager v0.0.7-0.20251105123110-0c547c7a7765/go.mod h1:WPyZkNHZjir/OTt8mrRwcUZKe1euHrHPJsRv1Wp/F/0= -github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251104052658-38b9581ce39a h1:MruEtChFnhTI8Owa1Boqo7BChWxnVRkyhN1/dsg/VgQ= -github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251104052658-38b9581ce39a/go.mod h1:ABtgKWsvMlUp6Xys8BVi0CHKdT9ZoFP+rYCqRsY0wvg= +github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251105202113-2a10f87771b9 h1:v/iZr/sGwdHoqIcdSVZKoXaJ/ivv+2u85OFjyNGLDH0= +github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251105202113-2a10f87771b9/go.mod h1:ABtgKWsvMlUp6Xys8BVi0CHKdT9ZoFP+rYCqRsY0wvg= github.com/argoproj/argo-cd/v3 v3.1.8 h1:NkLPiRI5qGkV+q1EN3O7/0Wb9O/MVl62vadKteZqMUw= github.com/argoproj/argo-cd/v3 v3.1.8/go.mod h1:ZHb/LOz/hr88VWMJiVTd8DGYL7MheHCAT8S6DgYOBFo= github.com/argoproj/gitops-engine v0.7.1-0.20250905160054-e48120133eec h1:rNAwbRQFvRIuW/e2bU+B10mlzghYXsnwZedYeA7Drz4=