是什么限制了与 Kubernetes 服务的连接数?

What limits the number of connections to a Kubernetes service?

我在下面包含了更多详细信息,但我要回答的问题在标题中。我目前正在尝试解决这个问题,但我想我会先在这里问一下,以防有人知道答案 off-hand.

关于我的设置

我在 Google Compute Engine 集群上有一个 Kubernetes 服务 运行(通过 Google Container Engine 启动)。它由一个服务(用于 front-end 稳定 IP)、一个复制控制器和 pods 运行 一个 Python 服务器组成。服务器是端口上的 Python gRPC 服务器 sleep-listening。

有2个pods(复制控制器中指定的2个副本),1个rc,1个服务,4个GCE实例(根据CPU设置为自动扩展到5个)。

我希望该服务能够处理任意数量的想要流式传输信息的客户端。但是,我目前看到该服务仅与 16 个客户端通信。

我假设连接数受限于我拥有的 GCE 实例的数量,或者受限于 pods 的数量。我正在做实验,看看改变这些数字会如何影响事情。

想通了:

  • 这不是 GCE 实例的数量:我增加了 GCE 实例的数量,而流式客户端的数量没有变化。
  • 是pods的数量:每个pod显然可以处理8个连接。我只是用 kubernetes scale rc <rc-name> --replicas=3 扩展了我的复制控制器以支持 24 个客户端。

我将研究根据传入的 HTTP 请求自动缩放(使用水平 Pod 缩放器?)pods 的数量。

更新 1:

Kubernetes doesn't currently support 基于 HTTP 的水平 pod 缩放。

更新二:

显然这里还有其他因素在起作用,例如服务器可用线程池的大小。使用 N 个线程和 P pods,我能够维护 P*N 个开放通道。这对我特别有效,因为我的客户只需要每隔几秒轮询一次服务器,并且在不活动时休眠。