From 60c5ab8f0950282fbfb6bdf1b5515740e3b441e9 Mon Sep 17 00:00:00 2001 From: Zhonghu Xu Date: Fri, 28 Feb 2025 10:40:21 +0800 Subject: [PATCH 1/8] Add filter to pod redconciler --- pkg/epp/controller/pod_reconciler.go | 16 ++++++++++------ pkg/epp/server/runserver.go | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/pkg/epp/controller/pod_reconciler.go b/pkg/epp/controller/pod_reconciler.go index 717d9f60e..a461c0991 100644 --- a/pkg/epp/controller/pod_reconciler.go +++ b/pkg/epp/controller/pod_reconciler.go @@ -22,12 +22,12 @@ import ( "github.com/go-logr/logr" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/datastore" logutil "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/logging" ) @@ -35,19 +35,19 @@ import ( type PodReconciler struct { client.Client Datastore datastore.Datastore - Scheme *runtime.Scheme + // namespace of the InferencePool + // we donot support cross namespace pod selection + Namespace string Record record.EventRecorder } func (c *PodReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { logger := log.FromContext(ctx) - inferencePool, err := c.Datastore.PoolGet() + _, err := c.Datastore.PoolGet() if err != nil { logger.V(logutil.TRACE).Info("Skipping reconciling Pod because the InferencePool is not available yet", "error", err) // When the inferencePool is initialized it lists the appropriate pods and populates the datastore, so no need to requeue. return ctrl.Result{}, nil - } else if inferencePool.Namespace != req.Namespace { - return ctrl.Result{}, nil } logger.V(logutil.VERBOSE).Info("Pod being reconciled", "name", req.NamespacedName) @@ -67,8 +67,12 @@ func (c *PodReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.R } func (c *PodReconciler) SetupWithManager(mgr ctrl.Manager) error { + // Filter specific inference pool + p := predicate.NewPredicateFuncs(func(object client.Object) bool { + return object.GetNamespace() == c.Namespace + }) return ctrl.NewControllerManagedBy(mgr). - For(&corev1.Pod{}). + For(&corev1.Pod{}).WithEventFilter(p). Complete(c) } diff --git a/pkg/epp/server/runserver.go b/pkg/epp/server/runserver.go index f3d9b6ac0..10d3606ea 100644 --- a/pkg/epp/server/runserver.go +++ b/pkg/epp/server/runserver.go @@ -115,8 +115,8 @@ func (r *ExtProcServerRunner) SetupWithManager(ctx context.Context, mgr ctrl.Man if err := (&controller.PodReconciler{ Datastore: r.Datastore, - Scheme: mgr.GetScheme(), Client: mgr.GetClient(), + Namespace: r.PoolNamespace, Record: mgr.GetEventRecorderFor("pod"), }).SetupWithManager(mgr); err != nil { return fmt.Errorf("failed setting up EndpointSliceReconciler: %v", err) From 1f5a46d60dc4c0d038ad958e84b33ad6ca7d814c Mon Sep 17 00:00:00 2001 From: Zhonghu Xu Date: Mon, 3 Mar 2025 16:07:18 +0800 Subject: [PATCH 2/8] use poolHasSynced --- pkg/epp/controller/pod_reconciler.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/epp/controller/pod_reconciler.go b/pkg/epp/controller/pod_reconciler.go index a461c0991..1a8e34fc8 100644 --- a/pkg/epp/controller/pod_reconciler.go +++ b/pkg/epp/controller/pod_reconciler.go @@ -43,9 +43,8 @@ type PodReconciler struct { func (c *PodReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { logger := log.FromContext(ctx) - _, err := c.Datastore.PoolGet() - if err != nil { - logger.V(logutil.TRACE).Info("Skipping reconciling Pod because the InferencePool is not available yet", "error", err) + if !c.Datastore.PoolHasSynced() { + logger.V(logutil.TRACE).Info("Skipping reconciling Pod because the InferencePool is not available yet") // When the inferencePool is initialized it lists the appropriate pods and populates the datastore, so no need to requeue. return ctrl.Result{}, nil } From a40a8210048f047b767fe69d80b75dde35f8773e Mon Sep 17 00:00:00 2001 From: Zhonghu Xu Date: Mon, 3 Mar 2025 16:21:58 +0800 Subject: [PATCH 3/8] filter using server-side namespace filter --- cmd/epp/main.go | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/cmd/epp/main.go b/cmd/epp/main.go index ab270c49a..d3a10337c 100644 --- a/cmd/epp/main.go +++ b/cmd/epp/main.go @@ -30,12 +30,15 @@ import ( "go.uber.org/zap/zapcore" "google.golang.org/grpc" healthPb "google.golang.org/grpc/health/grpc_health_v1" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" "k8s.io/component-base/metrics/legacyregistry" ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/cache" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log/zap" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/metrics/filters" @@ -140,7 +143,28 @@ func run() error { return err } - mgr, err := ctrl.NewManager(cfg, ctrl.Options{Scheme: scheme}) + mgr, err := ctrl.NewManager(cfg, ctrl.Options{ + Scheme: scheme, + Cache: cache.Options{ + ByObject: map[client.Object]cache.ByObject{ + &corev1.Pod{}: { + Namespaces: map[string]cache.Config{ + *poolNamespace: {}, + }, + }, + &v1alpha2.InferencePool{}: { + Namespaces: map[string]cache.Config{ + *poolNamespace: {}, + }, + }, + &v1alpha2.InferenceModel{}: { + Namespaces: map[string]cache.Config{ + *poolNamespace: {}, + }, + }, + }, + }, + }) if err != nil { setupLog.Error(err, "Failed to create controller manager", "config", cfg) return err From bd84a33b9afe546a8ecdff6f6dd5a2bcf26f176e Mon Sep 17 00:00:00 2001 From: Zhonghu Xu Date: Mon, 3 Mar 2025 16:26:09 +0800 Subject: [PATCH 4/8] update object filter --- cmd/epp/main.go | 7 ++++++- pkg/epp/controller/inferencemodel_reconciler.go | 2 +- pkg/epp/controller/inferencepool_reconciler.go | 4 ---- pkg/epp/controller/pod_reconciler.go | 7 +------ 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/cmd/epp/main.go b/cmd/epp/main.go index d3a10337c..03878d6e6 100644 --- a/cmd/epp/main.go +++ b/cmd/epp/main.go @@ -31,6 +31,7 @@ import ( "google.golang.org/grpc" healthPb "google.golang.org/grpc/health/grpc_health_v1" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" @@ -154,7 +155,11 @@ func run() error { }, &v1alpha2.InferencePool{}: { Namespaces: map[string]cache.Config{ - *poolNamespace: {}, + *poolNamespace: { + FieldSelector: fields.SelectorFromSet(fields.Set{ + "metadata.name": *poolName, + }), + }, }, }, &v1alpha2.InferenceModel{}: { diff --git a/pkg/epp/controller/inferencemodel_reconciler.go b/pkg/epp/controller/inferencemodel_reconciler.go index 8318324ff..bded83c83 100644 --- a/pkg/epp/controller/inferencemodel_reconciler.go +++ b/pkg/epp/controller/inferencemodel_reconciler.go @@ -128,5 +128,5 @@ func (c *InferenceModelReconciler) SetupWithManager(ctx context.Context, mgr ctr } func (c *InferenceModelReconciler) eventPredicate(infModel *v1alpha2.InferenceModel) bool { - return (infModel.Spec.PoolRef.Name == v1alpha2.ObjectName(c.PoolNamespacedName.Name)) && (infModel.GetNamespace() == c.PoolNamespacedName.Namespace) + return infModel.Spec.PoolRef.Name == c.PoolNamespacedName.Name } diff --git a/pkg/epp/controller/inferencepool_reconciler.go b/pkg/epp/controller/inferencepool_reconciler.go index 2ad7d2bbc..8e7e545e9 100644 --- a/pkg/epp/controller/inferencepool_reconciler.go +++ b/pkg/epp/controller/inferencepool_reconciler.go @@ -27,7 +27,6 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/gateway-api-inference-extension/api/v1alpha2" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/datastore" logutil "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/logging" @@ -90,8 +89,5 @@ func (c *InferencePoolReconciler) updateDatastore(ctx context.Context, newPool * func (c *InferencePoolReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). For(&v1alpha2.InferencePool{}). - WithEventFilter(predicate.NewPredicateFuncs(func(object client.Object) bool { - return (object.GetNamespace() == c.PoolNamespacedName.Namespace) && (object.GetName() == c.PoolNamespacedName.Name) - })). Complete(c) } diff --git a/pkg/epp/controller/pod_reconciler.go b/pkg/epp/controller/pod_reconciler.go index 1a8e34fc8..55c2e9d97 100644 --- a/pkg/epp/controller/pod_reconciler.go +++ b/pkg/epp/controller/pod_reconciler.go @@ -27,7 +27,6 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/datastore" logutil "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/logging" ) @@ -66,12 +65,8 @@ func (c *PodReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.R } func (c *PodReconciler) SetupWithManager(mgr ctrl.Manager) error { - // Filter specific inference pool - p := predicate.NewPredicateFuncs(func(object client.Object) bool { - return object.GetNamespace() == c.Namespace - }) return ctrl.NewControllerManagedBy(mgr). - For(&corev1.Pod{}).WithEventFilter(p). + For(&corev1.Pod{}). Complete(c) } From 20e532504fa568f4dc5490c08e1143346e327329 Mon Sep 17 00:00:00 2001 From: Zhonghu Xu Date: Mon, 3 Mar 2025 17:47:42 +0800 Subject: [PATCH 5/8] update --- pkg/epp/controller/inferencemodel_reconciler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/epp/controller/inferencemodel_reconciler.go b/pkg/epp/controller/inferencemodel_reconciler.go index bded83c83..9fd5d13ba 100644 --- a/pkg/epp/controller/inferencemodel_reconciler.go +++ b/pkg/epp/controller/inferencemodel_reconciler.go @@ -128,5 +128,5 @@ func (c *InferenceModelReconciler) SetupWithManager(ctx context.Context, mgr ctr } func (c *InferenceModelReconciler) eventPredicate(infModel *v1alpha2.InferenceModel) bool { - return infModel.Spec.PoolRef.Name == c.PoolNamespacedName.Name + return string(infModel.Spec.PoolRef.Name) == c.PoolNamespacedName.Name } From 430ff7287a6a5c362f321a1aa88f4e820b52740d Mon Sep 17 00:00:00 2001 From: Zhonghu Xu Date: Tue, 4 Mar 2025 11:04:52 +0800 Subject: [PATCH 6/8] remove unused scheme and namespace --- pkg/epp/controller/inferencemodel_reconciler.go | 2 -- pkg/epp/controller/inferencemodel_reconciler_test.go | 1 - pkg/epp/controller/inferencepool_reconciler.go | 2 -- pkg/epp/controller/pod_reconciler.go | 3 --- pkg/epp/server/runserver.go | 3 --- 5 files changed, 11 deletions(-) diff --git a/pkg/epp/controller/inferencemodel_reconciler.go b/pkg/epp/controller/inferencemodel_reconciler.go index 9fd5d13ba..a7f365b79 100644 --- a/pkg/epp/controller/inferencemodel_reconciler.go +++ b/pkg/epp/controller/inferencemodel_reconciler.go @@ -21,7 +21,6 @@ import ( "fmt" "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" ctrl "sigs.k8s.io/controller-runtime" @@ -36,7 +35,6 @@ import ( type InferenceModelReconciler struct { client.Client - Scheme *runtime.Scheme Record record.EventRecorder Datastore datastore.Datastore PoolNamespacedName types.NamespacedName diff --git a/pkg/epp/controller/inferencemodel_reconciler_test.go b/pkg/epp/controller/inferencemodel_reconciler_test.go index d52779197..2ac5bb1e4 100644 --- a/pkg/epp/controller/inferencemodel_reconciler_test.go +++ b/pkg/epp/controller/inferencemodel_reconciler_test.go @@ -193,7 +193,6 @@ func TestInferenceModelReconciler(t *testing.T) { datastore := datastore.NewFakeDatastore(nil, test.modelsInStore, pool) reconciler := &InferenceModelReconciler{ Client: fakeClient, - Scheme: scheme, Record: record.NewFakeRecorder(10), Datastore: datastore, PoolNamespacedName: types.NamespacedName{Name: pool.Name, Namespace: pool.Namespace}, diff --git a/pkg/epp/controller/inferencepool_reconciler.go b/pkg/epp/controller/inferencepool_reconciler.go index 8e7e545e9..880aec8c8 100644 --- a/pkg/epp/controller/inferencepool_reconciler.go +++ b/pkg/epp/controller/inferencepool_reconciler.go @@ -21,7 +21,6 @@ import ( "reflect" "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" ctrl "sigs.k8s.io/controller-runtime" @@ -37,7 +36,6 @@ import ( // will have the proper controller that will create/manage objects on behalf of the server pool. type InferencePoolReconciler struct { client.Client - Scheme *runtime.Scheme Record record.EventRecorder PoolNamespacedName types.NamespacedName Datastore datastore.Datastore diff --git a/pkg/epp/controller/pod_reconciler.go b/pkg/epp/controller/pod_reconciler.go index 55c2e9d97..a6c897c2f 100644 --- a/pkg/epp/controller/pod_reconciler.go +++ b/pkg/epp/controller/pod_reconciler.go @@ -34,9 +34,6 @@ import ( type PodReconciler struct { client.Client Datastore datastore.Datastore - // namespace of the InferencePool - // we donot support cross namespace pod selection - Namespace string Record record.EventRecorder } diff --git a/pkg/epp/server/runserver.go b/pkg/epp/server/runserver.go index 10d3606ea..4c0a7e533 100644 --- a/pkg/epp/server/runserver.go +++ b/pkg/epp/server/runserver.go @@ -89,7 +89,6 @@ func (r *ExtProcServerRunner) SetupWithManager(ctx context.Context, mgr ctrl.Man // Create the controllers and register them with the manager if err := (&controller.InferencePoolReconciler{ Datastore: r.Datastore, - Scheme: mgr.GetScheme(), Client: mgr.GetClient(), PoolNamespacedName: types.NamespacedName{ Name: r.PoolName, @@ -102,7 +101,6 @@ func (r *ExtProcServerRunner) SetupWithManager(ctx context.Context, mgr ctrl.Man if err := (&controller.InferenceModelReconciler{ Datastore: r.Datastore, - Scheme: mgr.GetScheme(), Client: mgr.GetClient(), PoolNamespacedName: types.NamespacedName{ Name: r.PoolName, @@ -116,7 +114,6 @@ func (r *ExtProcServerRunner) SetupWithManager(ctx context.Context, mgr ctrl.Man if err := (&controller.PodReconciler{ Datastore: r.Datastore, Client: mgr.GetClient(), - Namespace: r.PoolNamespace, Record: mgr.GetEventRecorderFor("pod"), }).SetupWithManager(mgr); err != nil { return fmt.Errorf("failed setting up EndpointSliceReconciler: %v", err) From f057ffd3a6806b6f7509dc9dc4ed2ec37f54b9dd Mon Sep 17 00:00:00 2001 From: Zhonghu Xu Date: Tue, 4 Mar 2025 11:33:13 +0800 Subject: [PATCH 7/8] Move controller manager build function to pkg/epp/server so we can better test it --- cmd/epp/main.go | 43 +-------------- pkg/epp/server/controller_manager.go | 78 ++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 41 deletions(-) create mode 100644 pkg/epp/server/controller_manager.go diff --git a/cmd/epp/main.go b/cmd/epp/main.go index 03878d6e6..609e9e080 100644 --- a/cmd/epp/main.go +++ b/cmd/epp/main.go @@ -30,20 +30,12 @@ import ( "go.uber.org/zap/zapcore" "google.golang.org/grpc" healthPb "google.golang.org/grpc/health/grpc_health_v1" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/fields" - "k8s.io/apimachinery/pkg/runtime" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - clientgoscheme "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" "k8s.io/component-base/metrics/legacyregistry" ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/cache" - "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log/zap" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/metrics/filters" - "sigs.k8s.io/gateway-api-inference-extension/api/v1alpha2" "sigs.k8s.io/gateway-api-inference-extension/internal/runnable" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend/vllm" @@ -101,15 +93,9 @@ var ( "are assumed to be named tls.crt and tls.key, respectively. If not set, and secureServing is enabled, "+ "then a self-signed certificate is used.") - scheme = runtime.NewScheme() setupLog = ctrl.Log.WithName("setup") ) -func init() { - utilruntime.Must(clientgoscheme.AddToScheme(scheme)) - utilruntime.Must(v1alpha2.AddToScheme(scheme)) -} - func main() { if err := run(); err != nil { os.Exit(1) @@ -144,34 +130,9 @@ func run() error { return err } - mgr, err := ctrl.NewManager(cfg, ctrl.Options{ - Scheme: scheme, - Cache: cache.Options{ - ByObject: map[client.Object]cache.ByObject{ - &corev1.Pod{}: { - Namespaces: map[string]cache.Config{ - *poolNamespace: {}, - }, - }, - &v1alpha2.InferencePool{}: { - Namespaces: map[string]cache.Config{ - *poolNamespace: { - FieldSelector: fields.SelectorFromSet(fields.Set{ - "metadata.name": *poolName, - }), - }, - }, - }, - &v1alpha2.InferenceModel{}: { - Namespaces: map[string]cache.Config{ - *poolNamespace: {}, - }, - }, - }, - }, - }) + mgr, err := runserver.NewDefaultManager(*poolNamespace, *poolName) if err != nil { - setupLog.Error(err, "Failed to create controller manager", "config", cfg) + setupLog.Error(err, "Failed to create controller manager") return err } diff --git a/pkg/epp/server/controller_manager.go b/pkg/epp/server/controller_manager.go new file mode 100644 index 000000000..30f8c7051 --- /dev/null +++ b/pkg/epp/server/controller_manager.go @@ -0,0 +1,78 @@ +/* +Copyright 2025 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package server + +import ( + "fmt" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + clientgoscheme "k8s.io/client-go/kubernetes/scheme" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/cache" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/gateway-api-inference-extension/api/v1alpha2" +) + +var scheme = runtime.NewScheme() + +func init() { + utilruntime.Must(clientgoscheme.AddToScheme(scheme)) + utilruntime.Must(v1alpha2.AddToScheme(scheme)) +} + +// NewDefaultManager creates a new controller manager with default configuration. +func NewDefaultManager(namespace, name string) (ctrl.Manager, error) { + // Init runtime. + cfg, err := ctrl.GetConfig() + if err != nil { + return nil, fmt.Errorf("failed to create rest config: %v", err) + } + + manager, err := ctrl.NewManager(cfg, ctrl.Options{ + Scheme: scheme, + Cache: cache.Options{ + ByObject: map[client.Object]cache.ByObject{ + &corev1.Pod{}: { + Namespaces: map[string]cache.Config{ + namespace: {}, + }, + }, + &v1alpha2.InferencePool{}: { + Namespaces: map[string]cache.Config{ + namespace: { + FieldSelector: fields.SelectorFromSet(fields.Set{ + "metadata.name": name, + }), + }, + }, + }, + &v1alpha2.InferenceModel{}: { + Namespaces: map[string]cache.Config{ + namespace: {}, + }, + }, + }, + }, + }) + if err != nil { + return nil, fmt.Errorf("failed to create controller manager: %v", err) + } + return manager, nil +} From acb1f471bea67ee0878f38a9e5079033e1925bf9 Mon Sep 17 00:00:00 2001 From: Zhonghu Xu Date: Tue, 4 Mar 2025 15:44:13 +0800 Subject: [PATCH 8/8] Update integration test --- cmd/epp/main.go | 2 +- pkg/epp/server/controller_manager.go | 11 +++-------- test/integration/hermetic_test.go | 4 +++- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/cmd/epp/main.go b/cmd/epp/main.go index 609e9e080..5b350bb28 100644 --- a/cmd/epp/main.go +++ b/cmd/epp/main.go @@ -130,7 +130,7 @@ func run() error { return err } - mgr, err := runserver.NewDefaultManager(*poolNamespace, *poolName) + mgr, err := runserver.NewDefaultManager(*poolNamespace, *poolName, cfg) if err != nil { setupLog.Error(err, "Failed to create controller manager") return err diff --git a/pkg/epp/server/controller_manager.go b/pkg/epp/server/controller_manager.go index 30f8c7051..fd505d002 100644 --- a/pkg/epp/server/controller_manager.go +++ b/pkg/epp/server/controller_manager.go @@ -24,6 +24,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/client" @@ -38,14 +39,8 @@ func init() { } // NewDefaultManager creates a new controller manager with default configuration. -func NewDefaultManager(namespace, name string) (ctrl.Manager, error) { - // Init runtime. - cfg, err := ctrl.GetConfig() - if err != nil { - return nil, fmt.Errorf("failed to create rest config: %v", err) - } - - manager, err := ctrl.NewManager(cfg, ctrl.Options{ +func NewDefaultManager(namespace, name string, restConfig *rest.Config) (ctrl.Manager, error) { + manager, err := ctrl.NewManager(restConfig, ctrl.Options{ Scheme: scheme, Cache: cache.Options{ ByObject: map[client.Object]cache.ByObject{ diff --git a/test/integration/hermetic_test.go b/test/integration/hermetic_test.go index 7755795b0..4454733c7 100644 --- a/test/integration/hermetic_test.go +++ b/test/integration/hermetic_test.go @@ -58,6 +58,7 @@ import ( "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/datastore" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/metrics" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/server" runserver "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/server" extprocutils "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/test" logutil "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/logging" @@ -490,7 +491,8 @@ func BeforeSuit(t *testing.T) func() { // Init runtime. ctrl.SetLogger(logger) - mgr, err := ctrl.NewManager(cfg, ctrl.Options{Scheme: scheme}) + + mgr, err := server.NewDefaultManager("default", "vllm-llama2-7b-pool", cfg) if err != nil { logutil.Fatal(logger, err, "Failed to create controller manager") }