Skip to content

Commit 913ab87

Browse files
authored
feat: Downstream memory optimization (#972)
* downstream memory optimization Signed-off-by: Anand Kumar Singh <anandrkskd@gmail.com> * rebase and add environment variable to enable or disable optimization Signed-off-by: Anand Kumar Singh <anandrkskd@gmail.com> --------- Signed-off-by: Anand Kumar Singh <anandrkskd@gmail.com>
1 parent 6f1f3d0 commit 913ab87

File tree

3 files changed

+44
-11
lines changed

3 files changed

+44
-11
lines changed

cmd/main.go

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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")

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.24.6
44

55
require (
66
github.com/argoproj-labs/argo-rollouts-manager v0.0.7-0.20251105123110-0c547c7a7765
7-
github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251104052658-38b9581ce39a
7+
github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251105202113-2a10f87771b9
88
github.com/argoproj/argo-cd/v3 v3.1.8
99
github.com/argoproj/gitops-engine v0.7.1-0.20250905160054-e48120133eec
1010
github.com/go-logr/logr v1.4.3

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFI
3131
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
3232
github.com/argoproj-labs/argo-rollouts-manager v0.0.7-0.20251105123110-0c547c7a7765 h1:zVN+W/nQrRB/kB63YcvcCseuiE//sEzNw6Oa8rqiFOs=
3333
github.com/argoproj-labs/argo-rollouts-manager v0.0.7-0.20251105123110-0c547c7a7765/go.mod h1:WPyZkNHZjir/OTt8mrRwcUZKe1euHrHPJsRv1Wp/F/0=
34-
github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251104052658-38b9581ce39a h1:MruEtChFnhTI8Owa1Boqo7BChWxnVRkyhN1/dsg/VgQ=
35-
github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251104052658-38b9581ce39a/go.mod h1:ABtgKWsvMlUp6Xys8BVi0CHKdT9ZoFP+rYCqRsY0wvg=
34+
github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251105202113-2a10f87771b9 h1:v/iZr/sGwdHoqIcdSVZKoXaJ/ivv+2u85OFjyNGLDH0=
35+
github.com/argoproj-labs/argocd-operator v0.14.0-rc1.0.20251105202113-2a10f87771b9/go.mod h1:ABtgKWsvMlUp6Xys8BVi0CHKdT9ZoFP+rYCqRsY0wvg=
3636
github.com/argoproj/argo-cd/v3 v3.1.8 h1:NkLPiRI5qGkV+q1EN3O7/0Wb9O/MVl62vadKteZqMUw=
3737
github.com/argoproj/argo-cd/v3 v3.1.8/go.mod h1:ZHb/LOz/hr88VWMJiVTd8DGYL7MheHCAT8S6DgYOBFo=
3838
github.com/argoproj/gitops-engine v0.7.1-0.20250905160054-e48120133eec h1:rNAwbRQFvRIuW/e2bU+B10mlzghYXsnwZedYeA7Drz4=

0 commit comments

Comments
 (0)