为什么在一个简单的NGINX docker集群上增加node / pod时,我看不到更高的并发请求?

在试图实现一个高度可用的Web服务器设置,我运行一个负载testing对一个非常简单的NGINXdocker容器提供单个静态文件。

起初,我尝试了一个节点(n1-standard-4)和单个pod集群,来衡量一个“单元”可以做多less。 这个单节点/ pod设置可以处理大约20k个并发请求,然后开始超时以处理一些请求/吞吐量。

然后,我添加了相同机器types的另一个节点,并将这个吊舱缩放到两个副本。 一旦我确认两个豆荚/节点都运行起来,我再次用20k运行testing。 性能是好的,所以我碰到了4万 – 期待我会看到类似的结果,1节点/ pod设置20k。

然而,performance非常糟糕,从来没有请求每秒跳跃15k和30k之间猛烈。

我用4个节点/豆荚再次尝试相同的testing,看到类似的结果,如果不是稍差。

我的问题是:

  • 我错误地认为我的并发请求应该用GKE / containers / kubernetes这样线性调整吗?

  • 为了达到预期的结果,我能够如何处理M个节点/群集中的N个并发用户?

编辑:我也不相信这是与负载testing工具的问题 – 因为我使用的外部付费服务,声称能够模拟高达100k并发请求。

编辑2:这里有一些关于设置的更多信息:

Dockerfile:

FROM nginx ADD nginx.conf /etc/nginx/nginx.conf ADD index.html /usr/share/nginx/html/index.html ADD data.json /usr/share/nginx/html/data.json 

nginx.conf:

 user nginx; worker_processes 4; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 4096; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log off; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; server { listen 80 default_server; listen [::]:80 default_server; root /usr/share/nginx/html; # Serve the index.html page location / { try_files /index.html =404; } } include /etc/nginx/conf.d/*.conf; } 

index.html的:

 <head><title>Load Test Page</title></head><body><h3>Load Test!</h3></body> 

我使用了“LoadBalancer”服务,我相信这个服务可以设置一个Google云端平衡器(我确认了这一点,并看到了添加的节点)。 下面是我用kubernetes来pipe理集群的文件。

rc.yml:

 apiVersion: v1 kind: ReplicationController metadata: name: nginx-rc labels: name: nginx-rc spec: replicas: 2 selector: name: nginx-server template: metadata: labels: name: nginx-server name: nginx-server spec: containers: - name: nginx-server image: [[ my image ]] ports: - containerPort: 80 hostPort: 80 

services.yml:

 apiVersion: v1 kind: Service metadata: labels: name: nginx-lb name: nginx-lb spec: ports: - port: 80 targetPort: 80 selector: name: nginx-server type: LoadBalancer 

如果你想运行一个预configuration的负载testing,你可以查看kubernetes scale-demo的说明,该示例展示了如何使用nginx服务100万个QPS静态文件,这与你的testing设置非常相似。

另外请记住,单个虚拟机(不pipe其上运行的Pod的数量)将会限制它可以使用多less带宽以及它可以处理多less个数据包。 要提供更多的负载,您应该创build一个更大的VMtypes或添加更多的VM。