Skip to content

feast: 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/FeatureStore infra/feast-operator/internal/controller/featurestore_controller.go:350
Owns /v1/ConfigMap infra/feast-operator/internal/controller/featurestore_controller.go:351
Owns /v1/PersistentVolumeClaim infra/feast-operator/internal/controller/featurestore_controller.go:354
Owns /v1/Service infra/feast-operator/internal/controller/featurestore_controller.go:353
Owns /v1/ServiceAccount infra/feast-operator/internal/controller/featurestore_controller.go:355
Owns apps/v1/Deployment infra/feast-operator/internal/controller/featurestore_controller.go:352
Owns autoscaling/v2/HorizontalPodAutoscaler infra/feast-operator/internal/controller/featurestore_controller.go:359
Owns batch/v1/CronJob infra/feast-operator/internal/controller/featurestore_controller.go:358
Owns policy/v1/PodDisruptionBudget infra/feast-operator/internal/controller/featurestore_controller.go:360
Owns rbac.authorization.k8s.io/v1/Role infra/feast-operator/internal/controller/featurestore_controller.go:357
Owns rbac.authorization.k8s.io/v1/RoleBinding infra/feast-operator/internal/controller/featurestore_controller.go:356
Owns route/v1/Route infra/feast-operator/internal/controller/featurestore_controller.go:364
Watches api/v1/FeatureStore infra/feast-operator/internal/controller/featurestore_controller.go:361

Reconciliation Flow

How the controller interacts with the Kubernetes API during reconciliation.

sequenceDiagram
    %% Static dataflow for feast

    participant KubernetesAPI as Kubernetes API
    participant controller_manager as controller-manager

    KubernetesAPI->>+controller_manager: Watch FeatureStore (reconcile)
    controller_manager->>KubernetesAPI: Create/Update ConfigMap
    controller_manager->>KubernetesAPI: Create/Update PersistentVolumeClaim
    controller_manager->>KubernetesAPI: Create/Update Service
    controller_manager->>KubernetesAPI: Create/Update ServiceAccount
    controller_manager->>KubernetesAPI: Create/Update Deployment
    controller_manager->>KubernetesAPI: Create/Update HorizontalPodAutoscaler
    controller_manager->>KubernetesAPI: Create/Update CronJob
    controller_manager->>KubernetesAPI: Create/Update PodDisruptionBudget
    controller_manager->>KubernetesAPI: Create/Update Role
    controller_manager->>KubernetesAPI: Create/Update RoleBinding
    controller_manager->>KubernetesAPI: Create/Update Route
    KubernetesAPI-->>+controller_manager: Watch FeatureStore (informer)

    Note over controller_manager: Exposed Services
    Note right of controller_manager: uvicorn-server:6566/TCP []

HTTP Endpoints

Method Path Source
* / .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:188
* / .gopath-loader/pkg/mod/golang.org/x/tools@v0.38.0/cmd/present/dir.go:23
* / .gomod-cache/github.com/aws/aws-sdk-go-v2@v1.36.4/internal/awstesting/certificate_utils.go:225
* / .gomod-cache/github.com/google/s2a-go@v0.1.9/tools/internal_ci/test_gae/main.go:79
* / .gopath-loader/pkg/mod/golang.org/x/tools@v0.38.0/go/types/internal/play/play.go:46
* / .gomod-cache/github.com/googleapis/enterprise-certificate-proxy@v0.3.7/http_proxy/main.go:329
* / .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:130
* / .gopath-loader/pkg/mod/golang.org/x/telemetry@v0.0.0-20251008203120-078029d740a8/cmd/gotelemetry/internal/view/view.go:57
* / .gopath-loader/pkg/mod/golang.org/x/net@v0.47.0/webdav/litmus_test_server.go:83
* / .gomod-cache/golang.org/x/tools@v0.38.0/cmd/present/dir.go:23
* / .gomod-cache/golang.org/x/tools@v0.38.0/go/types/internal/play/play.go:46
* / .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:130
* / .gopath-loader/pkg/mod/github.com/googleapis/enterprise-certificate-proxy@v0.3.7/http_proxy/main.go:329
* / .gomod-cache/golang.org/x/net@v0.47.0/webdav/litmus_test_server.go:83
* / .gopath-loader/pkg/mod/github.com/aws/aws-sdk-go-v2@v1.36.4/internal/awstesting/certificate_utils.go:225
* / .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:188
* / .gomod-cache/golang.org/x/telemetry@v0.0.0-20251008203120-078029d740a8/cmd/gotelemetry/internal/view/view.go:57
* / .gopath-loader/pkg/mod/github.com/google/s2a-go@v0.1.9/tools/internal_ci/test_gae/main.go:79
* /args .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:136
* /args .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:136
* /authority.cer .gopath-loader/pkg/mod/cloud.google.com/go@v0.123.0/httpreplay/cmd/httpr/httpr.go:76
* /authority.cer .gomod-cache/cloud.google.com/go@v0.123.0/httpreplay/cmd/httpr/httpr.go:76
* /bar .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/doc.go:67
* /bar .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/doc.go:67
* /block .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:210
* /block .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:210
* /chan .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:134
* /chan .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:134
* /compile .gomod-cache/golang.org/x/tools@v0.38.0/playground/playground.go:23
* /compile .gopath-loader/pkg/mod/golang.org/x/tools@v0.38.0/playground/playground.go:23
* /counter .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:129
* /counter .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:129
* /date .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:138
* /date .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:138
* /debug/vars .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/expvar/expvar.go:382
* /debug/vars .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/expvar/expvar.go:382
* /flags .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:135
* /flags .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:135
* /foo .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/doc.go:65
* /foo .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/doc.go:65
* /get-online-features go/internal/feast/server/http_server.go:388
* /get-online-features go/internal/feast/server/http_server.go:402
* /go/ .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:132
* /go/ .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:132
* /go/hello .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:137
* /go/hello .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/net/http/triv.go:137
* /goroutine .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:203
* /goroutine .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:203
* /goroutines .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:202
* /goroutines .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:202
* /health go/internal/feast/server/http_server.go:389
* /health go/internal/feast/server/http_server.go:403
* /initial .gomod-cache/cloud.google.com/go@v0.123.0/httpreplay/cmd/httpr/httpr.go:77
* /initial .gopath-loader/pkg/mod/cloud.google.com/go@v0.123.0/httpreplay/cmd/httpr/httpr.go:77
* /io .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:209
* /io .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:209
* /jsontrace .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:198
* /jsontrace .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:198
* /main.css .gopath-loader/pkg/mod/golang.org/x/tools@v0.38.0/go/types/internal/play/play.go:48
* /main.css .gomod-cache/golang.org/x/tools@v0.38.0/go/types/internal/play/play.go:48
* /main.js .gopath-loader/pkg/mod/golang.org/x/tools@v0.38.0/go/types/internal/play/play.go:47
* /main.js .gomod-cache/golang.org/x/tools@v0.38.0/go/types/internal/play/play.go:47
* /metrics go/main.go:264
* /metrics go/main.go:204
* /mmu .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:206
* /mmu .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:206
* /play.js .gomod-cache/golang.org/x/tools@v0.38.0/cmd/present/play.go:43
* /play.js .gopath-loader/pkg/mod/golang.org/x/tools@v0.38.0/cmd/present/play.go:43
* /readyz .gomod-cache/github.com/googleapis/enterprise-certificate-proxy@v0.3.7/http_proxy/main.go:326
* /readyz .gopath-loader/pkg/mod/github.com/googleapis/enterprise-certificate-proxy@v0.3.7/http_proxy/main.go:326
* /regionblock .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:216
* /regionblock .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:216
* /regionio .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:215
* /regionio .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:215
* /regionsched .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:218
* /regionsched .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:218
* /regionsyscall .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:217
* /regionsyscall .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:217
* /sched .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:212
* /sched .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:212
* /select.json .gopath-loader/pkg/mod/golang.org/x/tools@v0.38.0/go/types/internal/play/play.go:49
* /select.json .gomod-cache/golang.org/x/tools@v0.38.0/go/types/internal/play/play.go:49
* /socket .gomod-cache/golang.org/x/tools@v0.38.0/cmd/present/play.go:59
* /socket .gopath-loader/pkg/mod/golang.org/x/tools@v0.38.0/cmd/present/play.go:59
* /static/ .gomod-cache/golang.org/x/tools@v0.38.0/cmd/present/main.go:98
* /static/ .gopath-loader/pkg/mod/golang.org/x/tools@v0.38.0/cmd/present/main.go:98
* /static/ .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:199
* /static/ .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:199
* /syscall .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:211
* /syscall .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:211
* /trace .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:197
* /trace .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:197
* /userregion .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:222
* /userregion .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:222
* /userregions .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:221
* /userregions .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:221
* /usertask .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:226
* /usertask .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:226
* /usertasks .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:225
* /usertasks .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/cmd/trace/main.go:225
* G .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/testing/slogtest/slogtest.go:203
* G .gopath-loader/pkg/mod/golang.org/x/exp@v0.0.0-20240909161429-701f63a606c0/slog/slogtest/slogtest.go:113
* G .gomod-cache/golang.org/x/exp@v0.0.0-20240909161429-701f63a606c0/slog/slogtest/slogtest.go:191
* G .gomod-cache/golang.org/x/exp@v0.0.0-20240909161429-701f63a606c0/slog/slogtest/slogtest.go:171
* G .gopath-loader/pkg/mod/golang.org/x/exp@v0.0.0-20240909161429-701f63a606c0/slog/slogtest/slogtest.go:191
* G .gopath-loader/pkg/mod/golang.org/x/exp@v0.0.0-20240909161429-701f63a606c0/slog/slogtest/slogtest.go:171
* G .gopath-loader/pkg/mod/golang.org/x/exp@v0.0.0-20240909161429-701f63a606c0/slog/slogtest/slogtest.go:102
* G .gomod-cache/golang.org/x/exp@v0.0.0-20240909161429-701f63a606c0/slog/slogtest/slogtest.go:113
* G .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/testing/slogtest/slogtest.go:225
* G .gomod-cache/golang.org/x/exp@v0.0.0-20240909161429-701f63a606c0/slog/slogtest/slogtest.go:102
* G .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/testing/slogtest/slogtest.go:97
* G .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/testing/slogtest/slogtest.go:109
* G .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/testing/slogtest/slogtest.go:109
* G .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/testing/slogtest/slogtest.go:97
* G .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/testing/slogtest/slogtest.go:203
* G .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/testing/slogtest/slogtest.go:225
* GET /debug/vars .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/expvar/expvar.go:384
* GET /debug/vars .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/expvar/expvar.go:384
* POST .gomod-cache/go.opentelemetry.io/proto/otlp@v1.7.1/collector/metrics/v1/metrics_service.pb.gw.go:74
* POST .gopath-loader/pkg/mod/go.opentelemetry.io/proto/otlp@v1.7.1/collector/logs/v1/logs_service.pb.gw.go:74
* POST .gopath-loader/pkg/mod/go.opentelemetry.io/proto/otlp@v1.7.1/collector/logs/v1/logs_service.pb.gw.go:140
* POST .gopath-loader/pkg/mod/go.opentelemetry.io/proto/otlp@v1.7.1/collector/metrics/v1/metrics_service.pb.gw.go:74
* POST .gomod-cache/go.opentelemetry.io/proto/otlp@v1.7.1/collector/metrics/v1/metrics_service.pb.gw.go:140
* POST .gomod-cache/go.opentelemetry.io/proto/otlp@v1.7.1/collector/trace/v1/trace_service.pb.gw.go:140
* POST .gomod-cache/go.opentelemetry.io/proto/otlp@v1.7.1/collector/trace/v1/trace_service.pb.gw.go:74
* POST .gopath-loader/pkg/mod/go.opentelemetry.io/proto/otlp@v1.7.1/collector/metrics/v1/metrics_service.pb.gw.go:140
* POST .gopath-loader/pkg/mod/go.opentelemetry.io/proto/otlp@v1.7.1/collector/trace/v1/trace_service.pb.gw.go:74
* POST .gopath-loader/pkg/mod/go.opentelemetry.io/proto/otlp@v1.7.1/collector/trace/v1/trace_service.pb.gw.go:140
* POST .gomod-cache/go.opentelemetry.io/proto/otlp@v1.7.1/collector/logs/v1/logs_service.pb.gw.go:74
* POST .gomod-cache/go.opentelemetry.io/proto/otlp@v1.7.1/collector/logs/v1/logs_service.pb.gw.go:140
* header .gomod-cache/golang.org/x/net@v0.47.0/quic/qlog.go:165
* header .gopath-loader/pkg/mod/golang.org/x/net@v0.47.0/quic/qlog.go:165
* header .gopath-loader/pkg/mod/golang.org/x/net@v0.47.0/quic/qlog.go:267
* header .gopath-loader/pkg/mod/golang.org/x/net@v0.47.0/quic/qlog.go:211
* header .gomod-cache/golang.org/x/net@v0.47.0/quic/qlog.go:267
* header .gopath-loader/pkg/mod/golang.org/x/net@v0.47.0/quic/qlog.go:187
* header .gomod-cache/golang.org/x/net@v0.47.0/quic/qlog.go:211
* header .gomod-cache/golang.org/x/net@v0.47.0/quic/qlog.go:187
* raw .gopath-loader/pkg/mod/golang.org/x/net@v0.47.0/quic/qlog.go:217
* raw .gopath-loader/pkg/mod/golang.org/x/net@v0.47.0/quic/qlog.go:172
* raw .gomod-cache/golang.org/x/net@v0.47.0/quic/qlog.go:193
* raw .gomod-cache/golang.org/x/net@v0.47.0/quic/qlog.go:172
* raw .gomod-cache/golang.org/x/net@v0.47.0/quic/qlog.go:217
* raw .gopath-loader/pkg/mod/golang.org/x/net@v0.47.0/quic/qlog.go:193
* request .gopath-loader/pkg/mod/golang.org/x/exp@v0.0.0-20240909161429-701f63a606c0/slog/doc.go:137
* request .gomod-cache/golang.org/x/exp@v0.0.0-20240909161429-701f63a606c0/slog/doc.go:137
* request .gomod-cache/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/log/slog/doc.go:137
* request .gopath-loader/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.linux-amd64/src/log/slog/doc.go:137
* vantage_point .gomod-cache/golang.org/x/net@v0.47.0/quic/qlog.go:96
* vantage_point .gopath-loader/pkg/mod/golang.org/x/net@v0.47.0/quic/qlog.go:96

Configuration

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

Helm

Chart: feast v0.63.0