Installation
MLflow is delivered as an OLM Operator (the MLflow Operator) and installed from the platform OperatorHub. Installing the tracking server is a two-step flow: install the operator, then create one MLflow custom resource that reconciles the tracking-server stack.
TOC
PrerequisitesUpload OperatorInstall OperatorCreate the MLflow tracking serverMethod A — usingkubectlMethod B — using the Alauda Console UIVerificationHigh availability and storageBearer-token clientsUpgrade from v3.10.x to v3.13.0TroubleshootingPrerequisites
-
Alauda AI installed on the target cluster. The operator and its images ship both
linux/amd64andlinux/arm64. -
Operator Lifecycle Manager (OLM) available on the target cluster (provided by the platform).
-
A PostgreSQL 12 or later database reachable from the cluster, holding a database named
mlflowfor MLflow metadata. Have the host, port, username, and password ready, and create the database before you install:Use a highly available PostgreSQL service for production (see High availability and storage).
-
For production artifact storage, an existing S3-compatible bucket in SeaweedFS, MinIO, Ceph RGW, or AWS S3. The operator can proxy artifact access so clients do not need object-storage credentials. The in-pod filesystem default is suitable only for smoke tests.
-
The platform OAuth / OIDC provider (provided by Alauda AI) — the OAuth proxy in front of the tracking server uses it for single sign-on.
-
For multi-tenancy, the default workspace namespace must already exist and carry the label
mlflow-enabled=truebefore the tracking server first starts. Otherwise the server crash-loops withWorkspace '<name>' not found in the Kubernetes cluster.
Upload Operator
Download the MLflow Operator bundle from the Customer Portal / Marketplace (e.g. mlflow.ALL.xxxx.tgz), then publish it to the platform repository with the violet command-line tool:
The operator bundle records every runtime image (operator, MLflow tracking server, and the oauth2-proxy) in the CSV relatedImages, so a violet release relocates them into the platform registry. This makes the operator installable on air-gapped clusters without reaching build-harbor.alauda.cn / docker.io.
Install Operator
In the Administrator view:
- Click Marketplace / OperatorHub.
- At the top of the console, from the Cluster dropdown, select the destination cluster.
- Search for and select MLflow Operator, then click Install.
- Leave Channel unchanged (
stable). - Check that the Version is
v3.13.0. - Leave Installation Location unchanged — it defaults to the
mlflow-operatornamespace. - Choose an Upgrade Strategy (
Manualis recommended for production). - Click Install.
Confirm the operator is ready before continuing:
Create the MLflow tracking server
The operator does nothing until you create an MLflow custom resource (mlflow.alauda.io/v1alpha1). You can create it two ways:
kubectl— apply anMLflowmanifest.- Alauda Console UI — from Administrator → Marketplace → OperatorHub → MLflow Operator → All instances → Create.
Both create the same resource; use whichever fits your workflow.
Method A — using kubectl
Set the database connection and multi-tenancy fields, then apply:
Save as mlflow.yaml and apply:
On current versions the operator resolves cluster-specific values — the ingress/ALB name, cluster name, and image registry — from the kube-public/global-info ConfigMap, so spec.global and spec.platformAddr normally do not need to be set. The auth settings (the oauth2-proxy configuration) also default sensibly. The Create form in the Console pre-fills a complete example (the operator's alm-examples) that you can edit; the full field set is documented in the operator's config/samples/mlflow_v1alpha1_mlflow.yaml.
Method B — using the Alauda Console UI
- In the Administrator view, go to Marketplace → OperatorHub.
- From the Cluster dropdown at the top, select the target cluster.
- Open the installed MLflow Operator.
- Switch to the All instances tab and click Create (choose MLflow if prompted).
- Fill in the form, or switch to YAML view and paste the manifest from Method A. Set the PostgreSQL connection, the multi-tenancy workspace fields, and the S3 artifact-storage fields for production.
- Click Create.
Verification
Verify the tracking server reconciled in the configured namespace (kubeflow):
Then open Alauda AI → Tools → MLFlow. The run owner and visible workspaces reflect the identity you sign in as.
High availability and storage
- Database. MLflow stores all experiment/run/registry metadata in the external PostgreSQL you configured. Use a highly available PostgreSQL service for production; the tracking server itself is stateless with respect to metadata.
- Artifacts. The default
artifacts.defaultArtifactRoot: /mlflow/artifactsis anemptyDirlocal to the tracking-server pod. It is not durable, and external clients cannot use the server-local path reliably. Starting with v3.13.0, enableartifacts.s3for production before users log artifacts or register models. With the defaultproxied: true, the tracking server stores the S3 credentials and clients upload through the authenticated MLflow endpoint. - Replicas. The default deployment is single-replica. It is not a multi-replica high-availability deployment unless your release notes state otherwise.
Create the referenced credentials Secret in the tracking-server namespace before applying the MLflow resource:
The bucket must already exist. Leave endpointUrl empty for AWS S3. For S3-compatible services, set it to the service endpoint. You can also set region, ignoreTls, and prefix under artifacts.s3 when required.
Bearer-token clients
Starting with v3.13.0, the operator enables spec.auth.oauth.skipJwtBearerTokens: true by default, allowing the MLflow Python SDK to authenticate with a Dex id token through MLFLOW_TRACKING_TOKEN. If an existing installation overrides the OAuth settings, verify that this field remains enabled. See Verify the token method in the SDK guide. The browser session-cookie method also remains available.
Upgrade from v3.10.x to v3.13.0
The stable OLM channel supports this upgrade. Before approving it, back up the PostgreSQL backend database and the S3 artifact bucket. The backend-store schema migration runs automatically when the tracking server starts.
After the upgrade, keep spec.auth.kubernetes.authorizationMode: user_identity_token and spec.auth.oauth.skipJwtBearerTokens: true. These defaults preserve the documented Dex bearer-token flow.
Troubleshooting
- If the MLFlow Tools-menu entry is missing, verify that the
aml-mlflow-menu-configConfigMapexists in the tracking-server namespace and has the labelaml.cpaas.io/centralMenuItem: "true". - If the server does not start and the pod logs
Workspace '<name>' not found, thedefaultWorkspacenamespace does not exist or is not labelledmlflow-enabled=true. Create and label it, then restart the pod. - If the server does not start for another reason, verify PostgreSQL connectivity, that the
mlflowdatabase exists, and that the credentials inspec.pg*are correct. - If artifact uploads or model registration fail, verify that
artifacts.s3.enabledistrue, the bucket exists, and the referenced credentials Secret and key names are correct. - If a workspace is not visible, verify that its namespace matches the configured
workspaceLabelSelector. - If requests are denied (
403 PERMISSION_DENIED), check the user's KubernetesRoleBindingin the workspace namespace — see Workspaces and access control.