Skip to content

Commit bdeaffb

Browse files
committed
gha: make MaxConcurrentReconciles for each reconciler configurable
1 parent 80d8483 commit bdeaffb

File tree

9 files changed

+63
-15
lines changed

9 files changed

+63
-15
lines changed

.github/workflows/gha-e2e-tests.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ on:
44
push:
55
branches:
66
- master
7+
- mercari-master
78
pull_request:
89
branches:
910
- master
11+
- mercari-master
1012
workflow_dispatch:
1113

1214
permissions:

.github/workflows/gha-validate-chart.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on:
44
pull_request:
55
branches:
66
- master
7+
- mercari-master
78
paths:
89
- 'charts/**'
910
- '.github/workflows/gha-validate-chart.yaml'

charts/gha-runner-scale-set-controller/templates/deployment.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,18 @@ spec:
8282
{{- range .Values.flags.excludeLabelPropagationPrefixes }}
8383
- "--exclude-label-propagation-prefix={{ . }}"
8484
{{- end }}
85+
{{- with .Values.flags.maxConcurrentReconcilesForAutoscalingRunnerSet }}
86+
- "--max-concurrent-reconciles-for-autoscaling-runner-set={{ . }}"
87+
{{- end }}
88+
{{- with .Values.flags.maxConcurrentReconcilesForEphemeralRunnerSet }}
89+
- "--max-concurrent-reconciles-for-ephemeral-runner-set={{ . }}"
90+
{{- end }}
91+
{{- with .Values.flags.maxConcurrentReconcilesForEphemeralRunner }}
92+
- "--max-concurrent-reconciles-for-ephemeral-runner={{ . }}"
93+
{{- end }}
94+
{{- with .Values.flags.maxConcurrentReconcilesForAutoscalingListener }}
95+
- "--max-concurrent-reconciles-for-autoscaling-listener={{ . }}"
96+
{{- end }}
8597
command:
8698
- "/manager"
8799
{{- with .Values.metrics }}

charts/gha-runner-scale-set-controller/values.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,9 @@ flags:
130130
## Labels that match prefix specified in the list are excluded from propagation.
131131
# excludeLabelPropagationPrefixes:
132132
# - "argocd.argoproj.io/instance"
133+
134+
## Defines the maximum number of concurrent reconciles for each reconciler.
135+
# maxConcurrentReconcilesForAutoscalingRunnerSet: 1
136+
# maxConcurrentReconcilesForEphemeralRunnerSet: 1
137+
# maxConcurrentReconcilesForEphemeralRunner: 1
138+
# maxConcurrentReconcilesForAutoscalingListener: 1

controllers/actions.github.com/autoscalinglistener_controller.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"k8s.io/apimachinery/pkg/types"
2727
ctrl "sigs.k8s.io/controller-runtime"
2828
"sigs.k8s.io/controller-runtime/pkg/client"
29+
"sigs.k8s.io/controller-runtime/pkg/controller"
2930
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
3031
"sigs.k8s.io/controller-runtime/pkg/handler"
3132
"sigs.k8s.io/controller-runtime/pkg/predicate"
@@ -55,6 +56,8 @@ type AutoscalingListenerReconciler struct {
5556
ListenerMetricsAddr string
5657
ListenerMetricsEndpoint string
5758

59+
MaxConcurrentReconciles int
60+
5861
ResourceBuilder
5962
}
6063

@@ -730,6 +733,7 @@ func (r *AutoscalingListenerReconciler) SetupWithManager(mgr ctrl.Manager) error
730733
Watches(&rbacv1.Role{}, handler.EnqueueRequestsFromMapFunc(labelBasedWatchFunc)).
731734
Watches(&rbacv1.RoleBinding{}, handler.EnqueueRequestsFromMapFunc(labelBasedWatchFunc)).
732735
WithEventFilter(predicate.ResourceVersionChangedPredicate{}).
736+
WithOptions(controller.Options{MaxConcurrentReconciles: r.MaxConcurrentReconciles}).
733737
Complete(r)
734738
}
735739

