From e944d2c365af0d2d2784dd8f71f90ca5bd0cdbc9 Mon Sep 17 00:00:00 2001 From: Maciej Szulik Date: Tue, 16 Nov 2021 22:26:32 +0100 Subject: [PATCH 1/2] Bump discovery burst for kubectl --- .../k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go | 3 --- staging/src/k8s.io/kubectl/pkg/cmd/cmd.go | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go index 10355012b6a..e43b780ac2d 100644 --- a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go +++ b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go @@ -268,9 +268,6 @@ func (f *ConfigFlags) toDiscoveryClient() (discovery.CachedDiscoveryInterface, e return nil, err } - // The more groups you have, the more discovery requests you need to make. - // given 25 groups (our groups + a few custom resources) with one-ish version each, discovery needs to make 50 requests - // double it just so we don't end up here again for a while. This config is only used for discovery. config.Burst = f.discoveryBurst cacheDir := defaultCacheDir diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/cmd.go b/staging/src/k8s.io/kubectl/pkg/cmd/cmd.go index d75eda9e18e..5347e6a19bc 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/cmd.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/cmd.go @@ -294,7 +294,7 @@ func NewKubectlCommand(o KubectlOptions) *cobra.Command { kubeConfigFlags := o.ConfigFlags if kubeConfigFlags == nil { - kubeConfigFlags = genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag() + kubeConfigFlags = genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag().WithDiscoveryBurst(300) } kubeConfigFlags.AddFlags(flags) matchVersionKubeConfigFlags := cmdutil.NewMatchVersionFlags(kubeConfigFlags) From 2fe968deb6cef4feea5bd0eb435e71844e397eed Mon Sep 17 00:00:00 2001 From: Maciej Szulik Date: Tue, 16 Nov 2021 22:27:33 +0100 Subject: [PATCH 2/2] Allow changing discovery QPS with cli-runtime --- .../cli-runtime/pkg/genericclioptions/config_flags.go | 10 ++++++++++ staging/src/k8s.io/kubectl/pkg/cmd/cmd.go | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go index e43b780ac2d..2d939c7bd68 100644 --- a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go +++ b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go @@ -120,6 +120,9 @@ type ConfigFlags struct { // Allows increasing burst used for discovery, this is useful // in clusters with many registered resources discoveryBurst int + // Allows increasing qps used for discovery, this is useful + // in clusters with many registered resources + discoveryQPS float32 } // ToRESTConfig implements RESTClientGetter. @@ -269,6 +272,7 @@ func (f *ConfigFlags) toDiscoveryClient() (discovery.CachedDiscoveryInterface, e } config.Burst = f.discoveryBurst + config.QPS = f.discoveryQPS cacheDir := defaultCacheDir @@ -393,6 +397,12 @@ func (f *ConfigFlags) WithDiscoveryBurst(discoveryBurst int) *ConfigFlags { return f } +// WithDiscoveryBurst sets the RESTClient burst for discovery. +func (f *ConfigFlags) WithDiscoveryQPS(discoveryQPS float32) *ConfigFlags { + f.discoveryQPS = discoveryQPS + return f +} + // WithWrapConfigFn allows providing a wrapper function for the client Config. func (f *ConfigFlags) WithWrapConfigFn(wrapConfigFn func(*rest.Config) *rest.Config) *ConfigFlags { f.WrapConfigFn = wrapConfigFn diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/cmd.go b/staging/src/k8s.io/kubectl/pkg/cmd/cmd.go index 5347e6a19bc..20badf1b330 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/cmd.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/cmd.go @@ -294,7 +294,7 @@ func NewKubectlCommand(o KubectlOptions) *cobra.Command { kubeConfigFlags := o.ConfigFlags if kubeConfigFlags == nil { - kubeConfigFlags = genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag().WithDiscoveryBurst(300) + kubeConfigFlags = genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag().WithDiscoveryBurst(300).WithDiscoveryQPS(50.0) } kubeConfigFlags.AddFlags(flags) matchVersionKubeConfigFlags := cmdutil.NewMatchVersionFlags(kubeConfigFlags)