@@ -19,30 +19,25 @@ package main
19
19
import (
20
20
"flag"
21
21
"fmt"
22
- "net"
23
- "net/http"
24
22
"os"
25
- "strconv"
26
23
27
24
"github.com/go-logr/logr"
28
- "github.com/prometheus/client_golang/prometheus/promhttp"
29
25
uberzap "go.uber.org/zap"
30
26
"go.uber.org/zap/zapcore"
31
27
"google.golang.org/grpc"
32
28
healthPb "google.golang.org/grpc/health/grpc_health_v1"
33
29
"k8s.io/apimachinery/pkg/types"
34
- "k8s.io/client-go/rest"
35
- "k8s.io/component-base/metrics/legacyregistry"
36
30
ctrl "sigs.k8s.io/controller-runtime"
37
31
"sigs.k8s.io/controller-runtime/pkg/log"
38
32
"sigs.k8s.io/controller-runtime/pkg/log/zap"
39
33
"sigs.k8s.io/controller-runtime/pkg/manager"
40
34
"sigs.k8s.io/controller-runtime/pkg/metrics/filters"
35
+ metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
36
+
41
37
"sigs.k8s.io/gateway-api-inference-extension/internal/runnable"
42
38
backendmetrics "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend/metrics"
43
39
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/datastore"
44
40
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/metrics"
45
- "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/metrics/collectors"
46
41
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling"
47
42
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins"
48
43
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/plugins/filter"
@@ -54,10 +49,6 @@ import (
54
49
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/logging"
55
50
)
56
51
57
- const (
58
- defaultMetricsEndpoint = "/metrics"
59
- )
60
-
61
52
var (
62
53
grpcPort = flag .Int (
63
54
"grpcPort" ,
67
58
"grpcHealthPort" ,
68
59
9003 ,
69
60
"The port used for gRPC liveness and readiness probes" )
70
- metricsPort = flag .Int (
71
- "metricsPort" , 9090 , "The metrics port" )
61
+ metricsAddr = flag .String ("metrics-bind-address" , ":9090" , "The address the metric endpoint binds to." )
72
62
destinationEndpointHintKey = flag .String (
73
63
"destinationEndpointHintKey" ,
74
64
runserver .DefaultDestinationEndpointHintKey ,
@@ -168,7 +158,18 @@ func run() error {
168
158
Name : * poolName ,
169
159
Namespace : * poolNamespace ,
170
160
}
171
- mgr , err := runserver .NewDefaultManager (poolNamespacedName , cfg )
161
+ metrics .Register ()
162
+ // Register metrics handler.
163
+ // Metrics endpoint is enabled in 'config/default/kustomization.yaml'. The Metrics options configure the server.
164
+ // More info:
165
+ // - https://pkg.go.dev/sigs.k8s.io/[email protected] /pkg/metrics/server
166
+ // - https://book.kubebuilder.io/reference/metrics.html
167
+ metricsServerOptions := metricsserver.Options {
168
+ BindAddress : * metricsAddr ,
169
+ FilterProvider : filters .WithAuthenticationAndAuthorization ,
170
+ }
171
+
172
+ mgr , err := runserver .NewDefaultManager (poolNamespacedName , cfg , metricsServerOptions )
172
173
if err != nil {
173
174
setupLog .Error (err , "Failed to create controller manager" )
174
175
return err
@@ -242,11 +243,6 @@ func run() error {
242
243
return err
243
244
}
244
245
245
- // Register metrics handler.
246
- if err := registerMetricsHandler (mgr , * metricsPort , cfg , datastore ); err != nil {
247
- return err
248
- }
249
-
250
246
// Start the manager. This blocks until a signal is received.
251
247
setupLog .Info ("Controller manager starting" )
252
248
if err := mgr .Start (ctx ); err != nil {
@@ -290,62 +286,6 @@ func registerHealthServer(mgr manager.Manager, logger logr.Logger, ds datastore.
290
286
return nil
291
287
}
292
288
293
- // registerMetricsHandler adds the metrics HTTP handler as a Runnable to the given manager.
294
- func registerMetricsHandler (mgr manager.Manager , port int , cfg * rest.Config , ds datastore.Datastore ) error {
295
- metrics .Register ()
296
- legacyregistry .CustomMustRegister (collectors .NewInferencePoolMetricsCollector (ds ))
297
-
298
- metrics .RecordInferenceExtensionInfo ()
299
-
300
- // Init HTTP server.
301
- h , err := metricsHandlerWithAuthenticationAndAuthorization (cfg )
302
- if err != nil {
303
- return err
304
- }
305
-
306
- mux := http .NewServeMux ()
307
- mux .Handle (defaultMetricsEndpoint , h )
308
-
309
- srv := & http.Server {
310
- Addr : net .JoinHostPort ("" , strconv .Itoa (port )),
311
- Handler : mux ,
312
- }
313
-
314
- if err := mgr .Add (& manager.Server {
315
- Name : "metrics" ,
316
- Server : srv ,
317
- }); err != nil {
318
- setupLog .Error (err , "Failed to register metrics HTTP handler" )
319
- return err
320
- }
321
- return nil
322
- }
323
-
324
- func metricsHandlerWithAuthenticationAndAuthorization (cfg * rest.Config ) (http.Handler , error ) {
325
- h := promhttp .HandlerFor (
326
- legacyregistry .DefaultGatherer ,
327
- promhttp.HandlerOpts {},
328
- )
329
- httpClient , err := rest .HTTPClientFor (cfg )
330
- if err != nil {
331
- setupLog .Error (err , "Failed to create http client for metrics auth" )
332
- return nil , err
333
- }
334
-
335
- filter , err := filters .WithAuthenticationAndAuthorization (cfg , httpClient )
336
- if err != nil {
337
- setupLog .Error (err , "Failed to create metrics filter for auth" )
338
- return nil , err
339
- }
340
- metricsLogger := ctrl .Log .WithName ("metrics" ).WithValues ("path" , defaultMetricsEndpoint )
341
- metricsAuthHandler , err := filter (metricsLogger , h )
342
- if err != nil {
343
- setupLog .Error (err , "Failed to create metrics auth handler" )
344
- return nil , err
345
- }
346
- return metricsAuthHandler , nil
347
- }
348
-
349
289
func validateFlags () error {
350
290
if * poolName == "" {
351
291
return fmt .Errorf ("required %q flag not set" , "poolName" )
0 commit comments