From cdd4cb03f6cfeabc273dfd22a13033ccde8e4954 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 25 Mar 2021 14:04:15 +0200 Subject: [PATCH 1/2] Set leader election deadline to 30s Signed-off-by: Stefan Prodan --- go.mod | 2 +- go.sum | 4 ++-- main.go | 39 ++++++++++++++++++++------------------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/go.mod b/go.mod index c2e448dd..b294a22c 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.7.1 github.com/fluxcd/pkg/apis/meta v0.8.0 github.com/fluxcd/pkg/gittestserver v0.2.1 - github.com/fluxcd/pkg/runtime v0.8.5 + github.com/fluxcd/pkg/runtime v0.10.1 github.com/fluxcd/pkg/ssh v0.0.5 github.com/fluxcd/source-controller v0.9.1 // If you bump this, change SOURCE_VER in the Makefile to match diff --git a/go.sum b/go.sum index 8122b13d..98874d4b 100644 --- a/go.sum +++ b/go.sum @@ -318,8 +318,8 @@ github.com/fluxcd/pkg/gitutil v0.0.1/go.mod h1:6WkZyuVXODa6PR2UppepCGQyKuQ9eOsL3 github.com/fluxcd/pkg/helmtestserver v0.1.0/go.mod h1:3L+tbPn74PsHwHsyhbfk/kZAosrwMFTTA92XEFiwVAE= github.com/fluxcd/pkg/lockedfile v0.0.5/go.mod h1:uAtPUBId6a2RqO84MTH5HKGX0SbM1kNW3Wr/FhYyDVA= github.com/fluxcd/pkg/runtime v0.8.4/go.mod h1:JD0eZIn5xkTeHHQUWXSqJPIh/ecO0d0qrUKbSVHnpnw= -github.com/fluxcd/pkg/runtime v0.8.5 h1:ynh8fszbLQ3QSisQBNOABEUTnvt+/QfCdaL6gOJQcoQ= -github.com/fluxcd/pkg/runtime v0.8.5/go.mod h1:JD0eZIn5xkTeHHQUWXSqJPIh/ecO0d0qrUKbSVHnpnw= +github.com/fluxcd/pkg/runtime v0.10.1 h1:NV0pe6lFzodKBIz0dT3xkoR0wJnTCicXwM/v/d5T0+Y= +github.com/fluxcd/pkg/runtime v0.10.1/go.mod h1:JD0eZIn5xkTeHHQUWXSqJPIh/ecO0d0qrUKbSVHnpnw= github.com/fluxcd/pkg/ssh v0.0.5 h1:rnbFZ7voy2JBlUfMbfyqArX2FYaLNpDhccGFC3qW83A= github.com/fluxcd/pkg/ssh v0.0.5/go.mod h1:7jXPdXZpc0ttMNz2kD9QuMi3RNn/e0DOFbj0Tij/+Hs= github.com/fluxcd/pkg/testserver v0.0.2/go.mod h1:pgUZTh9aQ44FSTQo+5NFlh7YMbUfdz1B80DalW7k96Y= diff --git a/main.go b/main.go index a7966121..6d2b6f92 100644 --- a/main.go +++ b/main.go @@ -29,6 +29,7 @@ import ( imagev1alpha1_reflect "github.com/fluxcd/image-reflector-controller/api/v1alpha1" "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/pkg/runtime/events" + "github.com/fluxcd/pkg/runtime/leaderelection" "github.com/fluxcd/pkg/runtime/logger" "github.com/fluxcd/pkg/runtime/metrics" "github.com/fluxcd/pkg/runtime/pprof" @@ -58,27 +59,23 @@ func init() { func main() { var ( - metricsAddr string - eventsAddr string - healthAddr string - enableLeaderElection bool - clientOptions client.Options - logOptions logger.Options - watchAllNamespaces bool + metricsAddr string + eventsAddr string + healthAddr string + clientOptions client.Options + logOptions logger.Options + leaderElectionOptions leaderelection.Options + watchAllNamespaces bool ) flag.StringVar(&metricsAddr, "metrics-addr", ":8080", "The address the metric endpoint binds to.") flag.StringVar(&eventsAddr, "events-addr", "", "The address of the events receiver.") flag.StringVar(&healthAddr, "health-addr", ":9440", "The address the health endpoint binds to.") - flag.BoolVar(&enableLeaderElection, "enable-leader-election", false, - "Enable leader election for controller manager. "+ - "Enabling this will ensure there is only one active controller manager.") flag.BoolVar(&watchAllNamespaces, "watch-all-namespaces", true, "Watch for custom resources in all namespaces, if set to false it will only watch the runtime namespace.") - flag.Bool("log-json", false, "Set logging to JSON format.") - flag.CommandLine.MarkDeprecated("log-json", "Please use --log-encoding=json instead.") clientOptions.BindFlags(flag.CommandLine) logOptions.BindFlags(flag.CommandLine) + leaderElectionOptions.BindFlags(flag.CommandLine) flag.Parse() log := logger.NewLogger(logOptions) @@ -104,13 +101,17 @@ func main() { restConfig := client.GetConfigOrDie(clientOptions) mgr, err := ctrl.NewManager(restConfig, ctrl.Options{ - Scheme: scheme, - MetricsBindAddress: metricsAddr, - HealthProbeBindAddress: healthAddr, - Port: 9443, - LeaderElection: enableLeaderElection, - LeaderElectionID: "79628f79.fluxcd.io", - Namespace: watchNamespace, + Scheme: scheme, + MetricsBindAddress: metricsAddr, + HealthProbeBindAddress: healthAddr, + Port: 9443, + LeaderElection: leaderElectionOptions.Enable, + LeaderElectionReleaseOnCancel: leaderElectionOptions.ReleaseOnCancel, + LeaseDuration: &leaderElectionOptions.LeaseDuration, + RenewDeadline: &leaderElectionOptions.RenewDeadline, + RetryPeriod: &leaderElectionOptions.RetryPeriod, + LeaderElectionID: "79628f79.fluxcd.io", + Namespace: watchNamespace, }) if err != nil { setupLog.Error(err, "unable to start manager") From 299d874b9ee49fa609f115b003461f1479641c39 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 25 Mar 2021 14:22:02 +0200 Subject: [PATCH 2/2] Use controller name in LeaderElectionID Signed-off-by: Stefan Prodan --- main.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 6d2b6f92..47298330 100644 --- a/main.go +++ b/main.go @@ -17,6 +17,7 @@ limitations under the License. package main import ( + "fmt" "os" flag "github.com/spf13/pflag" @@ -110,7 +111,7 @@ func main() { LeaseDuration: &leaderElectionOptions.LeaseDuration, RenewDeadline: &leaderElectionOptions.RenewDeadline, RetryPeriod: &leaderElectionOptions.RetryPeriod, - LeaderElectionID: "79628f79.fluxcd.io", + LeaderElectionID: fmt.Sprintf("%s-leader-election", controllerName), Namespace: watchNamespace, }) if err != nil {