feat: add plain Service baseline without Gateway or routing proxy#1663
Open
WenjiaoYue wants to merge 1 commit into
Open
feat: add plain Service baseline without Gateway or routing proxy#1663WenjiaoYue wants to merge 1 commit into
WenjiaoYue wants to merge 1 commit into
Conversation
Signed-off-by: WenjiaoYue <wenjiao.yue@intel.com>
WenjiaoYue
requested review from
Vezio,
achandrasekar,
kalantar,
mengmeiye and
namasl
as code owners
July 23, 2026 01:37
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a new gateway.className: none “direct Service” baseline lane for ModelService benchmarking, allowing the harness to hit decode vLLM through a plain ClusterIP Service with no Gateway/API resources and no routing proxy in the request path.
Changes:
- Adds
noneas a supported gateway class and normalizes direct mode by disabling the per-pod routing proxy and retargeting vLLM custom commands to$VLLM_INFERENCE_PORT. - Renders/applies a benchmark-managed
*-directClusterIP Service and updates endpoint discovery (smoketests, inference tests, benchmark runs) to use it. - Skips router/gateway deployment and gateway prerequisites (Gateway API CRDs/provider/HTTPRoute/infra chart) when in direct mode, plus updates docs/CLI help and adds tests.
Reviewed changes
Copilot reviewed 23 out of 23 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| tests/test_direct_service_mode.py | Adds unit/integration-style coverage for direct mode normalization, constraints, rendering, and endpoint discovery. |
| README.md | Updates CLI help text to document --gateway-class none behavior. |
| llmdbenchmark/utilities/endpoint.py | Adds find_direct_modelservice_endpoint() for discovering the plain Service endpoint. |
| llmdbenchmark/teardown/steps/step_03_delete_resources.py | Expands teardown pattern matching to include -direct resources. |
| llmdbenchmark/standup/steps/step_11_inference_test.py | Uses direct Service endpoint discovery for gateway.className=none. |
| llmdbenchmark/standup/steps/step_10_smoketest.py | Uses direct Service endpoint discovery for gateway.className=none. |
| llmdbenchmark/standup/steps/step_09_deploy_modelservice.py | Applies the direct Service manifest and skips router-related waits/labeling in direct mode. |
| llmdbenchmark/standup/steps/step_08_deploy_router.py | Skips router deployment step entirely for direct mode. |
| llmdbenchmark/standup/steps/step_02_admin_prerequisites.py | Skips Gateway API/extension/provider prerequisites for direct mode. |
| llmdbenchmark/smoketests/base.py | Adds direct Service endpoint discovery for smoketests. |
| llmdbenchmark/run/steps/step_03_detect_endpoint.py | Adds direct Service endpoint discovery for benchmark runs. |
| llmdbenchmark/parser/render_plans.py | Adds none gateway class support, direct-mode normalization, and direct-mode constraint validation. |
| llmdbenchmark/parser/README.md | Documents gateway.className: none behavior and intent. |
| llmdbenchmark/interface/standup.py | Updates CLI help to include none as a supported gateway class. |
| llmdbenchmark/interface/run.py | Updates CLI help to include none as a supported gateway class. |
| llmdbenchmark/interface/plan.py | Updates CLI help to include none as a supported gateway class. |
| llmdbenchmark/interface/experiment.py | Updates CLI help to include none as a supported gateway class. |
| docs/standup.md | Documents the new none gateway class lane and constraints. |
| config/templates/values/defaults.yaml | Documents gateway.className: none in defaults commentary. |
| config/templates/jinja/13a_modelservice-direct-service.yaml.j2 | Adds a new template rendering the plain ClusterIP Service for direct mode. |
| config/templates/jinja/11_infra.yaml.j2 | Skips infra rendering for direct mode (and epponly). |
| config/templates/jinja/10_helmfile-main.yaml.j2 | Skips infra/router releases and repo in direct mode; adjusts ms needs: accordingly. |
| config/templates/jinja/08_httproute.yaml.j2 | Skips HTTPRoute rendering in direct mode. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| kind: Service | ||
| metadata: | ||
| name: {{ model_id_label }}-direct | ||
| namespace: {{ namespace.name }} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add a plain Kubernetes Service baseline for ModelService benchmarks through the new
gateway.className: nonemode.This provides a direct benchmark path:
benchmark harness -> ClusterIP Service -> decode vLLMThe mode does not deploy or include the following components in the request path:
Fixes #1650.
Changes
noneas a supported Gateway class.routing.servicePort.$VLLM_METRICS_PORTto$VLLM_INFERENCE_PORT.Usage