Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions test/e2e/router/e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ func TestModelRouteSimple(t *testing.T) {

// Deploy ModelRoute
t.Log("Deploying ModelRoute...")
modelRoute := utils.LoadYAMLFromFile[networkingv1alpha1.ModelRoute]("examples/kthena-router/ModelRouteSimple.yaml")
modelRoute := utils.LoadYAMLFromFile[networkingv1alpha1.ModelRoute]("test/e2e/router/testdata/kthena-router/ModelRouteSimple.yaml")
modelRoute.Namespace = testNamespace
createdModelRoute, err := testCtx.KthenaClient.NetworkingV1alpha1().ModelRoutes(testNamespace).Create(ctx, modelRoute, metav1.CreateOptions{})
require.NoError(t, err, "Failed to create ModelRoute")
Expand All @@ -125,7 +125,7 @@ func TestModelRouteSimple(t *testing.T) {
func TestModelRouteMultiModels(t *testing.T) {
ctx := context.Background()

modelRoute := utils.LoadYAMLFromFile[networkingv1alpha1.ModelRoute]("examples/kthena-router/ModelRouteMultiModels.yaml")
modelRoute := utils.LoadYAMLFromFile[networkingv1alpha1.ModelRoute]("test/e2e/router/testdata/kthena-router/ModelRouteMultiModels.yaml")
modelRoute.Namespace = testNamespace
createdModelRoute, err := testCtx.KthenaClient.NetworkingV1alpha1().ModelRoutes(testNamespace).Create(ctx, modelRoute, metav1.CreateOptions{})
require.NoError(t, err, "Failed to create ModelRoute")
Expand Down Expand Up @@ -190,7 +190,7 @@ func TestModelRoutePrefillDecodeDisaggregation(t *testing.T) {

// Deploy ModelServing
t.Log("Deploying ModelServing for PD disaggregation...")
modelServing := utils.LoadYAMLFromFile[workloadv1alpha1.ModelServing]("examples/kthena-router/ModelServing-ds1.5b-pd-disaggragation.yaml")
modelServing := utils.LoadYAMLFromFile[workloadv1alpha1.ModelServing]("test/e2e/router/testdata/kthena-router/ModelServing-ds1.5b-pd-disaggragation.yaml")
modelServing.Namespace = testNamespace
createdModelServing, err := testCtx.KthenaClient.WorkloadV1alpha1().ModelServings(testNamespace).Create(ctx, modelServing, metav1.CreateOptions{})
require.NoError(t, err, "Failed to create ModelServing")
Expand All @@ -211,7 +211,7 @@ func TestModelRoutePrefillDecodeDisaggregation(t *testing.T) {

// Deploy ModelServer
t.Log("Deploying ModelServer for PD disaggregation...")
modelServer := utils.LoadYAMLFromFile[networkingv1alpha1.ModelServer]("examples/kthena-router/ModelServer-ds1.5b-pd-disaggragation.yaml")
modelServer := utils.LoadYAMLFromFile[networkingv1alpha1.ModelServer]("test/e2e/router/testdata/kthena-router/ModelServer-ds1.5b-pd-disaggragation.yaml")
modelServer.Namespace = testNamespace
createdModelServer, err := testCtx.KthenaClient.NetworkingV1alpha1().ModelServers(testNamespace).Create(ctx, modelServer, metav1.CreateOptions{})
require.NoError(t, err, "Failed to create ModelServer")
Expand All @@ -229,7 +229,7 @@ func TestModelRoutePrefillDecodeDisaggregation(t *testing.T) {

// Deploy ModelRoute
t.Log("Deploying ModelRoute for PD disaggregation...")
modelRoute := utils.LoadYAMLFromFile[networkingv1alpha1.ModelRoute]("examples/kthena-router/ModelRoute-ds1.5b-pd-disaggragation.yaml")
modelRoute := utils.LoadYAMLFromFile[networkingv1alpha1.ModelRoute]("test/e2e/router/testdata/kthena-router/ModelRoute-ds1.5b-pd-disaggragation.yaml")
modelRoute.Namespace = testNamespace
createdModelRoute, err := testCtx.KthenaClient.NetworkingV1alpha1().ModelRoutes(testNamespace).Create(ctx, modelRoute, metav1.CreateOptions{})
require.NoError(t, err, "Failed to create ModelRoute")
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/router/gateway-api/e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func TestModelRouteBindingGateway(t *testing.T) {

// 1. Deploy ModelRoute
t.Log("Deploying ModelRoute binding to Gateway...")
modelRoute := utils.LoadYAMLFromFile[networkingv1alpha1.ModelRoute]("examples/kthena-router/ModelRoute-binding-gateway.yaml")
modelRoute := utils.LoadYAMLFromFile[networkingv1alpha1.ModelRoute]("test/e2e/router/testdata/kthena-router/ModelRoute-binding-gateway.yaml")
modelRoute.Namespace = testNamespace

// Update the parentRef namespace to match the kthena installation namespace
Expand Down
4 changes: 2 additions & 2 deletions test/e2e/router/gateway-inference-extension/e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ func TestGatewayInferenceExtension(t *testing.T) {

// 1. Deploy InferencePool
t.Log("Deploying InferencePool...")
inferencePool := utils.LoadYAMLFromFile[inferencev1.InferencePool]("examples/kthena-router/InferencePool.yaml")
inferencePool := utils.LoadYAMLFromFile[inferencev1.InferencePool]("test/e2e/router/testdata/kthena-router/InferencePool.yaml")
inferencePool.Namespace = testNamespace

createdInferencePool, err := testCtx.InferenceClient.InferenceV1().InferencePools(testNamespace).Create(ctx, inferencePool, metav1.CreateOptions{})
Expand All @@ -108,7 +108,7 @@ func TestGatewayInferenceExtension(t *testing.T) {

// 2. Deploy HTTPRoute
t.Log("Deploying HTTPRoute...")
httpRoute := utils.LoadYAMLFromFile[gatewayv1.HTTPRoute]("examples/kthena-router/HTTPRoute.yaml")
httpRoute := utils.LoadYAMLFromFile[gatewayv1.HTTPRoute]("test/e2e/router/testdata/kthena-router/HTTPRoute.yaml")
httpRoute.Namespace = testNamespace

// Update parentRefs to point to the kthena installation namespace
Expand Down
19 changes: 19 additions & 0 deletions test/e2e/testdata/kthena-router/HTTPRoute.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: llm-route
spec:
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: default

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The parentRefs.name is set to default, but the Gateway defined in test/e2e/testdata/kthena-router/Gateway.yaml is named kthena-gateway. For this HTTPRoute to correctly attach to the Gateway, the names must match.

    name: kthena-gateway

namespace: kthena-system
rules:
- backendRefs:
- group: inference.networking.k8s.io
kind: InferencePool
name: deepseek-r1-1-5b
matches:
- path:
type: PathPrefix
value: /
16 changes: 16 additions & 0 deletions test/e2e/testdata/kthena-router/InferencePool.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: inference.networking.k8s.io/v1
kind: InferencePool
metadata:
name: deepseek-r1-1-5b
spec:
targetPorts:
- number: 8000
selector:
matchLabels:
app: deepseek-r1-1-5b
# Kthena Router natively supports Gateway Inference Extension and does not require the Endpoint Picker Extension.
# It's just a placeholder for API validation.
endpointPickerRef:
name: deepseek-r1-1-5b
port:
number: 8080
15 changes: 15 additions & 0 deletions test/e2e/testdata/kthena-router/ModelRoute-binding-gateway.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
apiVersion: networking.serving.volcano.sh/v1alpha1
kind: ModelRoute
metadata:
name: deepseek-binding-gateway
namespace: default
spec:
modelName: "deepseek-binding-gateway"
parentRefs:
- name: "default"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The parentRefs.name is default, which doesn't match the Gateway name kthena-gateway from test/e2e/testdata/kthena-router/Gateway.yaml. This will prevent the ModelRoute from binding to the gateway.

  - name: "kthena-gateway"

namespace: "kthena-system"
kind: "Gateway"
rules:
- name: "default"
targetModels:
- modelServerName: "deepseek-r1-1-5b"
18 changes: 18 additions & 0 deletions test/e2e/testdata/kthena-router/ModelRouteMultiModels.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apiVersion: networking.serving.volcano.sh/v1alpha1
kind: ModelRoute
metadata:
name: deepseek-multi-models
namespace: default
spec:
modelName: "deepseek-multi-models"
rules:
- name: "premium"
modelMatch:
headers:
user-type:
exact: premium
targetModels:
- modelServerName: "deepseek-r1-7b"
- name: "default"
targetModels:
- modelServerName: "deepseek-r1-1-5b"
11 changes: 11 additions & 0 deletions test/e2e/testdata/kthena-router/ModelRouteSimple.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: networking.serving.volcano.sh/v1alpha1
kind: ModelRoute
metadata:
name: deepseek-simple
namespace: default
spec:
modelName: "deepseek-simple"
rules:
- name: "default"
targetModels:
- modelServerName: "deepseek-r1-1-5b"
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
apiVersion: networking.serving.volcano.sh/v1alpha1
kind: ModelServer
metadata:
name: deepseek-r1-1-5b-pd-disaggragation
namespace: default
spec:
workloadSelector:
matchLabels:
app: deepseek-r1-1-5b
pdGroup:
groupKey: "modelinfer/infergroupname"
prefillLabels:
modelinfer/rolename: "P-instance"
decodeLabels:
modelinfer/rolename: "D-instance"
workloadPort:
port: 8000
model: "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"
inferenceEngine: "vLLM"
trafficPolicy:
timeout: 10s
Loading