Skip to content

Commit da591ad

Browse files
authored
Concurrency level configuration (#1269)
Signed-off-by: Alexey Makhov <[email protected]> Signed-off-by: makhov <[email protected]>
1 parent 73777fd commit da591ad

File tree

10 files changed

+55
-24
lines changed

10 files changed

+55
-24
lines changed

cmd/main.go

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import (
3939
ctrl "sigs.k8s.io/controller-runtime"
4040
"sigs.k8s.io/controller-runtime/pkg/cache"
4141
"sigs.k8s.io/controller-runtime/pkg/client"
42+
capictrl "sigs.k8s.io/controller-runtime/pkg/controller"
4243
"sigs.k8s.io/controller-runtime/pkg/healthz"
4344
"sigs.k8s.io/controller-runtime/pkg/log/zap"
4445
"sigs.k8s.io/controller-runtime/pkg/metrics/filters"
@@ -90,12 +91,15 @@ func init() {
9091
}
9192

9293
func main() {
93-
var metricsAddr string // deprecated, use capi's diagnostics-address instead
94-
var enableLeaderElection bool
95-
var secureMetrics bool // deprecated, use capi's insecure-diagnostics instead
96-
var enableHTTP2 bool // deprecated
97-
var probeAddr string
98-
var enabledController string
94+
var (
95+
metricsAddr string // deprecated, use capi's diagnostics-address instead
96+
enableLeaderElection bool
97+
secureMetrics bool // deprecated, use capi's insecure-diagnostics instead
98+
enableHTTP2 bool // deprecated
99+
probeAddr string
100+
enabledController string
101+
concurrency int
102+
)
99103

100104
pflag.CommandLine.StringVar(&metricsAddr, "metrics-bind-address", ":8443", "[Deprecated, use --diagnostics-address instead] The address the metric endpoint binds to. "+
101105
"Use :8080 for http and :8443 for https. Setting to 0 will disable the metrics endpoint.")
@@ -108,6 +112,7 @@ func main() {
108112
pflag.CommandLine.BoolVar(&enableHTTP2, "enable-http2", false,
109113
"[Deprecated] If set, HTTP/2 will be enabled for the metrics and webhook servers")
110114
pflag.CommandLine.StringVar(&featureGates, "feature-gates", "", "feature gates to enable (comma separated list of key=value pairs)")
115+
pflag.CommandLine.IntVar(&concurrency, "concurrency", 5, "controller concurrency, default: 5")
111116

112117
pflag.CommandLine.StringVar(&enabledController, "enable-controller", "", "The controller to enable. Default: all")
113118
opts := zap.Options{
@@ -240,6 +245,9 @@ func main() {
240245
}
241246

242247
//+kubebuilder:scaffold:builder
248+
ctrlOptions := capictrl.Options{
249+
MaxConcurrentReconciles: concurrency,
250+
}
243251

244252
if isControllerEnabled(bootstrapController) && runCAPIControllers {
245253
if err = (&bootstrap.Controller{
@@ -248,7 +256,7 @@ func main() {
248256
Scheme: mgr.GetScheme(),
249257
ClientSet: clientSet,
250258
RESTConfig: restConfig,
251-
}).SetupWithManager(mgr); err != nil {
259+
}).SetupWithManager(mgr, ctrlOptions); err != nil {
252260
setupLog.Error(err, "unable to create controller", "controller", "Bootstrap")
253261
os.Exit(1)
254262
}
@@ -258,7 +266,7 @@ func main() {
258266
Scheme: mgr.GetScheme(),
259267
ClientSet: clientSet,
260268
RESTConfig: restConfig,
261-
}).SetupWithManager(mgr); err != nil {
269+
}).SetupWithManager(mgr, ctrlOptions); err != nil {
262270
setupLog.Error(err, "unable to create controller", "controller", "Bootstrap")
263271
os.Exit(1)
264272
}
@@ -272,7 +280,7 @@ func main() {
272280
ClientSet: clientSet,
273281
RESTConfig: restConfig,
274282
Recorder: mgr.GetEventRecorderFor("cluster-reconciler"),
275-
}).SetupWithManager(mgr); err != nil {
283+
}).SetupWithManager(mgr, ctrlOptions); err != nil {
276284
setupLog.Error(err, "unable to create controller", "controller", "K0smotronCluster")
277285
os.Exit(1)
278286
}
@@ -287,7 +295,7 @@ func main() {
287295
Scheme: mgr.GetScheme(),
288296
ClientSet: clientSet,
289297
RESTConfig: restConfig,
290-
}).SetupWithManager(mgr); err != nil {
298+
}).SetupWithManager(mgr, ctrlOptions); err != nil {
291299
setupLog.Error(err, "unable to create controller", "controller", "JoinTokenRequest")
292300
os.Exit(1)
293301
}
@@ -299,7 +307,7 @@ func main() {
299307
Scheme: mgr.GetScheme(),
300308
ClientSet: clientSet,
301309
RESTConfig: restConfig,
302-
}).SetupWithManager(mgr); err != nil {
310+
}).SetupWithManager(mgr, ctrlOptions); err != nil {
303311
setupLog.Error(err, "unable to create controller", "controller", "K0smotronControlPlane")
304312
os.Exit(1)
305313
}
@@ -309,7 +317,7 @@ func main() {
309317
SecretCachingClient: secretCachingClient,
310318
ClientSet: clientSet,
311319
RESTConfig: restConfig,
312-
}).SetupWithManager(mgr); err != nil {
320+
}).SetupWithManager(mgr, ctrlOptions); err != nil {
313321
setupLog.Error(err, "unable to create controller", "controller", "K0sController")
314322
os.Exit(1)
315323
}
@@ -333,15 +341,15 @@ func main() {
333341
Scheme: mgr.GetScheme(),
334342
ClientSet: clientSet,
335343
RESTConfig: restConfig,
336-
}).SetupWithManager(mgr); err != nil {
344+
}).SetupWithManager(mgr, ctrlOptions); err != nil {
337345
setupLog.Error(err, "unable to create controller", "controller", "RemoteMachine")
338346
os.Exit(1)
339347
}
340348

