kubernetes-sigs / cluster-api-operator

Home for Cluster API Operator, a subproject of sig-cluster-lifecycle
https://cluster-api-operator.sigs.k8s.io
Apache License 2.0
172 stars 78 forks source link

Setting maxConcurrentReconciles doesnt work with all InfraProviders #587

Open MaxRink opened 2 months ago

MaxRink commented 2 months ago

What steps did you take and what happened: A few InfraProviders (capv for example) have more specific recnciler flags than just maxConcurrentReconciles If maxConcurrentReconciles gets configured they will just not start with an error

unknown flag: --max-concurrent-reconciles
Usage of /manager:
unknown flag: --max-concurrent-reconciles
      --clustercachetracker-client-burst int     Maximum number of queries that should be allowed in one burst from the cluster cache tracker clients to the Kubernetes API server of workload clusters. (default 30)
      --clustercachetracker-client-qps float32   Maximum queries per second from the cluster cache tracker clients to the Kubernetes API server of workload clusters. (default 20)
      --clustercachetracker-concurrency int      Number of clusters to process simultaneously (default 10)
      --contention-profiling                     Enable block profiling.
      --credentials-file string                  path to CAPV's credentials file (default "/etc/capv/credentials.yaml")
      --diagnostics-address string               The address the diagnostics endpoint binds to. Per default metrics are served via https and withauthentication/authorization. To serve via http and without authentication/authorization set --insecure-diagnostics. If --insecure-diagnostics is not set the diagnostics endpoint also serves pprof endpoints and an endpoint to change the log level. (default ":8443")
      --feature-gates mapStringBool              A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
                                                 AllAlpha=true|false (ALPHA - default=false)
                                                 AllBeta=true|false (BETA - default=false)
                                                 NamespaceScopedZones=true|false (ALPHA - default=false)
                                                 NodeAntiAffinity=true|false (ALPHA - default=false) (default )
      --health-addr string                       The address the health endpoint binds to. (default ":9440")
      --insecure-diagnostics                     Enable insecure diagnostics serving. For more details see the description of --diagnostics-address.
      --kube-api-burst int                       Maximum number of queries that should be allowed in one burst from the controller client to the Kubernetes API server. (default 30)
      --kube-api-qps float32                     Maximum queries per second from the controller client to the Kubernetes API server. (default 20)
      --kubeconfig string                        Paths to a kubeconfig. Only required if out-of-cluster.
      --leader-elect                             Enable leader election for controller manager. Enabling this will ensure there is only one active controller manager. (default true)
      --leader-elect-lease-duration duration     Interval at which non-leader candidates will wait to force acquire leadership (duration string) (default 15s)
      --leader-elect-renew-deadline duration     Duration that the leading controller manager will retry refreshing leadership before giving up (duration string) (default 10s)
      --leader-elect-retry-period duration       Duration the LeaderElector clients should wait between tries of actions (duration string) (default 2s)
      --leader-election-id string                Name of the config map to use as the locking resource when configuring leader election. (default "capv-controller-manager-runtime")
      --log-flush-frequency duration             Maximum number of seconds between log flushes (default 5s)
      --log-json-info-buffer-size quantity       [Alpha] In JSON format with split output streams, the info messages can be buffered for a while to increase performance. The default value of zero bytes disables buffering. The size can be specified as number of bytes (512), multiples of 1000 (1K), multiples of 1024 (2Ki), or powers of those (3M, 4G, 5Mi, 6Gi). Enable the LoggingAlphaOptions feature gate to use this.
      --log-json-split-stream                    [Alpha] In JSON format, write error messages to stderr and info messages to stdout. The default is to write a single stream to stdout. Enable the LoggingAlphaOptions feature gate to use this.
      --log-text-info-buffer-size quantity       [Alpha] In text format with split output streams, the info messages can be buffered for a while to increase performance. The default value of zero bytes disables buffering. The size can be specified as number of bytes (512), multiples of 1000 (1K), multiples of 1024 (2Ki), or powers of those (3M, 4G, 5Mi, 6Gi). Enable the LoggingAlphaOptions feature gate to use this.
      --log-text-split-stream                    [Alpha] In text format, write error messages to stderr and info messages to stdout. The default is to write a single stream to stdout. Enable the LoggingAlphaOptions feature gate to use this.
      --logging-format string                    Sets the log format. Permitted formats: "json" (gated by LoggingBetaOptions), "text". (default "text")
      --namespace string                         Namespace that the controller watches to reconcile cluster-api objects. If unspecified, the controller watches for cluster-api objects across all namespaces.
      --network-provider string                  network provider to be used by Supervisor based clusters.
      --pod-name string                          The name of the pod running the controller manager. (default "capv-controller-manager")
      --profiler-address string                  Bind address to expose the pprof profiler (e.g. localhost:6060)
      --providerserviceaccount-concurrency int   Number of provider service accounts to process simultaneously (default 10)
      --servicediscovery-concurrency int         Number of vSphere clusters for service discovery to process simultaneously (default 10)
      --sync-period duration                     The minimum interval at which watched resources are reconciled (e.g. 15m) (default 10m0s)
      --tls-cipher-suites strings                Comma-separated list of cipher suites for the webhook server and metrics server (the latter only if --insecure-diagnostics is not set to true). If omitted, the default Go cipher suites will be used.
                                                 Preferred values: TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256.
                                                 Insecure values: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_RC4_128_SHA.
      --tls-min-version string                   The minimum TLS version in use by the webhook server and metrics server (the latter only if --insecure-diagnostics is not set to true).
                                                 Possible values are VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13. (default "VersionTLS12")
  -v, --v Level                                  number for the log level verbosity (default 0)
      --vmodule pattern=N,...                    comma-separated list of pattern=N settings for file-filtered logging (only works for text log format)
      --vspherecluster-concurrency int           Number of vSphere clusters to process simultaneously (default 10)
      --vsphereclusteridentity-concurrency int   Number of vSphere cluster identities to process simultaneously (default 10)
      --vspheredeploymentzone-concurrency int    Number of vSphere deployment zones to process simultaneously (default 10)
      --vspheremachine-concurrency int           Number of vSphere machines to process simultaneously (default 10)
      --vspherevm-concurrency int                Number of vSphere vms to process simultaneously (default 10)
      --watch-filter string                      Label value that the controller watches to reconcile cluster-api objects. Label key is always cluster.x-k8s.io/watch-filter. If unspecified, the controller watches for all cluster-api objects.
      --webhook-cert-dir string                  Webhook cert dir, only used when webhook-port is specified. (default "/tmp/k8s-webhook-server/serving-certs/")
      --webhook-port int                         Webhook Server port

There currently is no way to set those flags using the operator

What did you expect to happen:

Being able to adjust concurrency for all InfraProviders

Anything else you would like to add: [Miscellaneous information that will assist in solving the issue.]

Environment:

/kind bug [One or more /area label. See https://github.com/kubernetes-sigs/cluster-api-operator/labels?q=area for the list of labels]

k8s-ci-robot commented 2 months ago

This issue is currently awaiting triage.

If CAPI Operator contributors determines this is a relevant issue, they will accept it by applying the triage/accepted label and provide further guidance.

The triage/accepted label can be added by org members by writing /triage accepted in a comment.

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md). If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes-sigs/prow](https://github.com/kubernetes-sigs/prow/issues/new?title=Prow%20issue:) repository.