Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
1 change: 1 addition & 0 deletions infra/feast-operator/api/v1alpha1/featurestore_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -541,6 +541,7 @@ type OptionalCtrConfigs struct {
EnvFrom *[]corev1.EnvFromSource `json:"envFrom,omitempty"`
ImagePullPolicy *corev1.PullPolicy `json:"imagePullPolicy,omitempty"`
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
NodeSelector *map[string]string `json:"nodeSelector,omitempty"`
}

// AuthzConfig defines the authorization settings for the deployed Feast services.
Expand Down
11 changes: 11 additions & 0 deletions infra/feast-operator/api/v1alpha1/zz_generated.deepcopy.go

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

Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,10 @@ spec:
description: PullPolicy describes a policy for if/when to
pull a container image
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute resource
requirements.
Expand Down Expand Up @@ -1025,6 +1029,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down Expand Up @@ -1480,6 +1488,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down Expand Up @@ -1946,6 +1958,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down Expand Up @@ -2441,6 +2457,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute resource
requirements.
Expand Down Expand Up @@ -4216,6 +4236,10 @@ spec:
description: PullPolicy describes a policy for if/when
to pull a container image
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down Expand Up @@ -4994,6 +5018,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down Expand Up @@ -5457,6 +5485,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down Expand Up @@ -5935,6 +5967,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the
compute resource requirements.
Expand Down Expand Up @@ -6440,6 +6476,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down
40 changes: 40 additions & 0 deletions infra/feast-operator/dist/install.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,10 @@ spec:
description: PullPolicy describes a policy for if/when to
pull a container image
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute resource
requirements.
Expand Down Expand Up @@ -1033,6 +1037,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down Expand Up @@ -1488,6 +1496,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down Expand Up @@ -1954,6 +1966,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down Expand Up @@ -2449,6 +2465,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute resource
requirements.
Expand Down Expand Up @@ -4224,6 +4244,10 @@ spec:
description: PullPolicy describes a policy for if/when
to pull a container image
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down Expand Up @@ -5002,6 +5026,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down Expand Up @@ -5465,6 +5493,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down Expand Up @@ -5943,6 +5975,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the
compute resource requirements.
Expand Down Expand Up @@ -6448,6 +6484,10 @@ spec:
- error
- critical
type: string
nodeSelector:
additionalProperties:
type: string
type: object
resources:
description: ResourceRequirements describes the compute
resource requirements.
Expand Down
5 changes: 5 additions & 0 deletions infra/feast-operator/docs/api/markdown/ref.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ _Appears in:_
| `envFrom` _[EnvFromSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envfromsource-v1-core)_ | |
| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | |
| `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | |
| `nodeSelector` _map[string]string_ | |


#### CronJobContainerConfigs
Expand All @@ -64,6 +65,7 @@ _Appears in:_
| `envFrom` _[EnvFromSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envfromsource-v1-core)_ | |
| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | |
| `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | |
| `nodeSelector` _map[string]string_ | |
| `commands` _string array_ | Array of commands to be executed (in order) against a Feature Store deployment.
Defaults to "feast apply" & "feast materialize-incremental $(date -u +'%Y-%m-%dT%H:%M:%S')" |

Expand Down Expand Up @@ -566,6 +568,7 @@ _Appears in:_
| `envFrom` _[EnvFromSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envfromsource-v1-core)_ | |
| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | |
| `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | |
| `nodeSelector` _map[string]string_ | |


#### PvcConfig
Expand Down Expand Up @@ -688,6 +691,7 @@ _Appears in:_
| `envFrom` _[EnvFromSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envfromsource-v1-core)_ | |
| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | |
| `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | |
| `nodeSelector` _map[string]string_ | |
| `tls` _[TlsConfigs](#tlsconfigs)_ | |
| `logLevel` _string_ | LogLevel sets the logging level for the server
Allowed values: "debug", "info", "warning", "error", "critical". |
Expand Down Expand Up @@ -750,6 +754,7 @@ _Appears in:_
| `envFrom` _[EnvFromSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envfromsource-v1-core)_ | |
| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | |
| `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | |
| `nodeSelector` _map[string]string_ | |
| `tls` _[TlsConfigs](#tlsconfigs)_ | |
| `logLevel` _string_ | LogLevel sets the logging level for the server
Allowed values: "debug", "info", "warning", "error", "critical". |
Expand Down
35 changes: 35 additions & 0 deletions infra/feast-operator/internal/controller/services/services.go
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,7 @@ func (feast *FeastServices) setPod(podSpec *corev1.PodSpec) error {
feast.mountPvcConfigs(podSpec)
feast.mountEmptyDirVolumes(podSpec)
feast.mountUserDefinedVolumes(podSpec)
feast.applyNodeSelector(podSpec)

return nil
}
Expand Down Expand Up @@ -793,6 +794,40 @@ func (feast *FeastServices) getLogLevelForType(feastType FeastServiceType) *stri
return nil
}

func (feast *FeastServices) getNodeSelectorForType(feastType FeastServiceType) *map[string]string {
if serviceConfigs := feast.getServerConfigs(feastType); serviceConfigs != nil {
return serviceConfigs.ContainerConfigs.OptionalCtrConfigs.NodeSelector
}
return nil
}

func (feast *FeastServices) applyNodeSelector(podSpec *corev1.PodSpec) {
var selectedNodeSelector map[string]string
var selectedService FeastServiceType

// Check all service types for node selector configuration
allServiceTypes := append(feastServerTypes, UIFeastType)
for _, feastType := range allServiceTypes {
if selector := feast.getNodeSelectorForType(feastType); selector != nil && len(*selector) > 0 {
selectedNodeSelector = *selector
selectedService = feastType
}
}

// If no service has node selector configured, we're done
if len(selectedNodeSelector) == 0 {
return
}

// Apply the simple node selector to the pod spec
podSpec.NodeSelector = selectedNodeSelector

// Log which service's node selector was applied for debugging
log.FromContext(feast.Handler.Context).V(1).Info("Applied node selector",
"serviceType", selectedService,
"selector", selectedNodeSelector)
}

// GetObjectMeta returns the feast k8s object metadata with type
func (feast *FeastServices) GetObjectMeta() metav1.ObjectMeta {
return metav1.ObjectMeta{Name: GetFeastName(feast.Handler.FeatureStore), Namespace: feast.Handler.FeatureStore.Namespace}
Expand Down
Loading
Loading