docs/adr/ADR-0006-kubernetes-operator.md
Accepted
As the Feast project grew, deploying a fully functional Feature Store in a production-like manner became increasingly difficult. Existing installers required many manual operations that led to configuration errors. Users needed a simpler way to install and maintain Feature Store environments, especially with features like RBAC.
The existing Helm-based operator had limitations in handling complex installation requirements. A more capable operator was needed to manage the full lifecycle of Feast deployments on Kubernetes.
Build a Go Operator using the operator-sdk framework with a cluster-scoped controller and a namespaced FeatureStore Custom Resource Definition (CRD).
The operator manages Feast through a single CRD that defines the entire feature store deployment:
apiVersion: feast.dev/v1alpha1
kind: FeatureStore
metadata:
name: example
namespace: feast
spec:
feastProject: my-project
auth:
kubernetes:
roles: [reader, writer]
services:
registry:
replicas: 1
persistence:
file:
pvc:
capacity: 5Gi
onlineStore:
replicas: 2
persistence:
postgresql:
secretRef: online-store-creds
offlineStore:
replicas: 3
feastApplyJob:
configMapRef: feast-definitions
feature_store.yaml from the CR spec, including only relevant sections for each server type.feast apply Job can be triggered from a ConfigMap or Git repo to initialize the registry.FeatureStore) instead of separate CRDs per service type. All services are part of a functioning Feature Store and should be managed together.feature_store.yaml entirely to ensure consistency and validation (e.g., remote types are only used where appropriate).infra/feast-operator/