@@ -34,9 +34,7 @@ import (
34
34
35
35
"k8s.io/apimachinery/pkg/util/runtime"
36
36
"k8s.io/apimachinery/pkg/watch"
37
- apiserver "k8s.io/apiserver/pkg/server"
38
37
"k8s.io/apiserver/pkg/server/mux"
39
- restclient "k8s.io/client-go/rest"
40
38
"k8s.io/component-base/featuregate"
41
39
"k8s.io/component-base/logs"
42
40
logsapi "k8s.io/component-base/logs/api/v1"
@@ -68,40 +66,16 @@ func NewDeschedulerCommand(out io.Writer) *cobra.Command {
68
66
return nil
69
67
},
70
68
RunE : func (cmd * cobra.Command , args []string ) error {
71
- // loopbackClientConfig is a config for a privileged loopback connection
72
- var loopbackClientConfig * restclient.Config
73
- var secureServing * apiserver.SecureServingInfo
74
- if err := s .SecureServing .ApplyTo (& secureServing , & loopbackClientConfig ); err != nil {
75
- klog .ErrorS (err , "failed to apply secure server configuration" )
69
+ if err = Apply (s ); err != nil {
70
+ klog .ErrorS (err , "failed to apply" )
76
71
return err
77
72
}
78
73
79
- secureServing .DisableHTTP2 = ! s .EnableHTTP2
80
-
81
- ctx , done := signal .NotifyContext (cmd .Context (), syscall .SIGINT , syscall .SIGTERM )
82
-
83
- pathRecorderMux := mux .NewPathRecorderMux ("descheduler" )
84
- if ! s .DisableMetrics {
85
- pathRecorderMux .Handle ("/metrics" , legacyregistry .HandlerWithReset ())
86
- }
87
-
88
- healthz .InstallHandler (pathRecorderMux , healthz .NamedCheck ("Descheduler" , healthz .PingHealthz .Check ))
89
-
90
- stoppedCh , _ , err := secureServing .Serve (pathRecorderMux , 0 , ctx .Done ())
91
- if err != nil {
92
- klog .Fatalf ("failed to start secure server: %v" , err )
93
- return err
94
- }
95
-
96
- if err = Run (ctx , s ); err != nil {
97
- klog .ErrorS (err , "descheduler server" )
74
+ if err = Run (cmd .Context (), s ); err != nil {
75
+ klog .ErrorS (err , "failed to run descheduler server" )
98
76
return err
99
77
}
100
78
101
- done ()
102
- // wait for metrics server to close
103
- <- stoppedCh
104
-
105
79
return nil
106
80
},
107
81
}
@@ -115,12 +89,30 @@ func NewDeschedulerCommand(out io.Writer) *cobra.Command {
115
89
return cmd
116
90
}
117
91
118
- func Run ( ctx context. Context , rs * options.DeschedulerServer ) error {
92
+ func Apply ( rs * options.DeschedulerServer ) error {
119
93
err := features .DefaultMutableFeatureGate .SetFromMap (rs .FeatureGates )
120
94
if err != nil {
121
95
return err
122
96
}
123
97
rs .DefaultFeatureGates = features .DefaultMutableFeatureGate
98
+ return nil
99
+ }
100
+
101
+ func Run (rootCtx context.Context , rs * options.DeschedulerServer ) error {
102
+ ctx , done := signal .NotifyContext (rootCtx , syscall .SIGINT , syscall .SIGTERM )
103
+
104
+ pathRecorderMux := mux .NewPathRecorderMux ("descheduler" )
105
+ if ! rs .DisableMetrics {
106
+ pathRecorderMux .Handle ("/metrics" , legacyregistry .HandlerWithReset ())
107
+ }
108
+
109
+ healthz .InstallHandler (pathRecorderMux , healthz .NamedCheck ("Descheduler" , healthz .PingHealthz .Check ))
110
+
111
+ stoppedCh , _ , err := rs .SecureServingInfo .Serve (pathRecorderMux , 0 , ctx .Done ())
112
+ if err != nil {
113
+ klog .Fatalf ("failed to start secure server: %v" , err )
114
+ return err
115
+ }
124
116
125
117
err = tracing .NewTracerProvider (ctx , rs .Tracing .CollectorEndpoint , rs .Tracing .TransportCert , rs .Tracing .ServiceName , rs .Tracing .ServiceNamespace , rs .Tracing .SampleRate , rs .Tracing .FallbackToNoOpProviderOnError )
126
118
if err != nil {
@@ -131,5 +123,14 @@ func Run(ctx context.Context, rs *options.DeschedulerServer) error {
131
123
// increase the fake watch channel so the dry-run mode can be run
132
124
// over a cluster with thousands of pods
133
125
watch .DefaultChanSize = 100000
134
- return descheduler .Run (ctx , rs )
126
+ err = descheduler .Run (ctx , rs )
127
+ if err != nil {
128
+ return err
129
+ }
130
+
131
+ done ()
132
+ // wait for metrics server to close
133
+ <- stoppedCh
134
+
135
+ return nil
135
136
}
0 commit comments