在尝试实现高可用性的Web服务器设置时,我对一个非常简单的NGINX docker容器进行了负载测试,该容器提供单个静态文件。
首先,我尝试使用单个节点(n1-standard-4)&单个pod群集,用于衡量一个“单位”可以做多少。这个单节点/ pod设置可以在开始超时之前处理大约20k个并发请求,以满足某些请求/吞吐量的下降。
然后我添加了相同机器类型的另一个节点,并将pod缩放为两个副本。一旦我确认两个pod /节点都已启动,我再次以20k运行测试。性能很好,所以我提升到40k - 期望我在1节点/ pod设置上看到类似的结果到20k。
然而,表现非常糟糕,从未在每秒15k到30k之间猛烈跳跃。
我再次使用4个节点/ pod尝试相同的测试,并且看到类似的,如果不是稍微差一点的结果。
我的问题是:
我认为我的并发请求应该使用GKE / containers / kubernetes以这种方式线性扩展我错了吗?
为了达到能够应对群集中M个节点/ pod的N个并发用户的预期效果,我缺少什么?
编辑:我也不相信这是负载测试工具的问题 - 因为我使用的是外部付费服务,声称可以模拟多达10万个并发请求。
编辑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 Cloud Balancer(我确认了这一点并看到了添加到其中的节点)。以下是我与kubernetes一起用来管理集群的文件。
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
答案 0 :(得分:1)
如果您想运行预配置的负载测试,可以查看kubernetes scale-demo的说明,其中显示了如何使用nginx提供100万QPS的静态文件,这与您的测试设置非常相似。
另请注意,单个VM(无论其上运行的pod数量如何)都将限制为how much bandwidth它可以使用以及它可以处理的每秒数据包数。要提供更多负载,您应该创建更大的VM类型或添加其他VM。