Skip to content

mlflow-operator: Dataflow

Controller Watches

Kubernetes resources this controller monitors for changes. Each watch triggers reconciliation when the watched resource is created, updated, or deleted.

Type GVK Source
For api/v1/MLflow internal/controller/mlflow_controller.go:414
Owns /v1/PersistentVolumeClaim internal/controller/mlflow_controller.go:421
Owns /v1/Secret internal/controller/mlflow_controller.go:418
Owns /v1/Service internal/controller/mlflow_controller.go:419
Owns /v1/ServiceAccount internal/controller/mlflow_controller.go:420
Owns apis/v1/HTTPRoute internal/controller/mlflow_controller.go:450
Owns apps/v1/Deployment internal/controller/mlflow_controller.go:415
Owns batch/v1/CronJob internal/controller/mlflow_controller.go:417
Owns batch/v1/Job internal/controller/mlflow_controller.go:416
Owns console/v1/ConsoleLink internal/controller/mlflow_controller.go:442
Owns monitoring/v1/ServiceMonitor internal/controller/mlflow_controller.go:458
Owns rbac.authorization.k8s.io/v1/ClusterRoleBinding internal/controller/mlflow_controller.go:427
Watches rbac.authorization.k8s.io/v1/ClusterRole internal/controller/mlflow_controller.go:426

Programmatic Resource Operations

Verb Kind Group Condition
update MLflow api

Reconciliation Flow

How the controller interacts with the Kubernetes API during reconciliation.

sequenceDiagram
    %% Static dataflow for mlflow-operator

    participant KubernetesAPI as Kubernetes API
    participant mlflow_operator_controller_manager as mlflow-operator-controller-manager
    participant postgres_deployment as postgres-deployment

    KubernetesAPI->>+mlflow_operator_controller_manager: Watch MLflow (reconcile)
    mlflow_operator_controller_manager->>KubernetesAPI: Create/Update PersistentVolumeClaim
    mlflow_operator_controller_manager->>KubernetesAPI: Create/Update Secret
    mlflow_operator_controller_manager->>KubernetesAPI: Create/Update Service
    mlflow_operator_controller_manager->>KubernetesAPI: Create/Update ServiceAccount
    mlflow_operator_controller_manager->>KubernetesAPI: Create/Update HTTPRoute
    mlflow_operator_controller_manager->>KubernetesAPI: Create/Update Deployment
    mlflow_operator_controller_manager->>KubernetesAPI: Create/Update CronJob
    mlflow_operator_controller_manager->>KubernetesAPI: Create/Update Job
    mlflow_operator_controller_manager->>KubernetesAPI: Create/Update ConsoleLink
    mlflow_operator_controller_manager->>KubernetesAPI: Create/Update ServiceMonitor
    mlflow_operator_controller_manager->>KubernetesAPI: Create/Update ClusterRoleBinding
    KubernetesAPI-->>+mlflow_operator_controller_manager: Watch ClusterRole (informer)

    Note over mlflow_operator_controller_manager: Exposed Services
    Note right of mlflow_operator_controller_manager: minio-service:9000/TCP [https]
    Note right of mlflow_operator_controller_manager: mlflow-operator-controller-manager-metrics-service:8443/TCP [https]
    Note right of mlflow_operator_controller_manager: postgres-service:5432/TCP []

    Note over KubernetesAPI: Defined CRDs
    Note right of KubernetesAPI: MLflowConfig (mlflow.kubeflow.org/v1)
    Note right of KubernetesAPI: MLflow (mlflow.opendatahub.io/v1)

HTTP Endpoints

