Skip to content

feat: Horizontal scaling support to the Feast operator#6000

Merged
ntkathole merged 5 commits intofeast-dev:masterfrom
ntkathole:operator_hpa
Feb 27, 2026
Merged

feat: Horizontal scaling support to the Feast operator#6000
ntkathole merged 5 commits intofeast-dev:masterfrom
ntkathole:operator_hpa

Conversation

@ntkathole
Copy link
Member

@ntkathole ntkathole commented Feb 21, 2026

What this PR does / why we need it:

  • Add a scaling field to the FeatureStore CRD that supports static replica counts and HPA-based autoscaling for the Feast deployment
  • Validate that file-based persistence (SQLite, DuckDB, registry.db) is rejected when horizontal scaling is configured, since these backends don't support concurrent access
  • Automatically switch deployment strategy from Recreate to RollingUpdate when scaling is enabled to ensure zero-downtime scaling events

CRD & API

  • Added ScalingConfig (with replicas and autoscaling fields) to FeatureStoreServices
  • Added AutoscalingConfig with minReplicas, maxReplicas, metrics, and behavior (maps to HPA v2 spec)
  • Added ScalingStatus to FeatureStoreStatus reporting currentReplicas and desiredReplicas
  • CEL validation rule enforces mutual exclusivity of replicas and autoscaling

Controller

  • New scaling.go with validation, HPA lifecycle management (create/update/delete), replica calculation, and status updates
  • Helper functions isScalingEnabled() and isFilePersistence() in util.go
  • RBAC for horizontalpodautoscalers (get, list, watch, create, update, delete)
  • Controller watches owned HPA resources via Owns()
  • Deployment strategy defaults to RollingUpdate when scaling is enabled

Documentation

  • New "Horizontal Scaling with the Feast Operator" section in docs/how-to-guides/scaling-feast.md with static replicas, HPA, and KEDA examples
  • Updated docs/how-to-guides/feast-on-kubernetes.md with scaling references
  • Regenerated CRD API reference (ref.md) with new types
  • Sample CRs: v1_featurestore_scaling_static.yaml and v1_featurestore_scaling_hpa.yaml

Open with Devin

@ntkathole ntkathole self-assigned this Feb 21, 2026
@ntkathole ntkathole requested a review from a team as a code owner February 21, 2026 16:14
Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 6 additional findings.

Open in Devin Review

@ntkathole ntkathole force-pushed the operator_hpa branch 2 times, most recently from 76136d4 to f376ea2 Compare February 21, 2026 16:48
Copy link
Member

@franciscojavierarceo franciscojavierarceo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It'd be good to do a blog post about scaling the feature server with KEDA.

@ntkathole ntkathole force-pushed the operator_hpa branch 2 times, most recently from 90529b0 to 27e1784 Compare February 25, 2026 08:30
devin-ai-integration[bot]

This comment was marked as resolved.

Copy link

@astefanutti astefanutti left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @ntkathole, LGTM 👍🏼.

@ntkathole
Copy link
Member Author

@Srihari1192 Ready for testing

Copy link
Contributor

@Srihari1192 Srihari1192 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ntkathole Tested with new changes, looks good to me
Thanks

@ntkathole ntkathole merged commit 3ec13e6 into feast-dev:master Feb 27, 2026
21 of 23 checks passed
franciscojavierarceo pushed a commit that referenced this pull request Mar 10, 2026
# [0.61.0](v0.60.0...v0.61.0) (2026-03-10)

### Bug Fixes

* Add grpcio dependency group to transformation server Dockerfile ([2c2150a](2c2150a))
* Add https readiness check for rest-registry tests ([ea85e63](ea85e63))
* Add website build check for PRs and fix blog frontmatter YAML error ([#6079](#6079)) ([30a3a43](30a3a43))
* Added MLflow metric charts across feature selection ([#6080](#6080)) ([a403361](a403361))
* Check duplicate names for feature view across types ([#5999](#5999)) ([95b9af8](95b9af8))
* Fix integration tests ([#6046](#6046)) ([02d5548](02d5548))
* Fix non-specific label selector on metrics service ([a1a160d](a1a160d))
* Fixed IntegrityError on SqlRegistry ([#6047](#6047)) ([325e148](325e148))
* Fixed pre-commit check ([114b7db](114b7db))
* Fixed uv cache permission error for docker build on mac ([ad807be](ad807be))
* Fixes a `PydanticDeprecatedSince20` warning for trino_offline_store ([#5991](#5991)) ([abfd18a](abfd18a))
* Integration test failures ([#6040](#6040)) ([9165870](9165870))
* Ray offline store tests are duplicated across 3 workflows ([54f705a](54f705a))
* Reenable tests ([#6036](#6036)) ([82ee7f8](82ee7f8))
* Use commitlint pre-commit hook instead of a separate action ([35a81e7](35a81e7))

### Features

* Add complex type support (Map, JSON, Struct) with schema validation ([#5974](#5974)) ([1200dbf](1200dbf))
* Add materialization, feature freshness, request latency, and push metrics to feature server ([2c6be18](2c6be18))
* Add non-entity retrieval support for ClickHouse offline store ([4d08ddc](4d08ddc)), closes [#5835](#5835)
* Add OnlineStore for MongoDB ([#6025](#6025)) ([bf4e3fa](bf4e3fa)), closes [golang/go#74462](golang/go#74462)
* Added CodeQL SAST scanning and detect-secrets pre-commit hook ([547b516](547b516))
* Adding optional name to Aggregation (feast-dev[#5994](#5994)) ([#6083](#6083)) ([56469f7](56469f7))
* Feature Server High-Availability on Kubernetes ([#6028](#6028)) ([9c07b4c](9c07b4c)), closes [Hi#Availability](https://github.com/Hi/issues/Availability) [Hi#Availability](https://github.com/Hi/issues/Availability)
* **go:** Implement metrics and tracing for http and grpc servers ([#5925](#5925)) ([2b4ec9a](2b4ec9a))
* Horizontal scaling support to the Feast operator ([#6000](#6000)) ([3ec13e6](3ec13e6))
* Making feature view source optional (feast-dev[#6074](#6074)) ([#6075](#6075)) ([76917b7](76917b7))
* Support arm docker build ([#6061](#6061)) ([1e1f5d9](1e1f5d9))
* Use orjson for faster JSON serialization in feature server ([6f5203a](6f5203a))

### Performance Improvements

* Optimize protobuf parsing in Redis online store ([#6023](#6023)) ([59dfdb8](59dfdb8))
* Optimize timestamp conversion in _convert_rows_to_protobuf ([33a2e95](33a2e95))
* Parallelize DynamoDB batch reads in sync online_read ([#6024](#6024)) ([9699944](9699944))
* Remove redundant entity key serialization in online_read ([d87283f](d87283f))
ntkathole added a commit to red-hat-data-services/feast that referenced this pull request Mar 16, 2026
* feat: Horizontal scaling support to the Feast operator

Signed-off-by: ntkathole <[email protected]>

* docs: Added blog post on horizontal scaling

Signed-off-by: ntkathole <[email protected]>

* fix: Address comments

Signed-off-by: ntkathole <[email protected]>

* fix: Server side apply

Signed-off-by: ntkathole <[email protected]>

* fix: Use autoscalingv2.HorizontalPodAutoscaler

Signed-off-by: ntkathole <[email protected]>

---------

Signed-off-by: ntkathole <[email protected]>
ntkathole pushed a commit to red-hat-data-services/feast that referenced this pull request Mar 16, 2026
# [0.61.0](feast-dev/feast@v0.60.0...v0.61.0) (2026-03-10)

### Bug Fixes

* Add grpcio dependency group to transformation server Dockerfile ([2c2150a](feast-dev@2c2150a))
* Add https readiness check for rest-registry tests ([ea85e63](feast-dev@ea85e63))
* Add website build check for PRs and fix blog frontmatter YAML error ([feast-dev#6079](feast-dev#6079)) ([30a3a43](feast-dev@30a3a43))
* Added MLflow metric charts across feature selection ([feast-dev#6080](feast-dev#6080)) ([a403361](feast-dev@a403361))
* Check duplicate names for feature view across types ([feast-dev#5999](feast-dev#5999)) ([95b9af8](feast-dev@95b9af8))
* Fix integration tests ([feast-dev#6046](feast-dev#6046)) ([02d5548](feast-dev@02d5548))
* Fix non-specific label selector on metrics service ([a1a160d](feast-dev@a1a160d))
* Fixed IntegrityError on SqlRegistry ([feast-dev#6047](feast-dev#6047)) ([325e148](feast-dev@325e148))
* Fixed pre-commit check ([114b7db](feast-dev@114b7db))
* Fixed uv cache permission error for docker build on mac ([ad807be](feast-dev@ad807be))
* Fixes a `PydanticDeprecatedSince20` warning for trino_offline_store ([feast-dev#5991](feast-dev#5991)) ([abfd18a](feast-dev@abfd18a))
* Integration test failures ([feast-dev#6040](feast-dev#6040)) ([9165870](feast-dev@9165870))
* Ray offline store tests are duplicated across 3 workflows ([54f705a](feast-dev@54f705a))
* Reenable tests ([feast-dev#6036](feast-dev#6036)) ([82ee7f8](feast-dev@82ee7f8))
* Use commitlint pre-commit hook instead of a separate action ([35a81e7](feast-dev@35a81e7))

### Features

* Add complex type support (Map, JSON, Struct) with schema validation ([feast-dev#5974](feast-dev#5974)) ([1200dbf](feast-dev@1200dbf))
* Add materialization, feature freshness, request latency, and push metrics to feature server ([2c6be18](feast-dev@2c6be18))
* Add non-entity retrieval support for ClickHouse offline store ([4d08ddc](feast-dev@4d08ddc)), closes [feast-dev#5835](feast-dev#5835)
* Add OnlineStore for MongoDB ([feast-dev#6025](feast-dev#6025)) ([bf4e3fa](feast-dev@bf4e3fa)), closes [golang/go#74462](golang/go#74462)
* Added CodeQL SAST scanning and detect-secrets pre-commit hook ([547b516](feast-dev@547b516))
* Adding optional name to Aggregation (feast-dev[feast-dev#5994](feast-dev#5994)) ([feast-dev#6083](feast-dev#6083)) ([56469f7](feast-dev@56469f7))
* Feature Server High-Availability on Kubernetes ([feast-dev#6028](feast-dev#6028)) ([9c07b4c](feast-dev@9c07b4c)), closes [Hi#Availability](https://github.com/Hi/issues/Availability) [Hi#Availability](https://github.com/Hi/issues/Availability)
* **go:** Implement metrics and tracing for http and grpc servers ([feast-dev#5925](feast-dev#5925)) ([2b4ec9a](feast-dev@2b4ec9a))
* Horizontal scaling support to the Feast operator ([feast-dev#6000](feast-dev#6000)) ([3ec13e6](feast-dev@3ec13e6))
* Making feature view source optional (feast-dev[feast-dev#6074](feast-dev#6074)) ([feast-dev#6075](feast-dev#6075)) ([76917b7](feast-dev@76917b7))
* Support arm docker build ([feast-dev#6061](feast-dev#6061)) ([1e1f5d9](feast-dev@1e1f5d9))
* Use orjson for faster JSON serialization in feature server ([6f5203a](feast-dev@6f5203a))

### Performance Improvements

* Optimize protobuf parsing in Redis online store ([feast-dev#6023](feast-dev#6023)) ([59dfdb8](feast-dev@59dfdb8))
* Optimize timestamp conversion in _convert_rows_to_protobuf ([33a2e95](feast-dev@33a2e95))
* Parallelize DynamoDB batch reads in sync online_read ([feast-dev#6024](feast-dev#6024)) ([9699944](feast-dev@9699944))
* Remove redundant entity key serialization in online_read ([d87283f](feast-dev@d87283f))
ntkathole added a commit to red-hat-data-services/feast that referenced this pull request Mar 16, 2026
* feat: Horizontal scaling support to the Feast operator

Signed-off-by: ntkathole <[email protected]>

* docs: Added blog post on horizontal scaling

Signed-off-by: ntkathole <[email protected]>

* fix: Address comments

Signed-off-by: ntkathole <[email protected]>

* fix: Server side apply

Signed-off-by: ntkathole <[email protected]>

* fix: Use autoscalingv2.HorizontalPodAutoscaler

Signed-off-by: ntkathole <[email protected]>

---------

Signed-off-by: ntkathole <[email protected]>
ntkathole pushed a commit to red-hat-data-services/feast that referenced this pull request Mar 16, 2026
# [0.61.0](feast-dev/feast@v0.60.0...v0.61.0) (2026-03-10)

### Bug Fixes

* Add grpcio dependency group to transformation server Dockerfile ([2c2150a](feast-dev@2c2150a))
* Add https readiness check for rest-registry tests ([ea85e63](feast-dev@ea85e63))
* Add website build check for PRs and fix blog frontmatter YAML error ([feast-dev#6079](feast-dev#6079)) ([30a3a43](feast-dev@30a3a43))
* Added MLflow metric charts across feature selection ([feast-dev#6080](feast-dev#6080)) ([a403361](feast-dev@a403361))
* Check duplicate names for feature view across types ([feast-dev#5999](feast-dev#5999)) ([95b9af8](feast-dev@95b9af8))
* Fix integration tests ([feast-dev#6046](feast-dev#6046)) ([02d5548](feast-dev@02d5548))
* Fix non-specific label selector on metrics service ([a1a160d](feast-dev@a1a160d))
* Fixed IntegrityError on SqlRegistry ([feast-dev#6047](feast-dev#6047)) ([325e148](feast-dev@325e148))
* Fixed pre-commit check ([114b7db](feast-dev@114b7db))
* Fixed uv cache permission error for docker build on mac ([ad807be](feast-dev@ad807be))
* Fixes a `PydanticDeprecatedSince20` warning for trino_offline_store ([feast-dev#5991](feast-dev#5991)) ([abfd18a](feast-dev@abfd18a))
* Integration test failures ([feast-dev#6040](feast-dev#6040)) ([9165870](feast-dev@9165870))
* Ray offline store tests are duplicated across 3 workflows ([54f705a](feast-dev@54f705a))
* Reenable tests ([feast-dev#6036](feast-dev#6036)) ([82ee7f8](feast-dev@82ee7f8))
* Use commitlint pre-commit hook instead of a separate action ([35a81e7](feast-dev@35a81e7))

### Features

* Add complex type support (Map, JSON, Struct) with schema validation ([feast-dev#5974](feast-dev#5974)) ([1200dbf](feast-dev@1200dbf))
* Add materialization, feature freshness, request latency, and push metrics to feature server ([2c6be18](feast-dev@2c6be18))
* Add non-entity retrieval support for ClickHouse offline store ([4d08ddc](feast-dev@4d08ddc)), closes [feast-dev#5835](feast-dev#5835)
* Add OnlineStore for MongoDB ([feast-dev#6025](feast-dev#6025)) ([bf4e3fa](feast-dev@bf4e3fa)), closes [golang/go#74462](golang/go#74462)
* Added CodeQL SAST scanning and detect-secrets pre-commit hook ([547b516](feast-dev@547b516))
* Adding optional name to Aggregation (feast-dev[feast-dev#5994](feast-dev#5994)) ([feast-dev#6083](feast-dev#6083)) ([56469f7](feast-dev@56469f7))
* Feature Server High-Availability on Kubernetes ([feast-dev#6028](feast-dev#6028)) ([9c07b4c](feast-dev@9c07b4c)), closes [Hi#Availability](https://github.com/Hi/issues/Availability) [Hi#Availability](https://github.com/Hi/issues/Availability)
* **go:** Implement metrics and tracing for http and grpc servers ([feast-dev#5925](feast-dev#5925)) ([2b4ec9a](feast-dev@2b4ec9a))
* Horizontal scaling support to the Feast operator ([feast-dev#6000](feast-dev#6000)) ([3ec13e6](feast-dev@3ec13e6))
* Making feature view source optional (feast-dev[feast-dev#6074](feast-dev#6074)) ([feast-dev#6075](feast-dev#6075)) ([76917b7](feast-dev@76917b7))
* Support arm docker build ([feast-dev#6061](feast-dev#6061)) ([1e1f5d9](feast-dev@1e1f5d9))
* Use orjson for faster JSON serialization in feature server ([6f5203a](feast-dev@6f5203a))

### Performance Improvements

* Optimize protobuf parsing in Redis online store ([feast-dev#6023](feast-dev#6023)) ([59dfdb8](feast-dev@59dfdb8))
* Optimize timestamp conversion in _convert_rows_to_protobuf ([33a2e95](feast-dev@33a2e95))
* Parallelize DynamoDB batch reads in sync online_read ([feast-dev#6024](feast-dev#6024)) ([9699944](feast-dev@9699944))
* Remove redundant entity key serialization in online_read ([d87283f](feast-dev@d87283f))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants