Skip to content

Commit f53cf42

Browse files
committed
Move manager from runserver to main
The manager setup logic is now moved to main. runserver package does not manage the manager any more. This establishes a clear separation of concerns.
1 parent 0662f1f commit f53cf42

File tree

3 files changed

+36
-49
lines changed

3 files changed

+36
-49
lines changed

pkg/ext-proc/main.go

+23-11
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,6 @@ func run() error {
103103
flag.Parse()
104104
initLogging(&opts)
105105

106-
cfg, err := ctrl.GetConfig()
107-
if err != nil {
108-
klog.ErrorS(err, "Failed to get rest config")
109-
return err
110-
}
111106
// Validate flags
112107
if err := validateFlags(); err != nil {
113108
klog.ErrorS(err, "Failed to validate flags")
@@ -123,6 +118,20 @@ func run() error {
123118

124119
datastore := backend.NewK8sDataStore()
125120

121+
// Init runtime.
122+
cfg, err := ctrl.GetConfig()
123+
if err != nil {
124+
klog.ErrorS(err, "Failed to get rest config")
125+
return err
126+
}
127+
128+
mgr, err := ctrl.NewManager(cfg, ctrl.Options{Scheme: scheme})
129+
if err != nil {
130+
klog.ErrorS(err, "Failed to create controller manager", "config", cfg)
131+
return err
132+
}
133+
134+
// Setup runner.
126135
serverRunner := &runserver.ExtProcServerRunner{
127136
GrpcPort: *grpcPort,
128137
TargetEndpointKey: *targetEndpointKey,
@@ -133,15 +142,12 @@ func run() error {
133142
RefreshPodsInterval: *refreshPodsInterval,
134143
RefreshMetricsInterval: *refreshMetricsInterval,
135144
RefreshPrometheusMetricsInterval: *refreshPrometheusMetricsInterval,
136-
Scheme: scheme,
137-
Config: ctrl.GetConfigOrDie(),
138145
Datastore: datastore,
139146
}
140-
if err := serverRunner.Setup(); err != nil {
147+
if err := serverRunner.SetupWithManager(mgr); err != nil {
141148
klog.ErrorS(err, "Failed to setup ext-proc server")
142149
return err
143150
}
144-
mgr := serverRunner.Manager
145151

146152
// Register health server.
147153
if err := registerHealthServer(mgr, datastore, *grpcHealthPort); err != nil {
@@ -159,8 +165,14 @@ func run() error {
159165
return err
160166
}
161167

162-
// Start the manager.
163-
return serverRunner.StartManager(ctrl.SetupSignalHandler())
168+
// Start the manager. This blocks until a signal is received.
169+
klog.InfoS("Controller manager starting")
170+
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
171+
klog.ErrorS(err, "Error starting controller manager")
172+
return err
173+
}
174+
klog.InfoS("Controller manager terminated")
175+
return nil
164176
}
165177

166178
func initLogging(opts *zap.Options) {

pkg/ext-proc/server/runserver.go

+3-33
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@ package server
22

33
import (
44
"context"
5-
"errors"
65
"fmt"
76
"time"
87

98
extProcPb "github.com/envoyproxy/go-control-plane/envoy/service/ext_proc/v3"
109
"google.golang.org/grpc"
11-
"k8s.io/apimachinery/pkg/runtime"
1210
"k8s.io/apimachinery/pkg/types"
13-
"k8s.io/client-go/rest"
1411
klog "k8s.io/klog/v2"
1512
ctrl "sigs.k8s.io/controller-runtime"
1613
"sigs.k8s.io/controller-runtime/pkg/manager"
@@ -31,10 +28,7 @@ type ExtProcServerRunner struct {
3128
RefreshPodsInterval time.Duration
3229
RefreshMetricsInterval time.Duration
3330
RefreshPrometheusMetricsInterval time.Duration
34-
Scheme *runtime.Scheme
35-
Config *rest.Config
3631
Datastore *backend.K8sDatastore
37-
Manager ctrl.Manager
3832
}
3933

4034
// Default values for CLI flags in main
@@ -61,19 +55,12 @@ func NewDefaultExtProcServerRunner() *ExtProcServerRunner {
6155
RefreshPodsInterval: DefaultRefreshPodsInterval,
6256
RefreshMetricsInterval: DefaultRefreshMetricsInterval,
6357
RefreshPrometheusMetricsInterval: DefaultRefreshPrometheusMetricsInterval,
64-
// Scheme, Config, and Datastore can be assigned later.
58+
// Datastore can be assigned later.
6559
}
6660
}
6761

68-
// Setup creates the reconcilers for pools, models, and endpointSlices and starts the manager.
69-
func (r *ExtProcServerRunner) Setup() error {
70-
// Create a new manager to manage controllers
71-
mgr, err := ctrl.NewManager(r.Config, ctrl.Options{Scheme: r.Scheme})
72-
if err != nil {
73-
return fmt.Errorf("failed to create controller manager: %w", err)
74-
}
75-
r.Manager = mgr
76-
62+
// SetupWithManager sets up the runner with the given manager.
63+
func (r *ExtProcServerRunner) SetupWithManager(mgr ctrl.Manager) error {
7764
// Create the controllers and register them with the manager
7865
if err := (&backend.InferencePoolReconciler{
7966
Datastore: r.Datastore,
@@ -139,20 +126,3 @@ func (r *ExtProcServerRunner) AsRunnable(
139126
return runnable.GRPCServer("ext-proc", srv, r.GrpcPort).Start(ctx)
140127
}))
141128
}
142-
143-
func (r *ExtProcServerRunner) StartManager(ctx context.Context) error {
144-
if r.Manager == nil {
145-
err := errors.New("runner manager is not set")
146-
klog.ErrorS(err, "Runner has no manager setup to run")
147-
return err
148-
}
149-
150-
// Start the controller manager. Blocking and will return when shutdown is complete.
151-
klog.InfoS("Controller manager starting")
152-
if err := r.Manager.Start(ctx); err != nil {
153-
klog.ErrorS(err, "Error starting controller manager")
154-
return err
155-
}
156-
klog.InfoS("Controller manager terminated")
157-
return nil
158-
}

test/integration/hermetic_test.go

+10-5
Original file line numberDiff line numberDiff line change
@@ -468,20 +468,25 @@ func BeforeSuit() {
468468
log.Fatalf("No error, but returned kubernetes client is nil, cfg: %v", cfg)
469469
}
470470

471+
// Init runtime.
472+
mgr, err := ctrl.NewManager(cfg, ctrl.Options{Scheme: scheme})
473+
if err != nil {
474+
klog.ErrorS(err, "Failed to create controller manager")
475+
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
476+
}
477+
471478
serverRunner = runserver.NewDefaultExtProcServerRunner()
472479
// Adjust from defaults
473480
serverRunner.PoolName = "vllm-llama2-7b-pool"
474-
serverRunner.Scheme = scheme
475-
serverRunner.Config = cfg
476481
serverRunner.Datastore = backend.NewK8sDataStore()
477482

478-
if err := serverRunner.Setup(); err != nil {
479-
log.Fatalf("Failed to start server runner: %v", err)
483+
if err := serverRunner.SetupWithManager(mgr); err != nil {
484+
log.Fatalf("Failed to setup server runner: %v", err)
480485
}
481486

482487
// Start the controller manager in go routine, not blocking
483488
go func() {
484-
if err := serverRunner.StartManager(ctrl.SetupSignalHandler()); err != nil {
489+
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
485490
log.Fatalf("Failed to start manager: %v", err)
486491
}
487492
}()

0 commit comments

Comments
 (0)