Performance Kubernetes:不能随着节点的增加而增加请求/秒

Performance Kubernetes:不能随着节点的增加而增加请求/秒,performance,docker,kubernetes,load-testing,nginx-ingress,Performance,Docker,Kubernetes,Load Testing,Nginx Ingress,我创建了一个简单的nodejs-express应用程序,它只需侦听单个get端口并返回hello-word字符串 然后,我将该应用程序部署在一个kubernete集群上,该集群有1个节点和4vCpu 8GB Ram。使用nginx入口控制器将所有流量路由到应用程序 所以在完成部署之后,我执行了简单的http负载测试。结果为70-100请求/秒。我试图将副本集增加到6,但结果仍然相同。我还试图指定资源限制,但没有改变 最后,我在4vCpu 8GB Ram的池中又添加了2个节点 之后,我再次执行负载

我创建了一个简单的nodejs-express应用程序,它只需侦听单个get端口并返回hello-word字符串

然后,我将该应用程序部署在一个kubernete集群上,该集群有1个节点和4vCpu 8GB Ram。使用nginx入口控制器将所有流量路由到应用程序

所以在完成部署之后,我执行了简单的http负载测试。结果为70-100请求/秒。我试图将副本集增加到6,但结果仍然相同。我还试图指定资源限制,但没有改变

最后,我在4vCpu 8GB Ram的池中又添加了2个节点

之后,我再次执行负载测试,但结果仍然相同。总共有3个节点,带有12vCpu和24GB Ram,它只能勉强处理80个请求/秒

负载测试的结果

12个线程和400个连接

延迟423.68ms 335.38ms 1.97s 84.88%

Req/Sec 76.58 34.13 212.00 72.37%

4457个请求,5.08秒,读取1.14MB

也许我做错了什么,但我想不出来

这是我的部署和服务yaml文件

apiVersion: v1
kind: Service
metadata:
  name: app-3
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: app-3
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-3
spec:
  replicas: 6
  selector:
    matchLabels:
      app: app-3
  template:
    metadata:
      labels:
        app: app-3
    spec:
      containers:
        - name: app-3-name
          image: s1nc4p/node:v22
          ports:
            - containerPort: 8080
          resources:
            requests:
              memory: "1024Mi"
              cpu: "1000m"
            limits:
              memory: "1024Mi"
              cpu: "1000m"
kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      protocol: TCP
这是入口服务yaml文件

apiVersion: v1
kind: Service
metadata:
  name: app-3
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: app-3
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-3
spec:
  replicas: 6
  selector:
    matchLabels:
      app: app-3
  template:
    metadata:
      labels:
        app: app-3
    spec:
      containers:
        - name: app-3-name
          image: s1nc4p/node:v22
          ports:
            - containerPort: 8080
          resources:
            requests:
              memory: "1024Mi"
              cpu: "1000m"
            limits:
              memory: "1024Mi"
              cpu: "1000m"
kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      protocol: TCP
这是入口文件

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: hello-kubernetes-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: kkk.storadewebservices.com
      http:
        paths:
          - path: '/'
            backend:
              serviceName: app-3
              servicePort: 80

也许这就是您可以从负载测试仪生成的通信量。您是否使用多个负载测试仪测试过它?我使用“wrk”进行了测试,在本地主机中,我可以使用macbook在没有kubernetes的情况下达到5000 req/sec。您的k8s是否在本地主机上运行?如果没有,试着在远程节点上用你的应用程序测试它,看看你能点击多少。也许这就是你能从负载测试仪生成的流量。您是否使用多个负载测试仪测试过它?我使用“wrk”进行了测试,在本地主机中,我可以使用macbook在没有kubernetes的情况下达到5000 req/sec。您的k8s是否在本地主机上运行?如果没有,试着在远程节点上用你的应用程序测试一下,看看你能点击多少。