fix(providers/kubernetes): Added QPS and Burst tweaks for client-side throttling

This commit is contained in:
Alexander Vyssochin
2023-09-13 17:49:50 +06:00
committed by Alexis Couvreur
parent 95909a0a0e
commit f4e88ae322
4 changed files with 29 additions and 5 deletions

View File

@@ -12,6 +12,8 @@ import (
core_v1 "k8s.io/api/core/v1"
"github.com/acouvreur/sablier/app/instance"
providerConfig "github.com/acouvreur/sablier/config"
log "github.com/sirupsen/logrus"
autoscalingv1 "k8s.io/api/autoscaling/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/informers"
@@ -60,12 +62,18 @@ type KubernetesProvider struct {
Client kubernetes.Interface
}
func NewKubernetesProvider() (*KubernetesProvider, error) {
config, err := rest.InClusterConfig()
func NewKubernetesProvider(providerConfig providerConfig.Kubernetes) (*KubernetesProvider, error) {
kubeclientConfig, err := rest.InClusterConfig()
kubeclientConfig.QPS = providerConfig.QPS
kubeclientConfig.Burst = providerConfig.Burst
log.Debug(fmt.Sprintf("Provider configuration: QPS=%v, Burst=%v", kubeclientConfig.QPS, kubeclientConfig.Burst))
if err != nil {
return nil, err
}
client, err := kubernetes.NewForConfig(config)
client, err := kubernetes.NewForConfig(kubeclientConfig)
if err != nil {
return nil, err
}

View File

@@ -28,7 +28,7 @@ func NewProvider(config config.Provider) (Provider, error) {
case config.Name == "docker":
return NewDockerClassicProvider()
case config.Name == "kubernetes":
return NewKubernetesProvider()
return NewKubernetesProvider(config.Kubernetes)
}
return nil, fmt.Errorf("unimplemented provider %s", config.Name)
}

View File

@@ -46,6 +46,10 @@ It provides an integrations with multiple reverse proxies and different loading
// Provider flags
startCmd.Flags().StringVar(&conf.Provider.Name, "provider.name", "docker", fmt.Sprintf("Provider to use to manage containers %v", config.GetProviders()))
viper.BindPFlag("provider.name", startCmd.Flags().Lookup("provider.name"))
startCmd.Flags().Float32Var(&conf.Provider.Kubernetes.QPS, "provider.kubernetes.QPS", 5, fmt.Sprintf("QPS limit for K8S API access client-side throttling"))
viper.BindPFlag("provider.kubernetes.qps", startCmd.Flags().Lookup("provider.kubernetes.qps"))
startCmd.Flags().IntVar(&conf.Provider.Kubernetes.Burst, "provider.kubernetes.burst", 10, fmt.Sprintf("Maximum burst for K8S API acees client-side throttling"))
viper.BindPFlag("provider.kubernetes.burst", startCmd.Flags().Lookup("provider.kubernetes.Burst"))
// Server flags
startCmd.Flags().IntVar(&conf.Server.Port, "server.port", 10000, "The server port to use")
viper.BindPFlag("server.port", startCmd.Flags().Lookup("server.port"))

View File

@@ -7,7 +7,15 @@ import (
// Provider holds the provider description
// It can be either docker, swarm or kubernetes
type Provider struct {
Name string `mapstructure:"NAME" yaml:"provider,omitempty"`
Name string `mapstructure:"NAME" yaml:"provider,omitempty"`
Kubernetes Kubernetes
}
type Kubernetes struct {
//QPS limit for K8S API access client-side throttle
QPS float32 `mapstructure:"QPS" yaml:"QPS" default:"5"`
//Maximum burst for client-side throttle
Burst int `mapstructure:"BURST" yaml:"Burst" default:"10"`
}
var providers = []string{"docker", "swarm", "kubernetes"}
@@ -15,6 +23,10 @@ var providers = []string{"docker", "swarm", "kubernetes"}
func NewProviderConfig() Provider {
return Provider{
Name: "docker",
Kubernetes: Kubernetes{
QPS: 5,
Burst: 10,
},
}
}