Disable caching of secrets and configmaps by default.
You can re-enabled caching of secrets by starting the controller with the argument '--feature-gates=CacheSecretsAndConfigMaps=true' Signed-off-by: Mac Chaffee <machaffe@renci.org>
This commit is contained in:
parent
cb7b8967e3
commit
9bcf125e2c
|
|
@ -0,0 +1,59 @@
|
||||||
|
/*
|
||||||
|
Copyright 2022 The Flux authors
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Package features sets the feature gates that
|
||||||
|
// helm-controller supports, and their default states.
|
||||||
|
package features
|
||||||
|
|
||||||
|
import feathelper "github.com/fluxcd/pkg/runtime/features"
|
||||||
|
|
||||||
|
const (
|
||||||
|
// CacheSecretsAndConfigMaps configures the caching of Secrets and ConfigMaps
|
||||||
|
// by the controller-runtime client.
|
||||||
|
//
|
||||||
|
// When enabled, it will cache both object types, resulting in increased memory usage
|
||||||
|
// and cluster-wide RBAC permissions (list and watch).
|
||||||
|
CacheSecretsAndConfigMaps = "CacheSecretsAndConfigMaps"
|
||||||
|
)
|
||||||
|
|
||||||
|
var features = map[string]bool{
|
||||||
|
// CacheSecretsAndConfigMaps
|
||||||
|
// opt-in from v0.28
|
||||||
|
CacheSecretsAndConfigMaps: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
// FeatureGates contains a list of all supported feature gates and
|
||||||
|
// their default values.
|
||||||
|
func FeatureGates() map[string]bool {
|
||||||
|
return features
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enabled verifies whether the feature is enabled or not.
|
||||||
|
//
|
||||||
|
// This is only a wrapper around the Enabled func in
|
||||||
|
// pkg/runtime/features, so callers won't need to import
|
||||||
|
// both packages for checking whether a feature is enabled.
|
||||||
|
func Enabled(feature string) (bool, error) {
|
||||||
|
return feathelper.Enabled(feature)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disable disables the specified feature. If the feature is not
|
||||||
|
// present, it's a no-op.
|
||||||
|
func Disable(feature string) {
|
||||||
|
if _, ok := features[feature]; ok {
|
||||||
|
features[feature] = false
|
||||||
|
}
|
||||||
|
}
|
||||||
24
main.go
24
main.go
|
|
@ -28,6 +28,7 @@ import (
|
||||||
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
|
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
|
||||||
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
|
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
|
||||||
ctrl "sigs.k8s.io/controller-runtime"
|
ctrl "sigs.k8s.io/controller-runtime"
|
||||||
|
ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
|
||||||
crtlmetrics "sigs.k8s.io/controller-runtime/pkg/metrics"
|
crtlmetrics "sigs.k8s.io/controller-runtime/pkg/metrics"
|
||||||
|
|
||||||
"github.com/fluxcd/pkg/runtime/acl"
|
"github.com/fluxcd/pkg/runtime/acl"
|
||||||
|
|
@ -40,10 +41,13 @@ import (
|
||||||
"github.com/fluxcd/pkg/runtime/pprof"
|
"github.com/fluxcd/pkg/runtime/pprof"
|
||||||
"github.com/fluxcd/pkg/runtime/probes"
|
"github.com/fluxcd/pkg/runtime/probes"
|
||||||
sourcev1 "github.com/fluxcd/source-controller/api/v1beta2"
|
sourcev1 "github.com/fluxcd/source-controller/api/v1beta2"
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
|
||||||
v2 "github.com/fluxcd/helm-controller/api/v2beta1"
|
v2 "github.com/fluxcd/helm-controller/api/v2beta1"
|
||||||
"github.com/fluxcd/helm-controller/controllers"
|
"github.com/fluxcd/helm-controller/controllers"
|
||||||
|
"github.com/fluxcd/helm-controller/internal/features"
|
||||||
intkube "github.com/fluxcd/helm-controller/internal/kube"
|
intkube "github.com/fluxcd/helm-controller/internal/kube"
|
||||||
|
feathelper "github.com/fluxcd/pkg/runtime/features"
|
||||||
// +kubebuilder:scaffold:imports
|
// +kubebuilder:scaffold:imports
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -74,6 +78,7 @@ func main() {
|
||||||
httpRetry int
|
httpRetry int
|
||||||
clientOptions client.Options
|
clientOptions client.Options
|
||||||
kubeConfigOpts client.KubeConfigOptions
|
kubeConfigOpts client.KubeConfigOptions
|
||||||
|
featureGates feathelper.FeatureGates
|
||||||
logOptions logger.Options
|
logOptions logger.Options
|
||||||
aclOptions acl.Options
|
aclOptions acl.Options
|
||||||
leaderElectionOptions leaderelection.Options
|
leaderElectionOptions leaderelection.Options
|
||||||
|
|
@ -96,10 +101,18 @@ func main() {
|
||||||
leaderElectionOptions.BindFlags(flag.CommandLine)
|
leaderElectionOptions.BindFlags(flag.CommandLine)
|
||||||
rateLimiterOptions.BindFlags(flag.CommandLine)
|
rateLimiterOptions.BindFlags(flag.CommandLine)
|
||||||
kubeConfigOpts.BindFlags(flag.CommandLine)
|
kubeConfigOpts.BindFlags(flag.CommandLine)
|
||||||
|
featureGates.BindFlags(flag.CommandLine)
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
ctrl.SetLogger(logger.NewLogger(logOptions))
|
ctrl.SetLogger(logger.NewLogger(logOptions))
|
||||||
|
|
||||||
|
err := featureGates.WithLogger(setupLog).
|
||||||
|
SupportedFeatures(features.FeatureGates())
|
||||||
|
if err != nil {
|
||||||
|
setupLog.Error(err, "unable to load feature gates")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
metricsRecorder := metrics.NewRecorder()
|
metricsRecorder := metrics.NewRecorder()
|
||||||
crtlmetrics.Registry.MustRegister(metricsRecorder.Collectors()...)
|
crtlmetrics.Registry.MustRegister(metricsRecorder.Collectors()...)
|
||||||
|
|
||||||
|
|
@ -108,6 +121,16 @@ func main() {
|
||||||
watchNamespace = os.Getenv("RUNTIME_NAMESPACE")
|
watchNamespace = os.Getenv("RUNTIME_NAMESPACE")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
disableCacheFor := []ctrlclient.Object{}
|
||||||
|
shouldCache, err := features.Enabled(features.CacheSecretsAndConfigMaps)
|
||||||
|
if err != nil {
|
||||||
|
setupLog.Error(err, "unable to check feature gate CacheSecretsAndConfigMaps")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
if !shouldCache {
|
||||||
|
disableCacheFor = append(disableCacheFor, &corev1.Secret{}, &corev1.ConfigMap{})
|
||||||
|
}
|
||||||
|
|
||||||
// set the managedFields owner for resources reconciled from Helm charts
|
// set the managedFields owner for resources reconciled from Helm charts
|
||||||
kube.ManagedFieldsManager = controllerName
|
kube.ManagedFieldsManager = controllerName
|
||||||
|
|
||||||
|
|
@ -126,6 +149,7 @@ func main() {
|
||||||
LeaderElectionID: fmt.Sprintf("%s-leader-election", controllerName),
|
LeaderElectionID: fmt.Sprintf("%s-leader-election", controllerName),
|
||||||
Namespace: watchNamespace,
|
Namespace: watchNamespace,
|
||||||
Logger: ctrl.Log,
|
Logger: ctrl.Log,
|
||||||
|
ClientDisableCacheFor: disableCacheFor,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
setupLog.Error(err, "unable to start manager")
|
setupLog.Error(err, "unable to start manager")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue