8 — MLflow Integration
The operator auto-discovers MLflow on RHOAI/ODH clusters and enables experiment tracking for every FeatureStore deployment. When the MLflow operator is present and healthy, Feast pods receive MLflow configuration automatically — no manual YAML editing required.
Auto-discovery
The operator lists all MLflow CRs (mlflow.opendatahub.io/v1) in the cluster and uses the first one with an Available=True or Ready=True condition. When found, it populates tracking_uri from status.address.url and ui_url from status.url.
If the MLflow CR does not report conditions (older operator versions), auto-discovery will not activate. Set trackingUri explicitly in that case.
No MLflow? The FeatureStore stays Ready. Non-MLflow FeatureViews and all other Feast services are completely unaffected.
FeatureStore CR configuration
Auto-enabled (default when MLflow is present)
No spec.mlflow needed. The operator auto-enables when an Available MLflow CR is detected:
apiVersion: feast.dev/v1
kind: FeatureStore
metadata:
name: my-store
spec:
feastProject: my_project
services:
onlineStore: {}
registry: {}
ui: {}Explicit configuration
Override defaults or enable additional features:
Opt-out
Disable MLflow even when the MLflow operator is present:
Field reference
enabled
bool
auto-detected
Master switch for MLflow integration
trackingUri
string
auto-discovered
MLflow tracking server URI (in-cluster, from status.address.url)
uiUrl
string
auto-discovered
Browser-reachable MLflow URL for Feast UI lineage links (from status.url)
trackingAuth
*string
"kubernetes-namespaced"
Auth method for Feast pods calling MLflow
autoLog
*bool
true
Auto-log feature metadata on every retrieval
autoLogEntityDf
*bool
false
Save entity DataFrame as artifact
entityDfMaxRows
*int32
100000
Skip artifact for large DataFrames
logOperations
*bool
false
Log feast apply / materialize to ops experiment
opsExperimentSuffix
*string
"-feast-ops"
Ops experiment name suffix
extraConfig
map[string]string
—
Additional YAML fields (coerced to native types)
Authentication
The operator injects MLFLOW_TRACKING_AUTH into all Feast pod containers. The MLflow Python client's auth plugin system uses this env var to attach credentials to tracking server requests.
trackingAuth value
Behavior
"kubernetes-namespaced" (default)
SA token + X-MLFLOW-WORKSPACE: <namespace> header. Multi-tenant on RHOAI.
"kubernetes"
SA token only. Single-tenant setups.
"basic"
HTTP Basic auth via MLFLOW_TRACKING_USERNAME / MLFLOW_TRACKING_PASSWORD env vars.
"bearer"
Static bearer token from MLFLOW_TRACKING_TOKEN env var.
"" (empty string)
No auth header. Local dev or unprotected MLflow.
No Kubernetes RoleBinding is needed for MLflow tracking API access. The MLflow server validates the SA token directly via TokenReview.
Tracking URI resolution order
Explicit
trackingUriin the FeatureStore CRAuto-discovered from MLflow CR
status.address.url(first Available/Ready CR)MLFLOW_TRACKING_URIenvironment variable (on workbench pods, injected by the MLflow operator)MLflow default (
./mlruns)
UI URL resolution order
Used for browser hyperlinks in Feast UI lineage panels:
Explicit
uiUrlin the FeatureStore CRMLFLOW_UI_URLenvironment variableAuto-discovered from MLflow CR
status.url(external gateway route)Falls back to
trackingUri(works for local dev)
Graceful degradation
MLflow operator not installed
No mlflow block in YAML; FeatureStore stays Ready
MLflow CR exists but not Ready
Discovery returns empty; MLflow stays off
Tracking URI becomes unreachable
SDK logs a warning; feature retrieval is not blocked
spec.mlflow.enabled: false
MLflow integration explicitly disabled
Workbench usage
In a RHOAI workbench notebook connected to the FeatureStore:
Dependency: the Feast image must include
feast[mlflow](mlflowormlflow-skinny).
RBAC permissions
The operator needs get, list, watch on mlflows in the mlflow.opendatahub.io API group. This is included in the default operator ClusterRole.
See also
Guide 5 — Security (RBAC / OIDC auth)
Last updated
Was this helpful?