controllers/actions.github.com/autoscalingrunnerset_controller.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"k8s.io/apimachinery/pkg/types"
3535
ctrl "sigs.k8s.io/controller-runtime"
3636
"sigs.k8s.io/controller-runtime/pkg/client"
37+
"sigs.k8s.io/controller-runtime/pkg/controller"
3738
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
3839
"sigs.k8s.io/controller-runtime/pkg/handler"
3940
"sigs.k8s.io/controller-runtime/pkg/predicate"
@@ -79,6 +80,7 @@ type AutoscalingRunnerSetReconciler struct {
7980
DefaultRunnerScaleSetListenerImagePullSecrets []string
8081
UpdateStrategy UpdateStrategy
8182
ActionsClient actions.MultiClient
83+
MaxConcurrentReconciles int
8284
ResourceBuilder
8385
}
8486

@@ -763,6 +765,7 @@ func (r *AutoscalingRunnerSetReconciler) SetupWithManager(mgr ctrl.Manager) erro
763765
},
764766
)).
765767
WithEventFilter(predicate.ResourceVersionChangedPredicate{}).
768+
WithOptions(controller.Options{MaxConcurrentReconciles: r.MaxConcurrentReconciles}).
766769
Complete(r)
767770
}
768771

controllers/actions.github.com/ephemeralrunner_controller.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"k8s.io/apimachinery/pkg/types"
3434
ctrl "sigs.k8s.io/controller-runtime"
3535
"sigs.k8s.io/controller-runtime/pkg/client"
36+
"sigs.k8s.io/controller-runtime/pkg/controller"
3637
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
3738
"sigs.k8s.io/controller-runtime/pkg/predicate"
3839
)
@@ -49,9 +50,10 @@ const (
4950
// EphemeralRunnerReconciler reconciles a EphemeralRunner object
5051
type EphemeralRunnerReconciler struct {
5152
client.Client
52-
Log logr.Logger
53-
Scheme *runtime.Scheme
54-
ActionsClient actions.MultiClient
53+
Log logr.Logger
54+
Scheme *runtime.Scheme
55+
ActionsClient actions.MultiClient
56+
MaxConcurrentReconciles int
5557
ResourceBuilder
5658
}
5759

@@ -828,6 +830,7 @@ func (r *EphemeralRunnerReconciler) SetupWithManager(mgr ctrl.Manager) error {
828830
For(&v1alpha1.EphemeralRunner{}).
829831
Owns(&corev1.Pod{}).
830832
WithEventFilter(predicate.ResourceVersionChangedPredicate{}).
833+
WithOptions(controller.Options{MaxConcurrentReconciles: r.MaxConcurrentReconciles}).
831834
Complete(r)
832835
}
833836

controllers/actions.github.com/ephemeralrunnerset_controller.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
"k8s.io/apimachinery/pkg/types"
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/predicate"
4142
)
@@ -53,6 +54,8 @@ type EphemeralRunnerSetReconciler struct {
5354

5455
PublishMetrics bool
5556

57+
MaxConcurrentReconciles int
58+
5659
ResourceBuilder
5760
}
5861

@@ -575,6 +578,7 @@ func (r *EphemeralRunnerSetReconciler) SetupWithManager(mgr ctrl.Manager) error
575578
For(&v1alpha1.EphemeralRunnerSet{}).
576579
Owns(&v1alpha1.EphemeralRunner{}).
577580
WithEventFilter(predicate.ResourceVersionChangedPredicate{}).
581+
WithOptions(controller.Options{MaxConcurrentReconciles: r.MaxConcurrentReconciles}).
578582
Complete(r)
579583
}
580584

main.go

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ func main() {
103103
autoScalerImagePullSecrets stringSlice
104104

105105
commonRunnerLabels commaSeparatedStringSlice
106+
107+
maxConcurrentReconcilesForAutoscalingRunnerSet int
108+
maxConcurrentReconcilesForEphemeralRunnerSet int
109+
maxConcurrentReconcilesForEphemeralRunner int
110+
maxConcurrentReconcilesForAutoscalingListener int
106111
)
107112
var c github.Config
108113
err = envconfig.Process("github", &c)
@@ -145,6 +150,10 @@ func main() {
145150
flag.BoolVar(&autoScalingRunnerSetOnly, "auto-scaling-runner-set-only", false, "Make controller only reconcile AutoRunnerScaleSet object.")
146151
flag.StringVar(&updateStrategy, "update-strategy", "immediate", `Resources reconciliation strategy on upgrade with running/pending jobs. Valid values are: "immediate", "eventual". Defaults to "immediate".`)
147152
flag.Var(&autoScalerImagePullSecrets, "auto-scaler-image-pull-secrets", "The default image-pull secret name for auto-scaler listener container.")
153+
flag.IntVar(&maxConcurrentReconcilesForAutoscalingRunnerSet, "max-concurrent-reconciles-for-autoscaling-runner-set", 1, "The maximum number of concurrent reconciles for AutoscalingRunnerSet.")
154+
flag.IntVar(&maxConcurrentReconcilesForEphemeralRunnerSet, "max-concurrent-reconciles-for-ephemeral-runner-set", 1, "The maximum number of concurrent reconciles for EphemeralRunnerSet.")
155+
flag.IntVar(&maxConcurrentReconcilesForEphemeralRunner, "max-concurrent-reconciles-for-ephemeral-runner", 1, "The maximum number of concurrent reconciles for EphemeralRunner.")
156+
flag.IntVar(&maxConcurrentReconcilesForAutoscalingListener, "max-concurrent-reconciles-for-autoscaling-listener", 1, "The maximum number of concurrent reconciles for AutoscalingListener.")
148157
flag.Parse()
149158

150159
runnerPodDefaults.RunnerImagePullSecrets = runnerImagePullSecrets
@@ -273,30 +282,33 @@ func main() {
273282
ActionsClient: actionsMultiClient,
274283
UpdateStrategy: actionsgithubcom.UpdateStrategy(updateStrategy),
275284
DefaultRunnerScaleSetListenerImagePullSecrets: autoScalerImagePullSecrets,
276-
ResourceBuilder: rb,
285+
MaxConcurrentReconciles: maxConcurrentReconcilesForAutoscalingRunnerSet,
286+
ResourceBuilder: rb,
277287
}).SetupWithManager(mgr); err != nil {
278288
log.Error(err, "unable to create controller", "controller", "AutoscalingRunnerSet")
279289
os.Exit(1)
280290
}
281291

282292
if err = (&actionsgithubcom.EphemeralRunnerReconciler{
283-
Client: mgr.GetClient(),
284-
Log: log.WithName("EphemeralRunner").WithValues("version", build.Version),
285-
Scheme: mgr.GetScheme(),
286-
ActionsClient: actionsMultiClient,
287-
ResourceBuilder: rb,
293+
Client: mgr.GetClient(),
294+
Log: log.WithName("EphemeralRunner").WithValues("version", build.Version),
295+
Scheme: mgr.GetScheme(),
296+
ActionsClient: actionsMultiClient,
297+
MaxConcurrentReconciles: maxConcurrentReconcilesForEphemeralRunner,
298+
ResourceBuilder: rb,
288299
}).SetupWithManager(mgr); err != nil {
289300
log.Error(err, "unable to create controller", "controller", "EphemeralRunner")
290301
os.Exit(1)
291302
}
292303

293304
if err = (&actionsgithubcom.EphemeralRunnerSetReconciler{
294-
Client: mgr.GetClient(),
295-
Log: log.WithName("EphemeralRunnerSet").WithValues("version", build.Version),
296-
Scheme: mgr.GetScheme(),
297-
ActionsClient: actionsMultiClient,
298-
PublishMetrics: metricsAddr != "0",
299-
ResourceBuilder: rb,
305+
Client: mgr.GetClient(),
306+
Log: log.WithName("EphemeralRunnerSet").WithValues("version", build.Version),
307+
Scheme: mgr.GetScheme(),
308+
ActionsClient: actionsMultiClient,
309+
PublishMetrics: metricsAddr != "0",
310+
MaxConcurrentReconciles: maxConcurrentReconcilesForEphemeralRunnerSet,
311+
ResourceBuilder: rb,
300312
}).SetupWithManager(mgr); err != nil {
301313
log.Error(err, "unable to create controller", "controller", "EphemeralRunnerSet")
302314
os.Exit(1)
@@ -308,6 +320,7 @@ func main() {
308320
Scheme: mgr.GetScheme(),
309321
ListenerMetricsAddr: listenerMetricsAddr,
310322
ListenerMetricsEndpoint: listenerMetricsEndpoint,
323+
MaxConcurrentReconciles: maxConcurrentReconcilesForAutoscalingListener,
311324
ResourceBuilder: rb,
312325
}).SetupWithManager(mgr); err != nil {
313326
log.Error(err, "unable to create controller", "controller", "AutoscalingListener")

0 commit comments

Comments
 (0)