API Server: Override k8s api server profile contention flag with custom ones (#90238)

Upgrades sdk ro v0.238.0
This commit is contained in:
Marcus Efraimsson
2024-07-10 17:27:51 +02:00
committed by GitHub
parent 117390e88d
commit 2cf3a4d9ee
7 changed files with 64 additions and 6 deletions
@@ -15,6 +15,7 @@ type Options struct {
RecommendedOptions *genericoptions.RecommendedOptions
TracingOptions *TracingOptions
MetricsOptions *MetricsOptions
ProfilingOptions *ProfilingOptions
ServerRunOptions *genericoptions.ServerRunOptions
StorageOptions *options.StorageOptions
}
@@ -26,6 +27,7 @@ func New(logger log.Logger, codec runtime.Codec) *Options {
RecommendedOptions: options.NewRecommendedOptions(codec),
TracingOptions: NewTracingOptions(logger),
MetricsOptions: NewMetricsOptions(logger),
ProfilingOptions: NewProfilingOptions(logger),
ServerRunOptions: genericoptions.NewServerRunOptions(),
StorageOptions: options.NewStorageOptions(),
}
@@ -37,6 +39,7 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) {
o.RecommendedOptions.AddFlags(fs)
o.TracingOptions.AddFlags(fs)
o.MetricsOptions.AddFlags(fs)
o.ProfilingOptions.AddFlags(fs)
o.ServerRunOptions.AddUniversalFlags(fs)
}
@@ -57,6 +60,10 @@ func (o *Options) Validate() []error {
return errs
}
if errs := o.ProfilingOptions.Validate(); len(errs) != 0 {
return errs
}
if errs := o.ServerRunOptions.Validate(); len(errs) != 0 {
return errs
}
@@ -168,6 +175,12 @@ func (o *Options) ApplyTo(serverConfig *genericapiserver.RecommendedConfig) erro
}
}
if o.ProfilingOptions != nil {
if err := o.ProfilingOptions.ApplyTo(serverConfig); err != nil {
return err
}
}
if o.ServerRunOptions != nil {
if err := o.ServerRunOptions.ApplyTo(&serverConfig.Config); err != nil {
return err
@@ -0,0 +1,46 @@
package options
import (
"runtime"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/spf13/pflag"
genericapiserver "k8s.io/apiserver/pkg/server"
)
type ProfilingOptions struct {
logger log.Logger
blockProfilingRate int
mutexProfilingRate int
}
func NewProfilingOptions(logger log.Logger) *ProfilingOptions {
return &ProfilingOptions{
logger: logger,
}
}
func (o *ProfilingOptions) AddFlags(fs *pflag.FlagSet) {
fs.IntVar(&o.blockProfilingRate, "grafana.profiling.block-rate", 0, "Controls the fraction of goroutine blocking events that are reported in the blocking profile. The profiler aims to sample an average of one blocking event per rate nanoseconds spent blocked. To turn off profiling entirely, use 0.")
fs.IntVar(&o.mutexProfilingRate, "grafana.profiling.mutex-rate", 0, "Controls the fraction of mutex contention events that are reported in the mutex profile. On average 1/rate events are reported. To turn off mutex profiling entirely, use 0.")
}
func (o *ProfilingOptions) Validate() []error {
return nil
}
func (o *ProfilingOptions) ApplyTo(config *genericapiserver.RecommendedConfig) error {
if !config.EnableProfiling {
return nil
}
// We bring our own block/mutex profiling configuration
config.EnableContentionProfiling = false
runtime.SetBlockProfileRate(o.blockProfilingRate)
runtime.SetMutexProfileFraction(o.mutexProfilingRate)
o.logger.Info("Profiling enabled", "blockProfileRate", o.blockProfilingRate, "mutexProfileRate", o.mutexProfilingRate)
return nil
}