diff --git a/cmd/main.go b/cmd/main.go index 3c6d25252..ab6da5665 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, @@ -247,7 +280,7 @@ func main() { } if err = (&rolloutManagerProvisioner.RolloutManagerReconciler{ - Client: mgr.GetClient(), + Client: client, Scheme: mgr.GetScheme(), OpenShiftRoutePluginLocation: getArgoRolloutsOpenshiftRouteTrafficManagerPath(), NamespaceScopedArgoRolloutsController: isNamespaceScoped, @@ -257,7 +290,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 825019736..09e317ccf 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.20251029155400-4619e3168941 - github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251024105544-f7c3f5b0cc95 + github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251105033011-e979a3f5f471 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 @@ -16,7 +16,7 @@ require ( github.com/openshift/api v0.0.0-20240906151052-5d963dce87aa github.com/operator-framework/api v0.17.5 github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.73.2 - github.com/stretchr/testify v1.10.0 + github.com/stretchr/testify v1.11.1 go.uber.org/zap v1.27.0 golang.org/x/mod v0.28.0 gotest.tools v2.2.0+incompatible diff --git a/go.sum b/go.sum index 426f698b7..4a55e6f14 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.20251029155400-4619e3168941 h1:uqkUVemiOX050ktlgbyYs4jef38HRU17C9sTzHTL9JU= github.com/argoproj-labs/argo-rollouts-manager v0.0.7-0.20251029155400-4619e3168941/go.mod h1:WPyZkNHZjir/OTt8mrRwcUZKe1euHrHPJsRv1Wp/F/0= -github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251024105544-f7c3f5b0cc95 h1:v2J4IPd8Fab5udUD7nMZsYflqGDhkVGx30q5uenMBbE= -github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251024105544-f7c3f5b0cc95/go.mod h1:LTBNqNbKk9Us5xiCrK612HLOr8SJFfyxlMJQErzMghg= +github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251105033011-e979a3f5f471 h1:MGK8MTUgfRn3nfhXnw0K/RUPNrl5JZlFsBQugD9VAzU= +github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251105033011-e979a3f5f471/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= @@ -358,8 +358,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/vmihailenco/go-tinylfu v0.2.2 h1:H1eiG6HM36iniK6+21n9LLpzx1G9R3DJa2UjUjbynsI= github.com/vmihailenco/go-tinylfu v0.2.2/go.mod h1:CutYi2Q9puTxfcolkliPq4npPuofg9N9t8JVrjzwa3Q= github.com/vmihailenco/msgpack/v5 v5.3.4/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc=