Skip to content

Commit b6d9d47

Browse files
tchapcoolkp
authored andcommitted
Move manager from runserver to main (#331)
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 1f0b1bb commit b6d9d47

File tree

3 files changed

+35
-48
lines changed

3 files changed

+35
-48
lines changed

pkg/ext-proc/main.go

+23-11
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,6 @@ func run() error {
9595
flag.Parse()
9696
initLogging(&opts)
9797

98-
cfg, err := ctrl.GetConfig()
99-
if err != nil {
100-
klog.ErrorS(err, "Failed to get rest config")
101-
return err
102-
}
10398
// Validate flags
10499
if err := validateFlags(); err != nil {
105100
klog.ErrorS(err, "Failed to validate flags")
@@ -115,6 +110,20 @@ func run() error {
115110

116111
datastore := backend.NewK8sDataStore()
117112

113+
// Init runtime.
114+
cfg, err := ctrl.GetConfig()
115+
if err != nil {
116+
klog.ErrorS(err, "Failed to get rest config")
117+
return err
118+
}
119+
120+
mgr, err := ctrl.NewManager(cfg, ctrl.Options{Scheme: scheme})
121+
if err != nil {
122+
klog.ErrorS(err, "Failed to create controller manager", "config", cfg)
123+
return err
124+
}
125+
126+
// Setup runner.
118127
serverRunner := &runserver.ExtProcServerRunner{
119128
GrpcPort: *grpcPort,
120129
TargetEndpointKey: *targetEndpointKey,
@@ -123,15 +132,12 @@ func run() error {
123132
RefreshPodsInterval: *refreshPodsInterval,
124133
RefreshMetricsInterval: *refreshMetricsInterval,
125134
RefreshPrometheusMetricsInterval: *refreshPrometheusMetricsInterval,
126-
Scheme: scheme,
127-
Config: ctrl.GetConfigOrDie(),
128135
Datastore: datastore,
129136
}
130-
if err := serverRunner.Setup(); err != nil {
137+
if err := serverRunner.SetupWithManager(mgr); err != nil {
131138
klog.ErrorS(err, "Failed to setup ext-proc server")
132139
return err
133140
}
134-
mgr := serverRunner.Manager
135141

136142
// Register health server.
137143
if err := registerHealthServer(mgr, datastore, *grpcHealthPort); err != nil {
@@ -149,8 +155,14 @@ func run() error {
149155
return err
150156
}
151157

152-
// Start the manager.
153-
return serverRunner.StartManager(ctrl.SetupSignalHandler())
158+
// Start the manager. This blocks until a signal is received.
159+
klog.InfoS("Controller manager starting")
160+
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
161+
klog.ErrorS(err, "Error starting controller manager")
162+
return err
163+
}
164+
klog.InfoS("Controller manager terminated")
165+
return nil
154166
}
155167

156168
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"
@@ -29,10 +26,7 @@ type ExtProcServerRunner struct {
2926
RefreshPodsInterval time.Duration
3027
RefreshMetricsInterval time.Duration
3128
RefreshPrometheusMetricsInterval time.Duration
32-
Scheme *runtime.Scheme
33-
Config *rest.Config
3429
Datastore *backend.K8sDatastore
35-
Manager ctrl.Manager
3630
}
3731

3832
// Default values for CLI flags in main
@@ -55,19 +49,12 @@ func NewDefaultExtProcServerRunner() *ExtProcServerRunner {
5549
RefreshPodsInterval: DefaultRefreshPodsInterval,
5650
RefreshMetricsInterval: DefaultRefreshMetricsInterval,
5751
RefreshPrometheusMetricsInterval: DefaultRefreshPrometheusMetricsInterval,
58-
// Scheme, Config, and Datastore can be assigned later.
52+
// Datastore can be assigned later.
5953
}
6054
}
6155

62-
// Setup creates the reconcilers for pools, models, and endpointSlices and starts the manager.
63-
func (r *ExtProcServerRunner) Setup() error {
64-
// Create a new manager to manage controllers
65-
mgr, err := ctrl.NewManager(r.Config, ctrl.Options{Scheme: r.Scheme})
66-
if err != nil {
67-
return fmt.Errorf("failed to create controller manager: %w", err)
68-
}
69-
r.Manager = mgr
70-
56+
// SetupWithManager sets up the runner with the given manager.
57+
func (r *ExtProcServerRunner) SetupWithManager(mgr ctrl.Manager) error {
7158
// Create the controllers and register them with the manager
7259
if err := (&backend.InferencePoolReconciler{
7360
Datastore: r.Datastore,
@@ -131,20 +118,3 @@ func (r *ExtProcServerRunner) AsRunnable(
131118
return runnable.GRPCServer("ext-proc", srv, r.GrpcPort).Start(ctx)
132119
}))
133120
}
134-
135-
func (r *ExtProcServerRunner) StartManager(ctx context.Context) error {
136-
if r.Manager == nil {
137-
err := errors.New("runner manager is not set")
138-
klog.ErrorS(err, "Runner has no manager setup to run")
139-
return err
140-
}
141-
142-
// Start the controller manager. Blocking and will return when shutdown is complete.
143-
klog.InfoS("Controller manager starting")
144-
if err := r.Manager.Start(ctx); err != nil {
145-
klog.ErrorS(err, "Error starting controller manager")
146-
return err
147-
}
148-
klog.InfoS("Controller manager terminated")
149-
return nil
150-
}

test/integration/hermetic_test.go

+9-4
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 {
483+
if err := serverRunner.SetupWithManager(mgr); err != nil {
479484
log.Fatalf("Failed to start 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)