diff --git a/cmd/descheduler/app/options/options.go b/cmd/descheduler/app/options/options.go index 384afbda2..254d2720d 100644 --- a/cmd/descheduler/app/options/options.go +++ b/cmd/descheduler/app/options/options.go @@ -22,10 +22,14 @@ import ( "github.com/spf13/pflag" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + apiserver "k8s.io/apiserver/pkg/server" apiserveroptions "k8s.io/apiserver/pkg/server/options" clientset "k8s.io/client-go/kubernetes" + restclient "k8s.io/client-go/rest" componentbaseconfig "k8s.io/component-base/config" componentbaseoptions "k8s.io/component-base/config/options" + "k8s.io/klog/v2" + "sigs.k8s.io/descheduler/pkg/apis/componentconfig" "sigs.k8s.io/descheduler/pkg/apis/componentconfig/v1alpha1" deschedulerscheme "sigs.k8s.io/descheduler/pkg/descheduler/scheme" @@ -40,11 +44,12 @@ const ( type DeschedulerServer struct { componentconfig.DeschedulerConfiguration - Client clientset.Interface - EventClient clientset.Interface - SecureServing *apiserveroptions.SecureServingOptionsWithLoopback - DisableMetrics bool - EnableHTTP2 bool + Client clientset.Interface + EventClient clientset.Interface + SecureServing *apiserveroptions.SecureServingOptionsWithLoopback + SecureServingInfo *apiserver.SecureServingInfo + DisableMetrics bool + EnableHTTP2 bool } // NewDeschedulerServer creates a new DeschedulerServer with default parameters @@ -107,3 +112,18 @@ func (rs *DeschedulerServer) AddFlags(fs *pflag.FlagSet) { rs.SecureServing.AddFlags(fs) } + +func (rs *DeschedulerServer) Apply() error { + // loopbackClientConfig is a config for a privileged loopback connection + var loopbackClientConfig *restclient.Config + var secureServing *apiserver.SecureServingInfo + if err := rs.SecureServing.ApplyTo(&secureServing, &loopbackClientConfig); err != nil { + klog.ErrorS(err, "failed to apply secure server configuration") + return err + } + + secureServing.DisableHTTP2 = !rs.EnableHTTP2 + rs.SecureServingInfo = secureServing + + return nil +} diff --git a/cmd/descheduler/app/server.go b/cmd/descheduler/app/server.go index 74651128d..515df6816 100644 --- a/cmd/descheduler/app/server.go +++ b/cmd/descheduler/app/server.go @@ -33,9 +33,7 @@ import ( "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/watch" - apiserver "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/server/mux" - restclient "k8s.io/client-go/rest" "k8s.io/component-base/featuregate" "k8s.io/component-base/logs" logsapi "k8s.io/component-base/logs/api/v1" @@ -67,16 +65,11 @@ func NewDeschedulerCommand(out io.Writer) *cobra.Command { return nil }, RunE: func(cmd *cobra.Command, args []string) error { - // loopbackClientConfig is a config for a privileged loopback connection - var loopbackClientConfig *restclient.Config - var secureServing *apiserver.SecureServingInfo - if err := s.SecureServing.ApplyTo(&secureServing, &loopbackClientConfig); err != nil { - klog.ErrorS(err, "failed to apply secure server configuration") + if err = s.Apply(); err != nil { + klog.ErrorS(err, "failed to apply") return err } - secureServing.DisableHTTP2 = !s.EnableHTTP2 - ctx, done := signal.NotifyContext(cmd.Context(), syscall.SIGINT, syscall.SIGTERM) pathRecorderMux := mux.NewPathRecorderMux("descheduler") @@ -86,7 +79,7 @@ func NewDeschedulerCommand(out io.Writer) *cobra.Command { healthz.InstallHandler(pathRecorderMux, healthz.NamedCheck("Descheduler", healthz.PingHealthz.Check)) - stoppedCh, _, err := secureServing.Serve(pathRecorderMux, 0, ctx.Done()) + stoppedCh, _, err := s.SecureServingInfo.Serve(pathRecorderMux, 0, ctx.Done()) if err != nil { klog.Fatalf("failed to start secure server: %v", err) return err