From f3136decb3ab513ba7fe22482592760a09a4c9bd Mon Sep 17 00:00:00 2001 From: Lintong Jiang Date: Mon, 29 Nov 2021 11:37:23 -0800 Subject: [PATCH] Make the QPS and Burst of kube client config to be configurable in both csi-snapshotter and snapshot-controller --- README.md | 8 ++++++++ cmd/csi-snapshotter/main.go | 7 +++++++ cmd/snapshot-controller/main.go | 7 +++++++ go.mod | 1 + vendor/modules.txt | 1 + 5 files changed, 24 insertions(+) diff --git a/README.md b/README.md index bd5f91cf..baf463d4 100644 --- a/README.md +++ b/README.md @@ -123,6 +123,10 @@ Read more about how to install the example webhook [here](deploy/kubernetes/webh * `--leader-election-retry-period `: Duration, in seconds, the LeaderElector clients should wait between tries of actions. Defaults to 5 seconds. +* `--kube-api-qps `: QPS for clients that communicate with the kubernetes apiserver. Defaults to `5.0`. + +* `--kube-api-burst `: Burst for clients that communicate with the kubernetes apiserver. Defaults to `10`. + * `--http-endpoint`: The TCP network address where the HTTP server for diagnostics, including metrics and leader election health check, will listen (example: `:8080` which corresponds to port 8080 on local host). The default is empty string, which means the server is disabled. * `--metrics-path`: The HTTP path where prometheus metrics will be exposed. Default is `/metrics`. @@ -157,6 +161,10 @@ Read more about how to install the example webhook [here](deploy/kubernetes/webh * `--leader-election-retry-period `: Duration, in seconds, the LeaderElector clients should wait between tries of actions. Defaults to 5 seconds. +* `--kube-api-qps `: QPS for clients that communicate with the kubernetes apiserver. Defaults to `5.0`. + +* `--kube-api-burst `: Burst for clients that communicate with the kubernetes apiserver. Defaults to `10`. + * `--timeout `: Timeout of all calls to CSI driver. It should be set to value that accommodates majority of `CreateSnapshot`, `DeleteSnapshot`, and `ListSnapshots` calls. 1 minute is used by default. * `snapshot-name-prefix`: Prefix to apply to the name of a created snapshot. Default is `snapshot`. diff --git a/cmd/csi-snapshotter/main.go b/cmd/csi-snapshotter/main.go index 1249e5b4..f8021d0b 100644 --- a/cmd/csi-snapshotter/main.go +++ b/cmd/csi-snapshotter/main.go @@ -28,6 +28,7 @@ import ( "google.golang.org/grpc" + "github.com/spf13/pflag" "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" @@ -72,6 +73,9 @@ var ( leaderElectionRenewDeadline = flag.Duration("leader-election-renew-deadline", 10*time.Second, "Duration, in seconds, that the acting leader will retry refreshing leadership before giving up. Defaults to 10 seconds.") leaderElectionRetryPeriod = flag.Duration("leader-election-retry-period", 5*time.Second, "Duration, in seconds, the LeaderElector clients should wait between tries of actions. Defaults to 5 seconds.") + kubeAPIQPS = pflag.Float32("kube-api-qps", 5, "QPS to use while communicating with the kubernetes apiserver. Defaults to 5.0.") + kubeAPIBurst = flag.Int("kube-api-burst", 10, "Burst to use while communicating with the kubernetes apiserver. Defaults to 10.") + metricsAddress = flag.String("metrics-address", "", "(deprecated) The TCP network address where the prometheus metrics endpoint will listen (example: `:8080`). The default is empty string, which means metrics endpoint is disabled. Only one of `--metrics-address` and `--http-endpoint` can be set.") httpEndpoint = flag.String("http-endpoint", "", "The TCP network address where the HTTP server for diagnostics, including metrics and leader election health check, will listen (example: `:8080`). The default is empty string, which means the server is disabled. Only one of `--metrics-address` and `--http-endpoint` can be set.") metricsPath = flag.String("metrics-path", "/metrics", "The HTTP path where prometheus metrics will be exposed. Default is `/metrics`.") @@ -102,6 +106,9 @@ func main() { os.Exit(1) } + config.QPS = *kubeAPIQPS + config.Burst = *kubeAPIBurst + kubeClient, err := kubernetes.NewForConfig(config) if err != nil { klog.Error(err.Error()) diff --git a/cmd/snapshot-controller/main.go b/cmd/snapshot-controller/main.go index 10c85eed..6962ad8b 100644 --- a/cmd/snapshot-controller/main.go +++ b/cmd/snapshot-controller/main.go @@ -27,6 +27,7 @@ import ( "sync" "time" + "github.com/spf13/pflag" "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" @@ -61,6 +62,9 @@ var ( leaderElectionRenewDeadline = flag.Duration("leader-election-renew-deadline", 10*time.Second, "Duration, in seconds, that the acting leader will retry refreshing leadership before giving up. Defaults to 10 seconds.") leaderElectionRetryPeriod = flag.Duration("leader-election-retry-period", 5*time.Second, "Duration, in seconds, the LeaderElector clients should wait between tries of actions. Defaults to 5 seconds.") + kubeAPIQPS = pflag.Float32("kube-api-qps", 5, "QPS to use while communicating with the kubernetes apiserver. Defaults to 5.0.") + kubeAPIBurst = flag.Int("kube-api-burst", 10, "Burst to use while communicating with the kubernetes apiserver. Defaults to 10.") + httpEndpoint = flag.String("http-endpoint", "", "The TCP network address where the HTTP server for diagnostics, including metrics, will listen (example: :8080). The default is empty string, which means the server is disabled.") metricsPath = flag.String("metrics-path", "/metrics", "The HTTP path where prometheus metrics will be exposed. Default is `/metrics`.") retryIntervalStart = flag.Duration("retry-interval-start", time.Second, "Initial retry interval of failed volume snapshot creation or deletion. It doubles with each failure, up to retry-interval-max. Default is 1 second.") @@ -127,6 +131,9 @@ func main() { os.Exit(1) } + config.QPS = *kubeAPIQPS + config.Burst = *kubeAPIBurst + kubeClient, err := kubernetes.NewForConfig(config) if err != nil { klog.Error(err.Error()) diff --git a/go.mod b/go.mod index 44fb15cb..dcadc08f 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( github.com/prometheus/client_model v0.2.0 github.com/prometheus/common v0.26.0 github.com/spf13/cobra v1.1.3 + github.com/spf13/pflag v1.0.5 golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/grpc v1.38.0 diff --git a/vendor/modules.txt b/vendor/modules.txt index c4f646d9..37fbf617 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -115,6 +115,7 @@ github.com/prometheus/procfs/internal/util ## explicit github.com/spf13/cobra # github.com/spf13/pflag v1.0.5 +## explicit github.com/spf13/pflag # golang.org/x/net v0.0.0-20210520170846-37e1c6afe023 golang.org/x/net/context