diff --git a/chart/templates/deployment.yaml b/chart/templates/deployment.yaml index 73ca4bbbe..da2679421 100644 --- a/chart/templates/deployment.yaml +++ b/chart/templates/deployment.yaml @@ -50,6 +50,13 @@ spec: {{- if .Values.controller.configMapOverrides }} - --config-overrides=chaos-controller-overrides {{- end }} + - --client-go-qps={{ .Values.controller.clientGoQPS }} + - --client-go-burst={{ .Values.controller.clientGoBurst }} + {{- with .Values.controller.additionalArgs }} + {{- range . }} + - {{ . | quote }} + {{- end }} + {{- end }} env: - name: POD_NAMESPACE valueFrom: diff --git a/chart/values.yaml b/chart/values.yaml index a84c7febe..aea902a4a 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -89,6 +89,9 @@ controller: clusterThreshold: 66 allowNodeFailure: true # if set to false, will prevent the creation of any disruption that applies a nodeFailure, but only if safeMode.enable is true allowNodeLevel: true # if set to false, will prevent the creation of any disruption at the node level, but only if safeMode.enable is true + additionalArgs: [] # list of additional arguments to pass to the controller + clientGoQPS: 20 # Number of queries per second client-go is allowed to make + clientGoBurst: 30 # Allowed burst queries for client-go logLevel: DEBUG # sets the log level for the chaos controller resources: # resources assigned to the controller pod. may need to be increased when deploying to larger scale clusters cpu: 100m diff --git a/main.go b/main.go index efb4613a3..01c98e72f 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ package main import ( "context" + "flag" "fmt" "net/http" "os" @@ -61,7 +62,11 @@ import ( //go:generate mockery --config .local.mockery.yaml //go:generate mockery --config .vendor.mockery.yaml -var scheme = runtime.NewScheme() +var ( + clientGoQPS = flag.Float64("client-go-qps", 20, "Number of queries per second client-go is allowed to make (default 20)") + clientGoBurst = flag.Int("client-go-burst", 30, "Allowed burst queries for client-go (default 30)") + scheme = runtime.NewScheme() +) func init() { // +kubebuilder:scaffold:scheme @@ -70,6 +75,7 @@ func init() { } func main() { + flag.Parse() logger, err := log.NewZapLogger() if err != nil { ctrl.Log.WithName("setup").Error(err, "error creating controller logger") @@ -105,7 +111,11 @@ func main() { logger.Fatalw("unable to create a valid configuration", "error", err) } - mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ + ctrlConfig := ctrl.GetConfigOrDie() + ctrlConfig.QPS = float32(*clientGoQPS) + ctrlConfig.Burst = *clientGoBurst + + mgr, err := ctrl.NewManager(ctrlConfig, ctrl.Options{ Scheme: scheme, HealthProbeBindAddress: cfg.Controller.HealthProbeBindAddr, Metrics: metricsserver.Options{