【问题标题】:Round Robin for gRPC (nodejs) on kubernetes with headless service具有无头服务的 kubernetes 上的 gRPC (nodejs) 循环
【发布时间】:2017-09-09 15:11:31
【问题描述】:

我有一个 3 个 nodejs grpc 服务器 pod 和一个用于 grpc 服务的无头 kubernetes 服务(返回所有 3 个 pod ip,其中 dns 使用 pod 内的 getent 主机测试)。然而,所有 grpc 客户端请求总是在单个服务器上结束。

根据https://stackoverflow.com/a/39756233/2952128(最后一段)应该可以在 2017 年第一季度实现每次通话的循环。我使用的是 grpc 1.1.2

我尝试将{"loadBalancingPolicy": "round-robin"} 作为new Client(address, credentials, options) 的选项并使用dns:///service:port 作为地址。如果我正确理解文档/代码,则应将其传递给 c 核心并使用新实现的循环通道创建。 (https://github.com/grpc/grpc/blob/master/doc/service_config.md)

这就是循环负载平衡器现在应该如何工作的方式吗? grpc 1.1.2 已经发布了吗?

【问题讨论】:

  • 您是否尝试过服务类型:ClusterIP?它应该适用于循环。请记住,gRPC 客户端可能正在缓存连接,因此如果您仅使用一个客户端进行测试,则可能是因为 gRPC。
  • 是的,我也试过了。它的行为相同。也不确定这是否正确,因为我期待 gRPC 的客户端循环。 link。因为据我了解,这正是拥有许多缓存的打开连接并在每次调用的基础上进行更改的想法。所以所有的客户都需要所有的 IP,这就是我尝试 Headless 的原因。

标签: node.js kubernetes grpc


【解决方案1】:

深入研究 Grpc-c 核心代码和 nodejs 适配器后,我发现它可以通过使用选项键 "grpc.lb_policy_name" 来工作。因此,用

构建gRPC客户端
new Client(address, credentials, {"grpc.lb_policy_name": "round_robin"})

有效。 请注意,在我最初的问题中,我还使用了round-robin 而不是正确的round_robin

我仍然不完全确定如何使用 nodejs 从服务端设置serviceConfig,而不是使用客户端(通道)选项覆盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 2018-05-19
    • 2021-03-17
    相关资源
    最近更新 更多