Less featureful than this, but we’ve been doing GRPC client side load balancing with kuberesolver[1] since 2018. It allows GRPC to handle the balancer implementations. It’s been rock solid for more than half a decade now.1: https://github.com/sercand/kuberesolver
azaras|5 months ago
In the README.md file, they compare it with a ClusterIP service, but not with a Headless on "ClusterIP: None".
The advantages of using Kuberesolver are that you do not need to change DNS refresh and cache settings. However, I think this is preferable to the application calling the Kubernetes API.
euank|5 months ago
The code in question was: https://github.com/grpc/grpc-go/blob/b597a8e1d0ce3f63ef8a7b6...
That meant that deploying a service which drained in less than 30s would have a little mini-outage for that service until the in-process DNS cache expired, with of course no way to configure it.
Kuberesolver streams updates, and thus lets clients talk to new pods almost immediately.
I think things are a little better now, but based on my reading of https://github.com/grpc/grpc/issues/12295, it looks like the dns resolver still might not resolve new pod names quickly in some cases.
gaurav324|5 months ago
unknown|5 months ago
[deleted]
debarshri|5 months ago
arccy|5 months ago
hanikesn|5 months ago
[1] https://github.com/wongnai/xds
atombender|5 months ago
unknown|5 months ago
[deleted]
darkstar_16|5 months ago
arccy|5 months ago