Skip to content

Commit 8728190

Browse files
authored
gha: customize client-go rate limiter params (#4)
1 parent 3dde352 commit 8728190

File tree

4 files changed

+31
-5
lines changed

4 files changed

+31
-5
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@ spec:
9797
{{- with .Values.flags.maxConcurrentReconcilesForAutoscalingListener }}
9898
- "--max-concurrent-reconciles-for-autoscaling-listener={{ . }}"
9999
{{- end }}
100+
{{- with .Values.flags.clientGoRateLimiterQPS }}
101+
- "--client-go-rate-limiter-qps={{ . }}"
102+
{{- end }}
103+
{{- with .Values.flags.clientGoRateLimiterBurst }}
104+
- "--client-go-rate-limiter-burst={{ . }}"
105+
{{- end }}
100106
command:
101107
- "/manager"
102108
{{- if or .Values.metrics .Values.pprof }}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,3 +140,7 @@ flags:
140140
# maxConcurrentReconcilesForEphemeralRunnerSet: 1
141141
# maxConcurrentReconcilesForEphemeralRunner: 1
142142
# maxConcurrentReconcilesForAutoscalingListener: 1
143+
144+
## Defines the client-go rate limiter parameters.
145+
# clientGoRateLimiterQPS: 20
146+
# clientGoRateLimiterBurst: 30

controllers/actions.github.com/ephemeralrunner_controller.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ type EphemeralRunnerReconciler struct {
7171
// - https://pkg.go.dev/sigs.k8s.io/[email protected]/pkg/reconcile
7272
func (r *EphemeralRunnerReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
7373
log := r.Log.WithValues("ephemeralrunner", req.NamespacedName)
74+
log.Info("Start Reconcile")
7475

7576
ephemeralRunner := new(v1alpha1.EphemeralRunner)
7677
if err := r.Get(ctx, req.NamespacedName, ephemeralRunner); err != nil {
@@ -183,6 +184,7 @@ func (r *EphemeralRunnerReconciler) Reconcile(ctx context.Context, req ctrl.Requ
183184
return r.updateStatusWithRunnerConfig(ctx, ephemeralRunner, log)
184185
}
185186

187+
now := time.Now()
186188
secret := new(corev1.Secret)
187189
if err := r.Get(ctx, req.NamespacedName, secret); err != nil {
188190
if !kerrors.IsNotFound(err) {
@@ -193,6 +195,7 @@ func (r *EphemeralRunnerReconciler) Reconcile(ctx context.Context, req ctrl.Requ
193195
log.Info("Creating new ephemeral runner secret for jitconfig.")
194196
return r.createSecret(ctx, ephemeralRunner, log)
195197
}
198+
log.Info("Get Secret", "duration_ms", time.Since(now).Milliseconds())
196199

197200
pod := new(corev1.Pod)
198201
if err := r.Get(ctx, req.NamespacedName, pod); err != nil {
@@ -344,8 +347,10 @@ func (r *EphemeralRunnerReconciler) cleanupResources(ctx context.Context, epheme
344347
log.Info("Pod is deleted")
345348

346349
log.Info("Cleaning up the runner jitconfig secret")
350+
now := time.Now()
347351
secret := new(corev1.Secret)
348352
err = r.Get(ctx, types.NamespacedName{Namespace: ephemeralRunner.Namespace, Name: ephemeralRunner.Name}, secret)
353+
log.Info("Get Secret for cleanup", "duration_ms", time.Since(now).Milliseconds())
349354
switch {
350355
case err == nil:
351356
if secret.ObjectMeta.DeletionTimestamp.IsZero() {
@@ -516,7 +521,7 @@ func (r *EphemeralRunnerReconciler) deletePodAsFailed(ctx context.Context, ephem
516521
func (r *EphemeralRunnerReconciler) updateStatusWithRunnerConfig(ctx context.Context, ephemeralRunner *v1alpha1.EphemeralRunner, log logr.Logger) (ctrl.Result, error) {
517522
// Runner is not registered with the service. We need to register it first
518523
log.Info("Creating ephemeral runner JIT config")
519-
actionsClient, err := r.actionsClientFor(ctx, ephemeralRunner)
524+
actionsClient, err := r.actionsClientFor(ctx, ephemeralRunner, log)
520525
if err != nil {
521526
return ctrl.Result{}, fmt.Errorf("failed to get actions client for generating JIT config: %v", err)
522527
}
@@ -712,11 +717,13 @@ func (r *EphemeralRunnerReconciler) updateRunStatusFromPod(ctx context.Context,
712717
return nil
713718
}
714719

715-
func (r *EphemeralRunnerReconciler) actionsClientFor(ctx context.Context, runner *v1alpha1.EphemeralRunner) (actions.ActionsService, error) {
720+
func (r *EphemeralRunnerReconciler) actionsClientFor(ctx context.Context, runner *v1alpha1.EphemeralRunner, log logr.Logger) (actions.ActionsService, error) {
721+
now := time.Now()
716722
secret := new(corev1.Secret)
717723
if err := r.Get(ctx, types.NamespacedName{Namespace: runner.Namespace, Name: runner.Spec.GitHubConfigSecret}, secret); err != nil {
718724
return nil, fmt.Errorf("failed to get secret: %w", err)
719725
}
726+
log.Info("Get Secret for GitHub client", "duration_ms", time.Since(now).Milliseconds())
720727

721728
opts, err := r.actionsClientOptionsFor(ctx, runner)
722729
if err != nil {
@@ -782,7 +789,7 @@ func (r *EphemeralRunnerReconciler) actionsClientOptionsFor(ctx context.Context,
782789
// runnerRegisteredWithService checks if the runner is still registered with the service
783790
// Returns found=false and err=nil if ephemeral runner does not exist in GitHub service and should be deleted
784791
func (r EphemeralRunnerReconciler) runnerRegisteredWithService(ctx context.Context, runner *v1alpha1.EphemeralRunner, log logr.Logger) (found bool, err error) {
785-
actionsClient, err := r.actionsClientFor(ctx, runner)
792+
actionsClient, err := r.actionsClientFor(ctx, runner, log)
786793
if err != nil {
787794
return false, fmt.Errorf("failed to get Actions client for ScaleSet: %w", err)
788795
}
@@ -809,7 +816,7 @@ func (r EphemeralRunnerReconciler) runnerRegisteredWithService(ctx context.Conte
809816
}
810817

811818
func (r *EphemeralRunnerReconciler) deleteRunnerFromService(ctx context.Context, ephemeralRunner *v1alpha1.EphemeralRunner, log logr.Logger) error {
812-
client, err := r.actionsClientFor(ctx, ephemeralRunner)
819+
client, err := r.actionsClientFor(ctx, ephemeralRunner, log)
813820
if err != nil {
814821
return fmt.Errorf("failed to get actions client for runner: %v", err)
815822
}

main.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ func main() {
109109
maxConcurrentReconcilesForEphemeralRunnerSet int
110110
maxConcurrentReconcilesForEphemeralRunner int
111111
maxConcurrentReconcilesForAutoscalingListener int
112+
113+
rateLimiterQPS int
114+
rateLimiterBurst int
112115
)
113116
var c github.Config
114117
err = envconfig.Process("github", &c)
@@ -156,6 +159,8 @@ func main() {
156159
flag.IntVar(&maxConcurrentReconcilesForEphemeralRunnerSet, "max-concurrent-reconciles-for-ephemeral-runner-set", 1, "The maximum number of concurrent reconciles for EphemeralRunnerSet.")
157160
flag.IntVar(&maxConcurrentReconcilesForEphemeralRunner, "max-concurrent-reconciles-for-ephemeral-runner", 1, "The maximum number of concurrent reconciles for EphemeralRunner.")
158161
flag.IntVar(&maxConcurrentReconcilesForAutoscalingListener, "max-concurrent-reconciles-for-autoscaling-listener", 1, "The maximum number of concurrent reconciles for AutoscalingListener.")
162+
flag.IntVar(&rateLimiterQPS, "client-go-rate-limiter-qps", 20, "The QPS value of client-go rate limiter.")
163+
flag.IntVar(&rateLimiterBurst, "client-go-rate-limiter-burst", 30, "The burst value of client-go rate limiter.")
159164
flag.Parse()
160165

161166
runnerPodDefaults.RunnerImagePullSecrets = runnerImagePullSecrets
@@ -225,7 +230,11 @@ func main() {
225230
})
226231
}
227232

228-
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
233+
cfg := ctrl.GetConfigOrDie()
234+
cfg.QPS = float32(rateLimiterQPS)
235+
cfg.Burst = rateLimiterBurst
236+
237+
mgr, err := ctrl.NewManager(cfg, ctrl.Options{
229238
Scheme: scheme,
230239
Metrics: metricsserver.Options{
231240
BindAddress: metricsAddr,

0 commit comments

Comments
 (0)