341349
if err = (&infrastructure.ClusterController{
342350
Client: mgr.GetClient(),
343351
Scheme: mgr.GetScheme(),
344-
}).SetupWithManager(mgr); err != nil {
352+
}).SetupWithManager(mgr, ctrlOptions); err != nil {
345353
setupLog.Error(err, "unable to create controller", "controller", "RemoteCluster")
346354
os.Exit(1)
347355
}
@@ -354,7 +362,7 @@ func main() {
354362
Client: mgr.GetClient(),
355363
Scheme: mgr.GetScheme(),
356364
ClientSet: clientSet,
357-
}).SetupWithManager(mgr); err != nil {
365+
}).SetupWithManager(mgr, ctrlOptions); err != nil {
358366
setupLog.Error(err, "unable to create controller", "controller", "ProviderID")
359367
os.Exit(1)
360368
}

internal/controller/bootstrap/controlplane_bootstrap_controller.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import (
5050
"sigs.k8s.io/cluster-api/util/secret"
5151
ctrl "sigs.k8s.io/controller-runtime"
5252
"sigs.k8s.io/controller-runtime/pkg/client"
53+
"sigs.k8s.io/controller-runtime/pkg/controller"
5354
"sigs.k8s.io/controller-runtime/pkg/log"
5455

5556
"github.com/go-logr/logr"
@@ -599,8 +600,10 @@ func createTokenSecret(tokenID, tokenSecret string) *corev1.Secret {
599600
}
600601
}
601602

602-
func (c *ControlPlaneController) SetupWithManager(mgr ctrl.Manager) error {
603+
// SetupWithManager sets up the controller with the Manager.
604+
func (c *ControlPlaneController) SetupWithManager(mgr ctrl.Manager, opts controller.Options) error {
603605
return ctrl.NewControllerManagedBy(mgr).
606+
WithOptions(opts).
604607
For(&bootstrapv1.K0sControllerConfig{}).
605608
Complete(c)
606609
}

internal/controller/bootstrap/providerid_controller.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
capiutil "sigs.k8s.io/cluster-api/util"
1515
ctrl "sigs.k8s.io/controller-runtime"
1616
"sigs.k8s.io/controller-runtime/pkg/client"
17+
"sigs.k8s.io/controller-runtime/pkg/controller"
1718
"sigs.k8s.io/controller-runtime/pkg/log"
1819

1920
k0smoutil "github.com/k0sproject/k0smotron/internal/controller/util"
@@ -91,7 +92,8 @@ func (p *ProviderIDController) Reconcile(ctx context.Context, req ctrl.Request)
9192
return ctrl.Result{}, nil
9293
}
9394