Method Path Source
* / .gopath-loader/pkg/mod/golang.org/x/net@v0.49.0/webdav/litmus_test_server.go:83
* / .gomod-cache/golang.org/x/tools@v0.40.0/go/types/internal/play/play.go:46
* / .gomod-cache/golang.org/x/tools@v0.40.0/cmd/present/dir.go:23
* / .gomod-cache/github.com/google/pprof@v0.0.0-20250403155104-27863c87afa6/internal/driver/webui.go:212
* / .gomod-cache/golang.org/x/net@v0.49.0/webdav/litmus_test_server.go:83
* / .gopath-loader/pkg/mod/github.com/google/pprof@v0.0.0-20250403155104-27863c87afa6/internal/driver/webui.go:212
* / .gopath-loader/pkg/mod/golang.org/x/tools@v0.40.0/go/types/internal/play/play.go:46
* / .gopath-loader/pkg/mod/golang.org/x/tools@v0.40.0/cmd/present/dir.go:23
GET / .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/server/routes/version.go:44
GET / .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/endpoints/discovery/version.go:67
GET / .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/endpoints/discovery/root.go:154
GET / .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/endpoints/discovery/aggregated/wrapper.go:58
GET / .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/endpoints/discovery/group.go:57
GET / .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/server/routes/version.go:44
GET / .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/endpoints/discovery/legacy.go:59
GET / .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/endpoints/discovery/legacy.go:59
GET / .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/endpoints/discovery/root.go:154
GET / .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/endpoints/discovery/version.go:67
GET / .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/endpoints/discovery/aggregated/wrapper.go:58
GET / .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/endpoints/discovery/group.go:57
* /abort .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:63
* /abort .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:63
* /aggregated-nonprimary-procs-report .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:60
* /aggregated-nonprimary-procs-report .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:60
* /before-suite-completed .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:57
* /before-suite-completed .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:57
* /before-suite-state .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:58
* /before-suite-state .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:58
* /compile .gomod-cache/golang.org/x/tools@v0.40.0/playground/playground.go:23
* /compile .gopath-loader/pkg/mod/golang.org/x/tools@v0.40.0/playground/playground.go:23
* /counter .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:61
* /counter .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:61
* /debug/flags .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:55
* /debug/flags .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:55
* /debug/flags/ .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:56
* /debug/flags/ .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:56
* /debug/pprof .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:44
* /debug/pprof .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:44
* /debug/pprof/ .gopath-loader/pkg/mod/sigs.k8s.io/controller-runtime@v0.22.4/pkg/manager/internal.go:316
* /debug/pprof/ .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:45
* /debug/pprof/ .gomod-cache/sigs.k8s.io/controller-runtime@v0.22.4/pkg/manager/internal.go:316
* /debug/pprof/ .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:45
* /debug/pprof/cmdline .gopath-loader/pkg/mod/sigs.k8s.io/controller-runtime@v0.22.4/pkg/manager/internal.go:317
* /debug/pprof/cmdline .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:46
* /debug/pprof/cmdline .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:46
* /debug/pprof/cmdline .gomod-cache/sigs.k8s.io/controller-runtime@v0.22.4/pkg/manager/internal.go:317
* /debug/pprof/profile .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:47
* /debug/pprof/profile .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:47
* /debug/pprof/profile .gopath-loader/pkg/mod/sigs.k8s.io/controller-runtime@v0.22.4/pkg/manager/internal.go:318
* /debug/pprof/profile .gomod-cache/sigs.k8s.io/controller-runtime@v0.22.4/pkg/manager/internal.go:318
* /debug/pprof/symbol .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:48
* /debug/pprof/symbol .gopath-loader/pkg/mod/sigs.k8s.io/controller-runtime@v0.22.4/pkg/manager/internal.go:319
* /debug/pprof/symbol .gomod-cache/sigs.k8s.io/controller-runtime@v0.22.4/pkg/manager/internal.go:319
* /debug/pprof/symbol .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:48
* /debug/pprof/trace .gopath-loader/pkg/mod/sigs.k8s.io/controller-runtime@v0.22.4/pkg/manager/internal.go:320
* /debug/pprof/trace .gomod-cache/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:49
* /debug/pprof/trace .gomod-cache/sigs.k8s.io/controller-runtime@v0.22.4/pkg/manager/internal.go:320
* /debug/pprof/trace .gopath-loader/pkg/mod/k8s.io/apiserver@v0.34.3/pkg/server/routes/debugsocket.go:49
* /did-run .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:49
* /did-run .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:49
* /emit-output .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:51
* /emit-output .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:51
* /have-nonprimary-procs-finished .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:59
* /have-nonprimary-procs-finished .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:59
* /main.css .gopath-loader/pkg/mod/golang.org/x/tools@v0.40.0/go/types/internal/play/play.go:48
* /main.css .gomod-cache/golang.org/x/tools@v0.40.0/go/types/internal/play/play.go:48
* /main.js .gomod-cache/golang.org/x/tools@v0.40.0/go/types/internal/play/play.go:47
* /main.js .gopath-loader/pkg/mod/golang.org/x/tools@v0.40.0/go/types/internal/play/play.go:47
* /play.js .gopath-loader/pkg/mod/golang.org/x/tools@v0.40.0/cmd/present/play.go:43
* /play.js .gomod-cache/golang.org/x/tools@v0.40.0/cmd/present/play.go:43
* /progress-report .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:52
* /progress-report .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:52
* /report-before-suite-completed .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:55
* /report-before-suite-completed .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:55
* /report-before-suite-state .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:56
* /report-before-suite-state .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:56
* /select.json .gopath-loader/pkg/mod/golang.org/x/tools@v0.40.0/go/types/internal/play/play.go:49
* /select.json .gomod-cache/golang.org/x/tools@v0.40.0/go/types/internal/play/play.go:49
* /socket .gomod-cache/golang.org/x/tools@v0.40.0/cmd/present/play.go:59
* /socket .gopath-loader/pkg/mod/golang.org/x/tools@v0.40.0/cmd/present/play.go:59
* /static/ .gomod-cache/golang.org/x/tools@v0.40.0/cmd/present/main.go:98
* /static/ .gopath-loader/pkg/mod/golang.org/x/tools@v0.40.0/cmd/present/main.go:98
* /suite-did-end .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:50
* /suite-did-end .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:50
* /suite-will-begin .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:48
* /suite-will-begin .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:48
* /ui/ .gopath-loader/pkg/mod/github.com/google/pprof@v0.0.0-20250403155104-27863c87afa6/internal/driver/webui.go:211
* /ui/ .gomod-cache/github.com/google/pprof@v0.0.0-20250403155104-27863c87afa6/internal/driver/webui.go:211
* /up .gopath-loader/pkg/mod/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:62
* /up .gomod-cache/github.com/onsi/ginkgo/v2@v2.27.2/internal/parallel_support/http_server.go:62
GET /{user-id} .gomod-cache/github.com/emicklei/go-restful/v3@v3.13.0/doc.go:19
GET /{user-id} .gopath-loader/pkg/mod/github.com/emicklei/go-restful/v3@v3.13.0/doc.go:19
GET /{user-id} .gopath-loader/pkg/mod/github.com/emicklei/go-restful/v3@v3.13.0/doc.go:82
GET /{user-id} .gomod-cache/github.com/emicklei/go-restful/v3@v3.13.0/doc.go:82
* G .gomod-cache/golang.org/x/exp@v0.0.0-20240719175910-8a7402abbf56/slog/slogtest/slogtest.go:171
* G .gomod-cache/golang.org/x/exp@v0.0.0-20240719175910-8a7402abbf56/slog/slogtest/slogtest.go:191
* G .gopath-loader/pkg/mod/golang.org/x/exp@v0.0.0-20240719175910-8a7402abbf56/slog/slogtest/slogtest.go:171
* G .gopath-loader/pkg/mod/golang.org/x/exp@v0.0.0-20240719175910-8a7402abbf56/slog/slogtest/slogtest.go:113
* G .gopath-loader/pkg/mod/golang.org/x/exp@v0.0.0-20240719175910-8a7402abbf56/slog/slogtest/slogtest.go:102
* G .gopath-loader/pkg/mod/golang.org/x/exp@v0.0.0-20240719175910-8a7402abbf56/slog/slogtest/slogtest.go:191
* G .gomod-cache/golang.org/x/exp@v0.0.0-20240719175910-8a7402abbf56/slog/slogtest/slogtest.go:102
* G .gomod-cache/golang.org/x/exp@v0.0.0-20240719175910-8a7402abbf56/slog/slogtest/slogtest.go:113
* POST .gopath-loader/pkg/mod/go.opentelemetry.io/proto/otlp@v1.9.0/collector/trace/v1/trace_service.pb.gw.go:140
* POST .gopath-loader/pkg/mod/go.opentelemetry.io/proto/otlp@v1.9.0/collector/logs/v1/logs_service.pb.gw.go:140
* POST .gopath-loader/pkg/mod/go.opentelemetry.io/proto/otlp@v1.9.0/collector/logs/v1/logs_service.pb.gw.go:74
* POST .gopath-loader/pkg/mod/go.opentelemetry.io/proto/otlp@v1.9.0/collector/metrics/v1/metrics_service.pb.gw.go:74
* POST .gopath-loader/pkg/mod/go.opentelemetry.io/proto/otlp@v1.9.0/collector/metrics/v1/metrics_service.pb.gw.go:140
* POST .gopath-loader/pkg/mod/go.opentelemetry.io/proto/otlp@v1.9.0/collector/trace/v1/trace_service.pb.gw.go:74
* POST .gomod-cache/go.opentelemetry.io/proto/otlp@v1.9.0/collector/trace/v1/trace_service.pb.gw.go:140
* POST .gomod-cache/go.opentelemetry.io/proto/otlp@v1.9.0/collector/trace/v1/trace_service.pb.gw.go:74
* POST .gomod-cache/go.opentelemetry.io/proto/otlp@v1.9.0/collector/metrics/v1/metrics_service.pb.gw.go:140
* POST .gomod-cache/go.opentelemetry.io/proto/otlp@v1.9.0/collector/metrics/v1/metrics_service.pb.gw.go:74
* POST .gomod-cache/go.opentelemetry.io/proto/otlp@v1.9.0/collector/logs/v1/logs_service.pb.gw.go:140
* POST .gomod-cache/go.opentelemetry.io/proto/otlp@v1.9.0/collector/logs/v1/logs_service.pb.gw.go:74
* header .gomod-cache/golang.org/x/net@v0.49.0/quic/qlog.go:211
* header .gomod-cache/golang.org/x/net@v0.49.0/quic/qlog.go:187
* header .gomod-cache/golang.org/x/net@v0.49.0/quic/qlog.go:165
* header .gopath-loader/pkg/mod/golang.org/x/net@v0.49.0/quic/qlog.go:211
* header .gopath-loader/pkg/mod/golang.org/x/net@v0.49.0/quic/qlog.go:267
* header .gopath-loader/pkg/mod/golang.org/x/net@v0.49.0/quic/qlog.go:187
* header .gomod-cache/golang.org/x/net@v0.49.0/quic/qlog.go:267
* header .gopath-loader/pkg/mod/golang.org/x/net@v0.49.0/quic/qlog.go:165
* raw .gopath-loader/pkg/mod/golang.org/x/net@v0.49.0/quic/qlog.go:172
* raw .gomod-cache/golang.org/x/net@v0.49.0/quic/qlog.go:217
* raw .gomod-cache/golang.org/x/net@v0.49.0/quic/qlog.go:193
* raw .gopath-loader/pkg/mod/golang.org/x/net@v0.49.0/quic/qlog.go:193
* raw .gomod-cache/golang.org/x/net@v0.49.0/quic/qlog.go:172
* raw .gopath-loader/pkg/mod/golang.org/x/net@v0.49.0/quic/qlog.go:217
* request .gopath-loader/pkg/mod/golang.org/x/exp@v0.0.0-20240719175910-8a7402abbf56/slog/doc.go:137
* request .gomod-cache/golang.org/x/exp@v0.0.0-20240719175910-8a7402abbf56/slog/doc.go:137
* vantage_point .gopath-loader/pkg/mod/golang.org/x/net@v0.49.0/quic/qlog.go:96
* vantage_point .gomod-cache/golang.org/x/net@v0.49.0/quic/qlog.go:96

Configuration

ConfigMaps and Helm values that control this component's runtime behavior.

Helm

Chart: mlflow v0.1.0