@@ -11,15 +11,13 @@ import (
1111 "fmt"
1212 "net"
1313 "os"
14- "time"
1514
1615 // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
1716 // to ensure that exec-entrypoint and run can make use of them.
1817 "google.golang.org/grpc"
1918 "google.golang.org/grpc/credentials"
2019 "google.golang.org/grpc/credentials/insecure"
2120 _ "k8s.io/client-go/plugin/pkg/client/auth"
22- "k8s.io/client-go/rest"
2321
2422 "github.com/bombsimon/logrusr/v2"
2523 grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
@@ -70,9 +68,13 @@ func init() {
7068}
7169
7270func main () {
71+ var enableLeaderElection bool
7372 var configFN string
7473 var jsonLog bool
7574 var verbose bool
75+ flag .BoolVar (& enableLeaderElection , "leader-elect" , false ,
76+ "Enable leader election for controller manager. " +
77+ "Enabling this will ensure there is only one active controller manager." )
7678 flag .StringVar (& configFN , "config" , "" , "Path to the config file" )
7779 flag .BoolVar (& jsonLog , "json-log" , true , "produce JSON log output on verbose level" )
7880 flag .BoolVar (& verbose , "verbose" , false , "Enable verbose logging" )
@@ -113,32 +115,25 @@ func main() {
113115 setupLog .Error (nil , "namespace cannot be empty" )
114116 os .Exit (1 )
115117 }
116-
117118 if cfg .Manager .SecretsNamespace == "" {
118119 setupLog .Error (nil , "secretsNamespace cannot be empty" )
119120 os .Exit (1 )
120121 }
121122
122123 mgr , err := ctrl .NewManager (ctrl .GetConfigOrDie (), ctrl.Options {
123- Scheme : scheme ,
124- MetricsBindAddress : cfg .Prometheus .Addr ,
125- Port : 9443 ,
126- HealthProbeBindAddress : cfg .Health .Addr ,
127- LeaderElection : true ,
128- LeaderElectionID : "ws-manager-mk2-leader.gitpod.io" ,
129- LeaderElectionReleaseOnCancel : true ,
130- NewCache : func (config * rest.Config , opts cache.Options ) (cache.Cache , error ) {
131- opts .Namespaces = []string {cfg .Manager .Namespace , cfg .Manager .SecretsNamespace }
132- return cache .New (config , opts )
133- },
124+ Scheme : scheme ,
125+ MetricsBindAddress : cfg .Prometheus .Addr ,
126+ Port : 9443 ,
127+ HealthProbeBindAddress : cfg .Health .Addr ,
128+ LeaderElection : enableLeaderElection ,
129+ LeaderElectionID : "ws-manager-mk2-leader.gitpod.io" ,
130+ NewCache : cache .MultiNamespacedCacheBuilder ([]string {cfg .Manager .Namespace , cfg .Manager .SecretsNamespace }),
134131 })
135132 if err != nil {
136133 setupLog .Error (err , "unable to start manager" )
137134 os .Exit (1 )
138135 }
139136
140- mgrCtx := ctrl .SetupSignalHandler ()
141-
142137 maintenanceReconciler , err := controllers .NewMaintenanceReconciler (mgr .GetClient ())
143138 if err != nil {
144139 setupLog .Error (err , "unable to create maintenance controller" , "controller" , "Maintenance" )
@@ -153,21 +148,6 @@ func main() {
153148 }
154149
155150 activity := activity .NewWorkspaceActivity ()
156-
157- go func () {
158- for {
159- select {
160- case <- mgrCtx .Done ():
161- return
162- case <- mgr .Elected ():
163- now := time .Now ()
164- setupLog .Info ("updating activity started time" , "now" , now )
165- activity .ManagerStartedAt = now
166- return
167- }
168- }
169- }()
170-
171151 timeoutReconciler , err := controllers .NewTimeoutReconciler (mgr .GetClient (), mgr .GetEventRecorderFor ("workspace" ), cfg .Manager , activity , maintenanceReconciler )
172152 if err != nil {
173153 setupLog .Error (err , "unable to create timeout controller" , "controller" , "Timeout" )
@@ -185,13 +165,11 @@ func main() {
185165 setupLog .Error (err , "unable to setup workspace controller with manager" , "controller" , "Workspace" )
186166 os .Exit (1 )
187167 }
188-
189168 if err = timeoutReconciler .SetupWithManager (mgr ); err != nil {
190169 setupLog .Error (err , "unable to setup timeout controller with manager" , "controller" , "Timeout" )
191170 os .Exit (1 )
192171 }
193-
194- if err = maintenanceReconciler .SetupWithManager (mgrCtx , mgr ); err != nil {
172+ if err = maintenanceReconciler .SetupWithManager (mgr ); err != nil {
195173 setupLog .Error (err , "unable to setup maintenance controller with manager" , "controller" , "Maintenance" )
196174 os .Exit (1 )
197175 }
@@ -213,7 +191,7 @@ func main() {
213191 }
214192
215193 setupLog .Info ("starting manager" )
216- if err := mgr .Start (mgrCtx ); err != nil {
194+ if err := mgr .Start (ctrl . SetupSignalHandler () ); err != nil {
217195 setupLog .Error (err , "problem running manager" )
218196 os .Exit (1 )
219197 }
0 commit comments