94-
func (p *ProviderIDController) SetupWithManager(mgr ctrl.Manager) error {
95+
// SetupWithManager sets up the controller with the Manager.
96+
func (p *ProviderIDController) SetupWithManager(mgr ctrl.Manager, opts controller.Options) error {
9597
apiResources, err := p.ClientSet.Discovery().ServerResourcesForGroupVersion(clusterv1.GroupVersion.String())
9698
if err != nil && !apierrors.IsNotFound(err) {
9799
return err
@@ -102,6 +104,7 @@ func (p *ProviderIDController) SetupWithManager(mgr ctrl.Manager) error {
102104
}
103105

104106
return ctrl.NewControllerManagedBy(mgr).
107+
WithOptions(opts).
105108
For(&clusterv1.Machine{}).
106109
Complete(p)
107110
}

internal/controller/bootstrap/worker_bootstrap_controller.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
"sigs.k8s.io/cluster-api/util/secret"
4343
ctrl "sigs.k8s.io/controller-runtime"
4444
"sigs.k8s.io/controller-runtime/pkg/client"
45+
"sigs.k8s.io/controller-runtime/pkg/controller"
4546
"sigs.k8s.io/controller-runtime/pkg/log"
4647

4748
"github.com/go-logr/logr"
@@ -438,8 +439,10 @@ func createInstallCmd(scope *Scope) string {
438439
return strings.Join(installCmd, " ")
439440
}
440441

441-
func (r *Controller) SetupWithManager(mgr ctrl.Manager) error {
442+
// SetupWithManager sets up the controller with the Manager.
443+
func (r *Controller) SetupWithManager(mgr ctrl.Manager, opts controller.Options) error {
442444
return ctrl.NewControllerManagedBy(mgr).
445+
WithOptions(opts).
443446
For(&bootstrapv1.K0sWorkerConfig{}).
444447
Complete(r)
445448
}

internal/controller/controlplane/k0s_controlplane_controller.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"errors"
2222
"fmt"
2323
"reflect"
24+
"sigs.k8s.io/controller-runtime/pkg/controller"
2425
"strings"
2526
"time"
2627

@@ -1012,9 +1013,10 @@ func (c *K0sController) createFRPToken(ctx context.Context, cluster *clusterv1.C
10121013
}
10131014

10141015
// SetupWithManager sets up the controller with the Manager.
1015-
func (c *K0sController) SetupWithManager(mgr ctrl.Manager) error {
1016+
func (c *K0sController) SetupWithManager(mgr ctrl.Manager, opts controller.Options) error {
10161017
// Check if the cluster.x-k8s.io API is available and if not, don't try to watch for Machine objects
10171018
return ctrl.NewControllerManagedBy(mgr).
1019+
WithOptions(opts).
10181020
For(&cpv1beta1.K0sControlPlane{}).
10191021
Owns(&clusterv1.Machine{}).
10201022
Complete(c)

internal/controller/controlplane/k0smotron_controlplane_controller.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"k8s.io/client-go/kubernetes"
3535
"k8s.io/client-go/rest"
3636
"sigs.k8s.io/cluster-api/controllers/remote"
37+
"sigs.k8s.io/controller-runtime/pkg/controller"
3738

3839
apierrors "k8s.io/apimachinery/pkg/api/errors"
3940
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -697,8 +698,9 @@ func (c *K0smotronController) getKmcScope(ctx context.Context, kcp *cpv1beta1.K0
697698
}
698699

699700
// SetupWithManager sets up the controller with the Manager.
700-
func (c *K0smotronController) SetupWithManager(mgr ctrl.Manager) error {
701+
func (c *K0smotronController) SetupWithManager(mgr ctrl.Manager, opts controller.Options) error {
701702
return ctrl.NewControllerManagedBy(mgr).
703+
WithOptions(opts).
702704
For(&cpv1beta1.K0smotronControlPlane{}).
703705
Owns(&kapi.Cluster{}, builder.MatchEveryOwner).
704706
Complete(c)

internal/controller/infrastructure/cluster_controller.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"k8s.io/apimachinery/pkg/runtime"
2424
ctrl "sigs.k8s.io/controller-runtime"
2525
"sigs.k8s.io/controller-runtime/pkg/client"
26+
"sigs.k8s.io/controller-runtime/pkg/controller"
2627
"sigs.k8s.io/controller-runtime/pkg/log"
2728

2829
infrastructure "github.com/k0sproject/k0smotron/api/infrastructure/v1beta1"
@@ -62,8 +63,10 @@ func (r *ClusterController) Reconcile(ctx context.Context, req ctrl.Request) (re
6263
return ctrl.Result{}, nil
6364
}
6465

65-
func (r *ClusterController) SetupWithManager(mgr ctrl.Manager) error {
66+
// SetupWithManager sets up the controller with the Manager.
67+
func (r *ClusterController) SetupWithManager(mgr ctrl.Manager, opts controller.Options) error {
6668
return ctrl.NewControllerManagedBy(mgr).
69+
WithOptions(opts).
6770
For(&infrastructure.RemoteCluster{}).
6871
Complete(r)
6972
}

internal/controller/infrastructure/remote_machine_controller.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
"sigs.k8s.io/cluster-api/util/patch"
3737
ctrl "sigs.k8s.io/controller-runtime"
3838
"sigs.k8s.io/controller-runtime/pkg/client"
39+
"sigs.k8s.io/controller-runtime/pkg/controller"
3940
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
4041
"sigs.k8s.io/controller-runtime/pkg/log"
4142
)
@@ -415,8 +416,10 @@ func (r *RemoteMachineController) getBootstrapData(ctx context.Context, machine
415416
return secret.Data["value"], nil
416417
}
417418

418-
func (r *RemoteMachineController) SetupWithManager(mgr ctrl.Manager) error {
419+
// SetupWithManager sets up the controller with the Manager.
420+
func (r *RemoteMachineController) SetupWithManager(mgr ctrl.Manager, opts controller.Options) error {
419421
return ctrl.NewControllerManagedBy(mgr).
422+
WithOptions(opts).
420423
For(&infrastructure.RemoteMachine{}).
421424
Complete(r)
422425
}

internal/controller/k0smotron.io/jointokenrequest_controller.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
"k8s.io/client-go/tools/clientcmd"
3636
ctrl "sigs.k8s.io/controller-runtime"
3737
"sigs.k8s.io/controller-runtime/pkg/client"
38+
"sigs.k8s.io/controller-runtime/pkg/controller"
3839
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
3940
"sigs.k8s.io/controller-runtime/pkg/log"
4041

@@ -201,8 +202,9 @@ func (r *JoinTokenRequestReconciler) updateStatus(ctx context.Context, jtr km.Jo
201202
}
202203

203204
// SetupWithManager sets up the controller with the Manager.
204-
func (r *JoinTokenRequestReconciler) SetupWithManager(mgr ctrl.Manager) error {
205+
func (r *JoinTokenRequestReconciler) SetupWithManager(mgr ctrl.Manager, opts controller.Options) error {
205206
return ctrl.NewControllerManagedBy(mgr).
207+
WithOptions(opts).
206208
For(&km.JoinTokenRequest{}).
207209
Complete(r)
208210
}

internal/controller/k0smotron.io/k0smotroncluster_controller.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
"sigs.k8s.io/cluster-api/util/secret"
3737
ctrl "sigs.k8s.io/controller-runtime"
3838
"sigs.k8s.io/controller-runtime/pkg/client"
39+
"sigs.k8s.io/controller-runtime/pkg/controller"
3940
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
4041
"sigs.k8s.io/controller-runtime/pkg/log"
4142

@@ -345,8 +346,9 @@ func (r *ClusterReconciler) getKmcScope(ctx context.Context, kmc *km.Cluster) (*
345346
}
346347

347348
// SetupWithManager sets up the controller with the Manager.
348-
func (r *ClusterReconciler) SetupWithManager(mgr ctrl.Manager) error {
349+
func (r *ClusterReconciler) SetupWithManager(mgr ctrl.Manager, opts controller.Options) error {
349350
return ctrl.NewControllerManagedBy(mgr).
351+
WithOptions(opts).
350352
For(&km.Cluster{}).
351353
Owns(&apps.StatefulSet{}).
352354
Complete(r)

0 commit comments

Comments
 (0)