Unverified Commit 9e2a2cc9 authored by Julien Mancuso's avatar Julien Mancuso Committed by GitHub
Browse files

feat: add epp component (#5611)


Signed-off-by: default avatarJulien Mancuso <jmancuso@nvidia.com>
parent 6271a31f
...@@ -72,7 +72,8 @@ ensure-yq: ...@@ -72,7 +72,8 @@ ensure-yq:
.PHONY: manifests .PHONY: manifests
manifests: controller-gen ensure-yq ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects. manifests: controller-gen ensure-yq ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
# Use a large maxDescLen to ensure all field comments are included as OpenAPI descriptions # Use a large maxDescLen to ensure all field comments are included as OpenAPI descriptions
$(CONTROLLER_GEN) rbac:roleName=manager-role crd:maxDescLen=100000 webhook paths="./..." output:crd:artifacts:config=config/crd/bases # allowDangerousTypes=true is needed for the EndpointPickerConfig from gateway-api-inference-extension which contains float fields
$(CONTROLLER_GEN) rbac:roleName=manager-role crd:maxDescLen=100000,allowDangerousTypes=true webhook paths="./..." output:crd:artifacts:config=config/crd/bases
echo "Removing name from mainContainer required fields" echo "Removing name from mainContainer required fields"
for file in config/crd/bases/*.yaml; do \ for file in config/crd/bases/*.yaml; do \
yq eval '(.. | select(has("mainContainer")) | .mainContainer.required) |= (. - ["name"])' -i --indent 2 $$file || exit 1; \ yq eval '(.. | select(has("mainContainer")) | .mainContainer.required) |= (. - ["name"])' -i --indent 2 $$file || exit 1; \
......
...@@ -25,6 +25,7 @@ import ( ...@@ -25,6 +25,7 @@ import (
commonconsts "github.com/ai-dynamo/dynamo/deploy/operator/internal/consts" commonconsts "github.com/ai-dynamo/dynamo/deploy/operator/internal/consts"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
apixv1alpha1 "sigs.k8s.io/gateway-api-inference-extension/apix/config/v1alpha1"
) )
const ( const (
...@@ -124,6 +125,11 @@ type DynamoComponentDeploymentSharedSpec struct { ...@@ -124,6 +125,11 @@ type DynamoComponentDeploymentSharedSpec struct {
// the service using the Scale subresource. When disabled, replicas can be modified directly. // the service using the Scale subresource. When disabled, replicas can be modified directly.
// +optional // +optional
ScalingAdapter *ScalingAdapter `json:"scalingAdapter,omitempty"` ScalingAdapter *ScalingAdapter `json:"scalingAdapter,omitempty"`
// EPPConfig defines EPP-specific configuration options for Endpoint Picker Plugin components.
// Only applicable when ComponentType is "epp".
// +optional
EPPConfig *EPPConfig `json:"eppConfig,omitempty"`
} }
type MultinodeSpec struct { type MultinodeSpec struct {
...@@ -346,3 +352,23 @@ type ModelReference struct { ...@@ -346,3 +352,23 @@ type ModelReference struct {
// +optional // +optional
Revision string `json:"revision,omitempty"` Revision string `json:"revision,omitempty"`
} }
// EPPConfig contains configuration for EPP (Endpoint Picker Plugin) components.
// EPP is responsible for intelligent endpoint selection and KV-aware routing.
type EPPConfig struct {
// ConfigMapRef references a user-provided ConfigMap containing EPP configuration.
// The ConfigMap should contain EndpointPickerConfig YAML.
// Mutually exclusive with Config.
// +optional
ConfigMapRef *corev1.ConfigMapKeySelector `json:"configMapRef,omitempty"`
// Config allows specifying EPP EndpointPickerConfig directly as a structured object.
// The operator will marshal this to YAML and create a ConfigMap automatically.
// Mutually exclusive with ConfigMapRef.
// One of ConfigMapRef or Config must be specified (no default configuration).
// Uses the upstream type from github.com/kubernetes-sigs/gateway-api-inference-extension
// +optional
// +kubebuilder:validation:Type=object
// +kubebuilder:pruning:PreserveUnknownFields
Config *apixv1alpha1.EndpointPickerConfig `json:"config,omitempty"`
}
...@@ -251,3 +251,23 @@ func (s *DynamoGraphDeployment) HasAnyMultinodeService() bool { ...@@ -251,3 +251,23 @@ func (s *DynamoGraphDeployment) HasAnyMultinodeService() bool {
func (s *DynamoGraphDeployment) GetDynamoNamespaceForService(service *DynamoComponentDeploymentSharedSpec) string { func (s *DynamoGraphDeployment) GetDynamoNamespaceForService(service *DynamoComponentDeploymentSharedSpec) string {
return ComputeDynamoNamespace(service.GlobalDynamoNamespace, s.GetNamespace(), s.GetName()) return ComputeDynamoNamespace(service.GlobalDynamoNamespace, s.GetNamespace(), s.GetName())
} }
// HasEPPService returns true if any service in the DGD has EPP component type
func (dgd *DynamoGraphDeployment) HasEPPService() bool {
for _, component := range dgd.Spec.Services {
if component != nil && component.ComponentType == consts.ComponentTypeEPP {
return true
}
}
return false
}
// GetEPPService returns the EPP service name and spec if present
func (dgd *DynamoGraphDeployment) GetEPPService() (string, *DynamoComponentDeploymentSharedSpec, bool) {
for serviceName, component := range dgd.Spec.Services {
if component != nil && component.ComponentType == consts.ComponentTypeEPP {
return serviceName, component, true
}
}
return "", nil, false
}
...@@ -43,6 +43,7 @@ import ( ...@@ -43,6 +43,7 @@ import (
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
configv1alpha1 "sigs.k8s.io/gateway-api-inference-extension/apix/config/v1alpha1"
) )
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
...@@ -376,6 +377,11 @@ func (in *DynamoComponentDeploymentSharedSpec) DeepCopyInto(out *DynamoComponent ...@@ -376,6 +377,11 @@ func (in *DynamoComponentDeploymentSharedSpec) DeepCopyInto(out *DynamoComponent
*out = new(ScalingAdapter) *out = new(ScalingAdapter)
**out = **in **out = **in
} }
if in.EPPConfig != nil {
in, out := &in.EPPConfig, &out.EPPConfig
*out = new(EPPConfig)
(*in).DeepCopyInto(*out)
}
} }
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DynamoComponentDeploymentSharedSpec. // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DynamoComponentDeploymentSharedSpec.
...@@ -908,6 +914,31 @@ func (in *DynamoModelStatus) DeepCopy() *DynamoModelStatus { ...@@ -908,6 +914,31 @@ func (in *DynamoModelStatus) DeepCopy() *DynamoModelStatus {
return out return out
} }
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *EPPConfig) DeepCopyInto(out *EPPConfig) {
*out = *in
if in.ConfigMapRef != nil {
in, out := &in.ConfigMapRef, &out.ConfigMapRef
*out = new(v1.ConfigMapKeySelector)
(*in).DeepCopyInto(*out)
}
if in.Config != nil {
in, out := &in.Config, &out.Config
*out = new(configv1alpha1.EndpointPickerConfig)
(*in).DeepCopyInto(*out)
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EPPConfig.
func (in *EPPConfig) DeepCopy() *EPPConfig {
if in == nil {
return nil
}
out := new(EPPConfig)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *EndpointInfo) DeepCopyInto(out *EndpointInfo) { func (in *EndpointInfo) DeepCopyInto(out *EndpointInfo) {
*out = *in *out = *in
......
...@@ -69,6 +69,7 @@ import ( ...@@ -69,6 +69,7 @@ import (
internalwebhook "github.com/ai-dynamo/dynamo/deploy/operator/internal/webhook" internalwebhook "github.com/ai-dynamo/dynamo/deploy/operator/internal/webhook"
webhookvalidation "github.com/ai-dynamo/dynamo/deploy/operator/internal/webhook/validation" webhookvalidation "github.com/ai-dynamo/dynamo/deploy/operator/internal/webhook/validation"
istioclientsetscheme "istio.io/client-go/pkg/clientset/versioned/scheme" istioclientsetscheme "istio.io/client-go/pkg/clientset/versioned/scheme"
gaiev1 "sigs.k8s.io/gateway-api-inference-extension/api/v1"
//+kubebuilder:scaffold:imports //+kubebuilder:scaffold:imports
) )
...@@ -119,6 +120,8 @@ func init() { ...@@ -119,6 +120,8 @@ func init() {
utilruntime.Must(apiextensionsv1.AddToScheme(scheme)) utilruntime.Must(apiextensionsv1.AddToScheme(scheme))
utilruntime.Must(istioclientsetscheme.AddToScheme(scheme)) utilruntime.Must(istioclientsetscheme.AddToScheme(scheme))
utilruntime.Must(gaiev1.Install(scheme))
//+kubebuilder:scaffold:scheme //+kubebuilder:scaffold:scheme
} }
...@@ -146,6 +149,7 @@ func main() { ...@@ -146,6 +149,7 @@ func main() {
var mpiRunSecretNamespace string var mpiRunSecretNamespace string
var plannerClusterRoleName string var plannerClusterRoleName string
var dgdrProfilingClusterRoleName string var dgdrProfilingClusterRoleName string
var eppClusterRoleName string
var namespaceScopeLeaseDuration time.Duration var namespaceScopeLeaseDuration time.Duration
var namespaceScopeLeaseRenewInterval time.Duration var namespaceScopeLeaseRenewInterval time.Duration
var operatorVersion string var operatorVersion string
...@@ -196,6 +200,8 @@ func main() { ...@@ -196,6 +200,8 @@ func main() {
"Name of the ClusterRole for planner (cluster-wide mode only)") "Name of the ClusterRole for planner (cluster-wide mode only)")
flag.StringVar(&dgdrProfilingClusterRoleName, "dgdr-profiling-cluster-role-name", "", flag.StringVar(&dgdrProfilingClusterRoleName, "dgdr-profiling-cluster-role-name", "",
"Name of the ClusterRole for DGDR profiling jobs (cluster-wide mode only)") "Name of the ClusterRole for DGDR profiling jobs (cluster-wide mode only)")
flag.StringVar(&eppClusterRoleName, "epp-cluster-role-name", "",
"Name of the ClusterRole for EPP (cluster-wide mode only)")
flag.DurationVar(&namespaceScopeLeaseDuration, "namespace-scope-lease-duration", 30*time.Second, flag.DurationVar(&namespaceScopeLeaseDuration, "namespace-scope-lease-duration", 30*time.Second,
"Duration of namespace scope marker lease before expiration (namespace-restricted mode only)") "Duration of namespace scope marker lease before expiration (namespace-restricted mode only)")
flag.DurationVar(&namespaceScopeLeaseRenewInterval, "namespace-scope-lease-renew-interval", 10*time.Second, flag.DurationVar(&namespaceScopeLeaseRenewInterval, "namespace-scope-lease-renew-interval", 10*time.Second,
...@@ -270,6 +276,7 @@ func main() { ...@@ -270,6 +276,7 @@ func main() {
RBAC: commonController.RBACConfig{ RBAC: commonController.RBACConfig{
PlannerClusterRoleName: plannerClusterRoleName, PlannerClusterRoleName: plannerClusterRoleName,
DGDRProfilingClusterRoleName: dgdrProfilingClusterRoleName, DGDRProfilingClusterRoleName: dgdrProfilingClusterRoleName,
EPPClusterRoleName: eppClusterRoleName,
}, },
DiscoveryBackend: discoveryBackend, DiscoveryBackend: discoveryBackend,
} }
...@@ -647,7 +654,7 @@ func main() { ...@@ -647,7 +654,7 @@ func main() {
os.Exit(1) os.Exit(1)
} }
dgdHandler := webhookvalidation.NewDynamoGraphDeploymentHandler() dgdHandler := webhookvalidation.NewDynamoGraphDeploymentHandler(mgr)
if err = dgdHandler.RegisterWithManager(mgr); err != nil { if err = dgdHandler.RegisterWithManager(mgr); err != nil {
setupLog.Error(err, "unable to register webhook", "webhook", "DynamoGraphDeployment") setupLog.Error(err, "unable to register webhook", "webhook", "DynamoGraphDeployment")
os.Exit(1) os.Exit(1)
......
...@@ -210,7 +210,7 @@ spec: ...@@ -210,7 +210,7 @@ spec:
Claims lists the names of resources, defined in spec.resourceClaims, Claims lists the names of resources, defined in spec.resourceClaims,
that are used by this container. that are used by this container.
This is an alpha field and requires enabling the This field depends on the
DynamicResourceAllocation feature gate. DynamicResourceAllocation feature gate.
This field is immutable. It can only be set for containers. This field is immutable. It can only be set for containers.
......
...@@ -139,6 +139,18 @@ rules: ...@@ -139,6 +139,18 @@ rules:
- patch - patch
- update - update
- watch - watch
- apiGroups:
- inference.networking.k8s.io
resources:
- inferencepools
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups: - apiGroups:
- leaderworkerset.x-k8s.io - leaderworkerset.x-k8s.io
resources: resources:
......
...@@ -6,91 +6,94 @@ require ( ...@@ -6,91 +6,94 @@ require (
emperror.dev/errors v0.8.1 emperror.dev/errors v0.8.1
github.com/NVIDIA/grove/operator/api v0.1.0-alpha.3 github.com/NVIDIA/grove/operator/api v0.1.0-alpha.3
github.com/bsm/gomega v1.27.10 github.com/bsm/gomega v1.27.10
github.com/go-logr/logr v1.4.2 github.com/go-logr/logr v1.4.3
github.com/google/go-cmp v0.7.0 github.com/google/go-cmp v0.7.0
github.com/imdario/mergo v0.3.6 github.com/imdario/mergo v0.3.16
github.com/onsi/ginkgo/v2 v2.23.4 github.com/onsi/ginkgo/v2 v2.27.3
github.com/onsi/gomega v1.37.0 github.com/onsi/gomega v1.38.3
github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.71.2 github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.71.2
github.com/stretchr/testify v1.10.0 github.com/prometheus/client_golang v1.23.2
go.etcd.io/etcd/client/v3 v3.5.21 github.com/stretchr/testify v1.11.1
go.etcd.io/etcd/client/v3 v3.6.4
istio.io/api v1.23.1 istio.io/api v1.23.1
istio.io/client-go v1.23.1 istio.io/client-go v1.23.1
k8s.io/api v0.33.3 k8s.io/api v0.34.3
k8s.io/apiextensions-apiserver v0.33.3 k8s.io/apiextensions-apiserver v0.34.3
k8s.io/apimachinery v0.33.3 k8s.io/apimachinery v0.34.3
k8s.io/client-go v0.33.3 k8s.io/client-go v0.34.3
k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d
sigs.k8s.io/controller-runtime v0.21.0 sigs.k8s.io/controller-runtime v0.22.4
sigs.k8s.io/gateway-api-inference-extension v1.2.0
sigs.k8s.io/lws v0.6.1 sigs.k8s.io/lws v0.6.1
sigs.k8s.io/yaml v1.4.0 sigs.k8s.io/yaml v1.6.0
volcano.sh/apis v1.12.2 volcano.sh/apis v1.12.2
) )
require ( require (
github.com/Masterminds/semver/v3 v3.4.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect github.com/beorn7/perks v1.0.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/coreos/go-semver v0.3.1 // indirect github.com/coreos/go-semver v0.3.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/emicklei/go-restful/v3 v3.12.0 // indirect github.com/emicklei/go-restful/v3 v3.13.0 // indirect
github.com/evanphx/json-patch v5.7.0+incompatible // indirect github.com/evanphx/json-patch v5.7.0+incompatible // indirect
github.com/evanphx/json-patch/v5 v5.9.11 // indirect github.com/evanphx/json-patch/v5 v5.9.11 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/fxamacker/cbor/v2 v2.9.0 // indirect
github.com/go-logr/zapr v1.3.0 // indirect github.com/go-logr/zapr v1.3.0 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect github.com/go-openapi/jsonpointer v0.21.2 // indirect
github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect
github.com/go-openapi/swag v0.23.0 // indirect github.com/go-openapi/swag v0.23.1 // indirect
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.4 // indirect github.com/golang/protobuf v1.5.4 // indirect
github.com/google/btree v1.1.3 // indirect github.com/google/btree v1.1.3 // indirect
github.com/google/gnostic-models v0.6.9 // indirect github.com/google/gnostic-models v0.7.0 // indirect
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect github.com/google/pprof v0.0.0-20250923004556-9e5a51aed1e8 // indirect
github.com/google/uuid v1.6.0 // indirect github.com/google/uuid v1.6.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect
github.com/josharian/intern v1.0.0 // indirect github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect github.com/json-iterator/go v1.1.12 // indirect
github.com/mailru/easyjson v0.7.7 // indirect github.com/mailru/easyjson v0.9.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/pkg/errors v0.9.1 // indirect github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/prometheus/client_golang v1.22.0 // indirect github.com/prometheus/client_model v0.6.2 // indirect
github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.67.5 // indirect
github.com/prometheus/common v0.62.0 // indirect github.com/prometheus/procfs v0.17.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect github.com/spf13/pflag v1.0.10 // indirect
github.com/spf13/pflag v1.0.6 // indirect
github.com/x448/float16 v0.8.4 // indirect github.com/x448/float16 v0.8.4 // indirect
go.etcd.io/etcd/api/v3 v3.5.21 // indirect go.etcd.io/etcd/api/v3 v3.6.4 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.21 // indirect go.etcd.io/etcd/client/pkg/v3 v3.6.4 // indirect
go.opentelemetry.io/otel v1.36.0 // indirect go.opentelemetry.io/otel v1.39.0 // indirect
go.opentelemetry.io/otel/sdk v1.36.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect
go.opentelemetry.io/otel/sdk/metric v1.35.0 // indirect
go.uber.org/automaxprocs v1.6.0 // indirect
go.uber.org/multierr v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect go.uber.org/zap v1.27.1 // indirect
golang.org/x/net v0.46.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect
golang.org/x/oauth2 v0.30.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/sync v0.17.0 // indirect golang.org/x/mod v0.30.0 // indirect
golang.org/x/sys v0.37.0 // indirect golang.org/x/net v0.48.0 // indirect
golang.org/x/term v0.36.0 // indirect golang.org/x/oauth2 v0.34.0 // indirect
golang.org/x/text v0.30.0 // indirect golang.org/x/sync v0.19.0 // indirect
golang.org/x/time v0.9.0 // indirect golang.org/x/sys v0.39.0 // indirect
golang.org/x/tools v0.38.0 // indirect golang.org/x/term v0.38.0 // indirect
golang.org/x/text v0.32.0 // indirect
golang.org/x/time v0.13.0 // indirect
golang.org/x/tools v0.39.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
google.golang.org/grpc v1.72.1 // indirect google.golang.org/grpc v1.78.0 // indirect
google.golang.org/protobuf v1.36.6 // indirect google.golang.org/protobuf v1.36.11 // indirect
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/klog/v2 v2.130.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect k8s.io/kube-openapi v0.0.0-20250814151709-d7b6acb124c3 // indirect
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect sigs.k8s.io/structured-merge-diff/v6 v6.3.1 // indirect
) )
This diff is collapsed.
...@@ -20,6 +20,10 @@ const ( ...@@ -20,6 +20,10 @@ const (
DynamoSystemPort = 9090 DynamoSystemPort = 9090
DynamoSystemPortName = "system" DynamoSystemPortName = "system"
// EPP (Endpoint Picker Plugin) ports
EPPGRPCPort = 9002
EPPGRPCPortName = "grpc"
MpiRunSshPort = 2222 MpiRunSshPort = 2222
// Default security context values // Default security context values
...@@ -67,8 +71,11 @@ const ( ...@@ -67,8 +71,11 @@ const (
ComponentTypeWorker = "worker" ComponentTypeWorker = "worker"
ComponentTypePrefill = "prefill" ComponentTypePrefill = "prefill"
ComponentTypeDecode = "decode" ComponentTypeDecode = "decode"
ComponentTypeEPP = "epp"
ComponentTypeDefault = "default" ComponentTypeDefault = "default"
PlannerServiceAccountName = "planner-serviceaccount" PlannerServiceAccountName = "planner-serviceaccount"
EPPServiceAccountName = "epp-serviceaccount"
EPPClusterRoleName = "epp-cluster-role"
DefaultIngressSuffix = "local" DefaultIngressSuffix = "local"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment