@@ -20,7 +20,6 @@ import (
20
20
"inference.networking.x-k8s.io/gateway-api-inference-extension/pkg/ext-proc/metrics"
21
21
"inference.networking.x-k8s.io/gateway-api-inference-extension/pkg/ext-proc/scheduling"
22
22
"k8s.io/apimachinery/pkg/runtime"
23
- "k8s.io/apimachinery/pkg/types"
24
23
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
25
24
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
26
25
"k8s.io/client-go/rest"
@@ -103,56 +102,26 @@ func main() {
103
102
})
104
103
klog .Info (flags )
105
104
106
- // Create a new manager to manage controllers
107
- mgr , err := ctrl .NewManager (ctrl .GetConfigOrDie (), ctrl.Options {Scheme : scheme })
108
- if err != nil {
109
- klog .Fatalf ("Failed to create controller manager: %v" , err )
110
- }
111
-
112
- // Create the data store used to cache watched resources
113
105
datastore := backend .NewK8sDataStore ()
114
106
115
- // Create the controllers and register them with the manager
116
- if err := (& backend.InferencePoolReconciler {
117
- Datastore : datastore ,
118
- Scheme : mgr .GetScheme (),
119
- Client : mgr .GetClient (),
120
- PoolNamespacedName : types.NamespacedName {
121
- Name : * poolName ,
122
- Namespace : * poolNamespace ,
123
- },
124
- Record : mgr .GetEventRecorderFor ("InferencePool" ),
125
- }).SetupWithManager (mgr ); err != nil {
126
- klog .Fatalf ("Failed setting up InferencePoolReconciler: %v" , err )
127
- }
128
-
129
- if err := (& backend.InferenceModelReconciler {
130
- Datastore : datastore ,
131
- Scheme : mgr .GetScheme (),
132
- Client : mgr .GetClient (),
133
- PoolNamespacedName : types.NamespacedName {
134
- Name : * poolName ,
135
- Namespace : * poolNamespace ,
136
- },
137
- Record : mgr .GetEventRecorderFor ("InferenceModel" ),
138
- }).SetupWithManager (mgr ); err != nil {
139
- klog .Fatalf ("Failed setting up InferenceModelReconciler: %v" , err )
140
- }
141
-
142
- if err := (& backend.EndpointSliceReconciler {
143
- Datastore : datastore ,
144
- Scheme : mgr .GetScheme (),
145
- Client : mgr .GetClient (),
146
- Record : mgr .GetEventRecorderFor ("endpointslice" ),
147
- ServiceName : * serviceName ,
148
- Zone : * zone ,
149
- }).SetupWithManager (mgr ); err != nil {
150
- klog .Fatalf ("Failed setting up EndpointSliceReconciler: %v" , err )
107
+ runner := & runserver.ExtProcServerRunner {
108
+ GrpcPort : * grpcPort ,
109
+ TargetPodHeader : * targetPodHeader ,
110
+ PoolName : * poolName ,
111
+ PoolNamespace : * poolNamespace ,
112
+ ServiceName : * serviceName ,
113
+ Zone : * zone ,
114
+ RefreshPodsInterval : * refreshPodsInterval ,
115
+ RefreshMetricsInterval : * refreshMetricsInterval ,
116
+ Scheme : scheme ,
117
+ Config : ctrl .GetConfigOrDie (),
118
+ Datastore : datastore ,
151
119
}
120
+ runner .Setup ()
152
121
153
122
// Start health and ext-proc servers in goroutines
154
123
healthSvr := startHealthServer (datastore , * grpcHealthPort )
155
- extProcSvr := startExternalProcessorServer (
124
+ extProcSvr := runner . Start (
156
125
datastore ,
157
126
* grpcPort ,
158
127
* refreshPodsInterval ,
@@ -289,6 +258,51 @@ func metricsHandlerWithAuthenticationAndAuthorization(cfg *rest.Config) http.Han
289
258
return metricsAuthHandler
290
259
}
291
260
261
+ func startMetricsHandler (port int , cfg * rest.Config ) * http.Server {
262
+ metrics .Register ()
263
+
264
+ var svr * http.Server
265
+ go func () {
266
+ klog .Info ("Starting metrics HTTP handler ..." )
267
+
268
+ mux := http .NewServeMux ()
269
+ mux .Handle (defaultMetricsEndpoint , metricsHandlerWithAuthenticationAndAuthorization (cfg ))
270
+
271
+ svr = & http.Server {
272
+ Addr : net .JoinHostPort ("" , strconv .Itoa (port )),
273
+ Handler : mux ,
274
+ }
275
+ if err := svr .ListenAndServe (); err != http .ErrServerClosed {
276
+ klog .Fatalf ("failed to start metrics HTTP handler: %v" , err )
277
+ }
278
+ }()
279
+ return svr
280
+ }
281
+
282
+ func metricsHandlerWithAuthenticationAndAuthorization (cfg * rest.Config ) http.Handler {
283
+ h := promhttp .HandlerFor (
284
+ legacyregistry .DefaultGatherer ,
285
+ promhttp.HandlerOpts {},
286
+ )
287
+ httpClient , err := rest .HTTPClientFor (cfg )
288
+ if err != nil {
289
+ klog .Fatalf ("failed to create http client for metrics auth: %v" , err )
290
+ }
291
+
292
+ filter , err := filters .WithAuthenticationAndAuthorization (cfg , httpClient )
293
+ if err != nil {
294
+ klog .Fatalf ("failed to create metrics filter for auth: %v" , err )
295
+ }
296
+ metricsLogger := klog .LoggerWithValues (klog .NewKlogr (), "path" , defaultMetricsEndpoint )
297
+ metricsAuthHandler , err := filter (metricsLogger , h )
298
+ if err != nil {
299
+ klog .Fatalf ("failed to create metrics auth handler: %v" , err )
300
+ }
301
+ return metricsAuthHandler
302
+ }
303
+
304
+ == == == =
305
+ >> >> >> > ad32d85 (Add updated hermetic test with k8s client API , these pull from example object yamls .)
292
306
func validateFlags () error {
293
307
if * poolName == "" {
294
308
return fmt .Errorf ("required %q flag not set" , "poolName" )
0 commit comments