Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
fe34b90
minor refactor to config loading (#1114)
nirrozenbaum Jul 8, 2025
c204c89
minor updates to typed-name (#1113)
nirrozenbaum Jul 8, 2025
91e3047
handle picking multiple destinations in scheduling layer (#1059)
nirrozenbaum Jul 8, 2025
caebcc6
Clarify that connections to EPP should use TLS by default (#1085)
robscott Jul 8, 2025
916bc59
feat: 🔧 unify the default parameter value positions (#1119)
yafengio Jul 9, 2025
4cd062a
refactor: 🔨 use the more explicit singular form (#1129)
yafengio Jul 9, 2025
a4a6ab4
feat(conformance): loose the InferencePoolInvalidEPPService to only c…
zetxqx Jul 10, 2025
371e0a6
embed handlePlugins inside the general plugins handle (#1128)
nirrozenbaum Jul 10, 2025
13d8bb0
Fix makefile: test-integration (#1142)
carlory Jul 11, 2025
e696216
feat: make model metrics endpoints configurable (#1000)
nayihz Jul 11, 2025
48966b8
removed unused manager dir (#1155)
nirrozenbaum Jul 14, 2025
72bf2d0
feat(conformance): add version for conformance test report. (#1133)
zetxqx Jul 14, 2025
0b141c6
initial update to load plugins from file (#1151)
nirrozenbaum Jul 14, 2025
1565f31
adds flag to disble pprof if desired, defaulted on (#1159)
kfswain Jul 14, 2025
cdb0187
Fix: don't use corev1.objectReference (#1156)
capri-xiyue Jul 14, 2025
e696e68
load plugins from file in conformance tests (#1152)
nirrozenbaum Jul 15, 2025
c46a7e7
remove NewScheduler function (#1153)
nirrozenbaum Jul 15, 2025
ddca1df
chore(deps): bump golang.org/x/sync from 0.15.0 to 0.16.0 (#1160)
dependabot[bot] Jul 15, 2025
f486883
feat: Introduce pluggable queue framework (#1138)
LukeAVanDrie Jul 15, 2025
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
1 change: 0 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ RUN go mod download
# Sources
COPY cmd/epp ./cmd/epp
COPY pkg/epp ./pkg/epp
COPY conformance/testing-epp ./conformance/testing-epp
COPY internal ./internal
COPY api ./api
WORKDIR /src/cmd/epp
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ test-unit: ## Run unit tests.
CGO_ENABLED=1 KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test ./pkg/... -race -coverprofile cover.out

.PHONY: test-integration
test-integration: ## Run integration tests.
test-integration: envtest ## Run integration tests.
CGO_ENABLED=1 KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test ./test/integration/epp/... -race -coverprofile cover.out

.PHONY: test-e2e
Expand Down
1 change: 1 addition & 0 deletions RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

The Kubernetes Template Project is released on an as-needed basis. The process is as follows:

1. Update `version/version.go` with the new semver tag
1. An issue is proposing a new release with a changelog since the last release
1. All [OWNERS](OWNERS) must LGTM this release
1. An OWNER runs `git tag -s $VERSION` and inserts the changelog and pushes the tag with `git push $VERSION`
Expand Down
38 changes: 34 additions & 4 deletions api/v1alpha2/inferencepool_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ limitations under the License.
package v1alpha2

import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

Expand Down Expand Up @@ -95,9 +94,14 @@ type Extension struct {

// ExtensionReference is a reference to the extension.
//
// Connections to this extension MUST use TLS by default. Implementations MAY
// provide a way to customize this connection to use cleartext, a different
// protocol, or custom TLS configuration.
//
// If a reference is invalid, the implementation MUST update the `ResolvedRefs`
// Condition on the InferencePool's status to `status: False`. A 5XX status code MUST be returned
// for the request that would have otherwise been routed to the invalid backend.
// Condition on the InferencePool's status to `status: False`. A 5XX status code
// MUST be returned for the request that would have otherwise been routed to the
// invalid backend.
type ExtensionReference struct {
// Group is the group of the referent.
// The default value is "", representing the Core API group.
Expand Down Expand Up @@ -177,7 +181,7 @@ type InferencePoolStatus struct {
// PoolStatus defines the observed state of InferencePool from a Gateway.
type PoolStatus struct {
// GatewayRef indicates the gateway that observed state of InferencePool.
GatewayRef corev1.ObjectReference `json:"parentRef"`
GatewayRef ParentGatewayReference `json:"parentRef"`

// Conditions track the state of the InferencePool.
//
Expand Down Expand Up @@ -265,3 +269,29 @@ const (
// or API group, or a reference to a resource that can not be found.
InferencePoolReasonInvalidExtensionRef InferencePoolReason = "InvalidExtensionRef"
)

// ParentGatewayReference identifies an API object including its namespace,
// defaulting to Gateway.
type ParentGatewayReference struct {
// Group is the group of the referent.
//
// +optional
// +kubebuilder:default="gateway.networking.k8s.io"
Group *Group `json:"group"`

// Kind is kind of the referent. For example "Gateway".
//
// +optional
// +kubebuilder:default=Gateway
Kind *Kind `json:"kind"`

// Name is the name of the referent.
Name ObjectName `json:"name"`

// Namespace is the namespace of the referent. If not present,
// the namespace of the referent is assumed to be the same as
// the namespace of the referring object.
//
// +optional
Namespace *Namespace `json:"namespace,omitempty"`
}
21 changes: 21 additions & 0 deletions api/v1alpha2/shared_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,24 @@ type LabelKey string
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern=`^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$`
type LabelValue string

// Namespace refers to a Kubernetes namespace. It must be a RFC 1123 label.
//
// This validation is based off of the corresponding Kubernetes validation:
// https://github.com/kubernetes/apimachinery/blob/02cfb53916346d085a6c6c7c66f882e3c6b0eca6/pkg/util/validation/validation.go#L187
//
// This is used for Namespace name validation here:
// https://github.com/kubernetes/apimachinery/blob/02cfb53916346d085a6c6c7c66f882e3c6b0eca6/pkg/api/validation/generic.go#L63
//
// Valid values include:
//
// * "example"
//
// Invalid values include:
//
// * "example.com" - "." is an invalid character
//
// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=63
type Namespace string
32 changes: 31 additions & 1 deletion api/v1alpha2/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 6 additions & 7 deletions client-go/applyconfiguration/api/v1alpha2/poolstatus.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions client-go/applyconfiguration/utils.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 12 additions & 14 deletions cmd/epp/runner/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/framework/plugins/picker"
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/framework/plugins/profile"
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/framework/plugins/scorer"
testfilter "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/framework/plugins/test/filter"
)

// RegisterAllPlugins registers the factory functions of all known plugins
Expand All @@ -40,58 +41,55 @@ func RegisterAllPlugins() {
plugins.Register(profile.SingleProfileHandlerType, profile.SingleProfileHandlerFactory)
plugins.Register(scorer.KvCacheScorerType, scorer.KvCacheScorerFactory)
plugins.Register(scorer.QueueScorerType, scorer.QueueScorerFactory)
// register filter for test purpose only (used in conformance tests)
plugins.Register(testfilter.HeaderBasedTestingFilterType, testfilter.HeaderBasedTestingFilterFactory)
}

// eppHandle is an implementation of the interface plugins.Handle
type eppHandle struct {
ctx context.Context
plugins plugins.HandlePlugins
ctx context.Context
plugins.HandlePlugins
}

// Context returns a context the plugins can use, if they need one
func (h *eppHandle) Context() context.Context {
return h.ctx
}

// Plugins returns the sub-handle for working with instantiated plugins
func (h *eppHandle) Plugins() plugins.HandlePlugins {
return h.plugins
}

// eppHandlePlugins implements the set of APIs to work with instantiated plugins
type eppHandlePlugins struct {
thePlugins map[string]plugins.Plugin
plugins map[string]plugins.Plugin
}

// Plugin returns the named plugin instance
func (h *eppHandlePlugins) Plugin(name string) plugins.Plugin {
return h.thePlugins[name]
return h.plugins[name]
}

// AddPlugin adds a plugin to the set of known plugin instances
func (h *eppHandlePlugins) AddPlugin(name string, plugin plugins.Plugin) {
h.thePlugins[name] = plugin
h.plugins[name] = plugin
}

// GetAllPlugins returns all of the known plugins
func (h *eppHandlePlugins) GetAllPlugins() []plugins.Plugin {
result := make([]plugins.Plugin, 0)
for _, plugin := range h.thePlugins {
for _, plugin := range h.plugins {
result = append(result, plugin)
}
return result
}

// GetAllPluginsWithNames returns al of the known plugins with their names
func (h *eppHandlePlugins) GetAllPluginsWithNames() map[string]plugins.Plugin {
return h.thePlugins
return h.plugins
}

func newEppHandle(ctx context.Context) *eppHandle {
return &eppHandle{
ctx: ctx,
plugins: &eppHandlePlugins{
thePlugins: map[string]plugins.Plugin{},
HandlePlugins: &eppHandlePlugins{
plugins: map[string]plugins.Plugin{},
},
}
}
Loading