使用GKE Ingress限制每个Pod一个连接

时间:2019-10-31 06:22:49

标签: google-kubernetes-engine

我有一个由Pod组成的GKE部署,这些Pod可以处理长时间运行的内存密集型请求。它位于NodePort服务的后面,NodePort服务位于Ingress的后面(基于this tutorial)。

我想限制每个Pod的并发连接数,以避免节点内存不足。 This SO question建议使用Nginx Ingress控制器。

这可以通过GKE的默认Ingress来实现吗?我是Kubernetes的新手,如果可能的话,我想限制复杂性。

2 个答案:

答案 0 :(得分:2)

从其documentation来看,目前无法用GKE ingress controller限制每个容器的并发连接数。

因此,要参数化最大连接数,您必须遵循提到的帖子的接受答案,其中使用了nginxinc/kubernetes-ingress,这可以说比该解决方案更简单。与similar question相关的kubernetes/ingress-nginx

另一方面,如果您对资源没有限制(在这种情况下,您将限制并发用户数,因为对于给定的资源限制,有两个并发连接到一个容器,这与(例如,到两个不同容器的两个连接)),您可以阅读关于Cluster autoscalerAutoscaling a cluster的信息,以了解GKE如何实现Kubernetes的主要思想之一,即扩展。

答案 1 :(得分:1)

不,您不能。您必须自己在应用程序级别上进行处理,或者按照另一篇文章中的建议,使用其他Ingress Controllers,对它们进行更多控制。

现在,如果考虑一下,限制每个Pod的并发连接并没有解决任何问题,因为Pod可以访问所有节点资源,除非您设置了可以随时修改的资源限制。因此,具有2个每个具有1个连接的Pod和一个2个连接的Pod将是相同的(如果您的应用可以处理的话)。实际上,在一个Pod中有2个连接,您将从节点中为应用程序获取更多资源。

我的观点是,如果从资源角度考虑,限制每个pod的连接数实际上没有任何意义。这对您来说将是额外的工作。

我认为,在其他情况下,您想强制执行此限制,例如,如果将其设置在节点级别,在这种情况下,您会将所有资源都分配给一个连接。而且我相信您可以使用排队系统来实现这一目标。