Skip to content

feat: implement GRPC xDS on merlin standard transformer#665

Merged
anantadwi13 merged 4 commits intomainfrom
implement-xds-merlin-std-transformer
Apr 27, 2026
Merged

feat: implement GRPC xDS on merlin standard transformer#665
anantadwi13 merged 4 commits intomainfrom
implement-xds-merlin-std-transformer

Conversation

@anantadwi13
Copy link
Copy Markdown
Contributor

Description

This MR is used to introduce xDS GRPC client load balancer to Merlin Standard Transformer.
image
Previously, the transformer needs to call istio gateway to make sure all requests are balanced across caraml-serving-* pods. But now we support proxyless GRPC call via xDS to reduce gateway costs while still maintaining balanced request distribution.

More about xDS can be seen here https://istio.io/latest/blog/2021/proxyless-grpc/

To enable xDS, you need to configure your merlin config below

...

StandardTransformerConfig:
  DefaultLabels:
    sidecar.istio.io/inject: "true"
  DefaultAnnotations:
    inject.istio.io/templates: grpc-agent
    proxy.istio.io/config: '{"holdApplicationUntilProxyStarts": true }'
  ImageName: ghcr.io/caraml-dev/merlin-transformer:x.x.x # replace x.x.x with version that supports xDS
  FeastRedisConfig:
    ...
    ServingURL: xds:///caraml-serving-redis.caraml-store.svc.cluster.local:50051 # make sure to use xds:///
  FeastBigtableConfig:
    ...
    ServingURL: xds:///caraml-serving-hbase.caraml-store.svc.cluster.local:50051 # make sure to use xds:///

...

Once you applied above config, when you deploy/redeploy a model, you will see the InferenceService resource looks like below

apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
  name: test-pyfunc-model-1-r2
  namespace: caraml-testing-project
  ...
spec:
  predictor:
    containers:
      ...
    ...
  transformer:
    labels:
      sidecar.istio.io/inject: "true"
    annotations:
      inject.istio.io/templates: grpc-agent
      proxy.istio.io/config: '{"holdApplicationUntilProxyStarts": true}'
    containers:
    - env:
      - name: FEAST_STORAGE_CONFIGS
        value: '{ "1": { "redisCluster": { "feastServingUrl": "xds:///caraml-serving-redis.caraml-store.svc.cluster.local:50051" } }, "2": { "bigtable": { "feastServingUrl": "xds:///caraml-serving-hbase.caraml-store.svc.cluster.local:50051" } } }'
      ...
    ...

Modifications

  • introduce DNS & xDS client loadbalancing on the merlin standard transformer
  • introduce DefaultLabels & DefaultAnnotations to merlin config StandardTransformerConfig. these fields will be used in the InferenceService creation.

Tests

Checklist

  • Added PR label
  • Added unit test, integration, and/or e2e tests
  • Tested locally
  • Updated documentation
  • Update Swagger spec if the PR introduce API changes
  • Regenerated Golang and Python client if the PR introduces API changes

Release Notes

NONE

- also implement GRPC DNS client loadbalancing
- add capability to the merlin console to add default annotations & labels to merlin standard transformer
@anantadwi13 anantadwi13 added the enhancement New feature or request label Apr 22, 2026
@anantadwi13 anantadwi13 self-assigned this Apr 22, 2026
…ools`)

- update unit test of standard transformer config
@anantadwi13 anantadwi13 force-pushed the implement-xds-merlin-std-transformer branch from 9614126 to 9daf8f5 Compare April 23, 2026 04:46
@anantadwi13 anantadwi13 force-pushed the implement-xds-merlin-std-transformer branch from 9daf8f5 to 3ad00bc Compare April 23, 2026 08:59
Comment thread api/pkg/transformer/feast/client.go
- also fix imagepullbackoff kube-rbac-proxy
@anantadwi13 anantadwi13 merged commit 7a65b6a into main Apr 27, 2026
70 of 74 checks passed
@anantadwi13 anantadwi13 deleted the implement-xds-merlin-std-transformer branch April 27, 2026 04:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants