即使 Keep-alive 设置为 False,Pod 也会处理所有请求

问题描述 投票:0回答:1

我正在开展一个与研究 Kubernetes 扩展如何工作相关的大学项目,但我一直面临一个问题:我有一个包含一个主节点(用于控制平面)和一个边缘节点的集群,并且我在部署中启用了 HPA创建完毕,命名为

stress-app
,下面分别是部署和服务YAML文件:

stress-app-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: stress-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: stress-app
  template:
    metadata:
      labels:
        app: stress-app
    spec:
      containers:
        - name: stress-app
          image: annis99/stress-app:v0.2
          imagePullPolicy: Always
          ports:
            - containerPort: 8081
          resources:
            requests:
              cpu: 0.5
              memory: 100Mi

stress-app-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: stress-app-service
spec:
  selector:
    app: stress-app
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081
  type: LoadBalancer

该应用程序是一个使用 FastAPI 构建的简单 API,具有一个端点

'/workload/cpu'
,调用时会使用stress-ng CLI 工具创建一个虚假的 CPU 负载。

该应用程序工作正常,但是,当我尝试对集群进行负载测试以查看 HPA 扩展时,它有时会扩展至 8 个副本,但只有一个 pod 副本可以处理大多数请求,从而导致托管节点的 CPU 峰值较高那个复制品。我还检查了其他副本是否正在运行并且不处于挂起状态。

在尝试使用 JMeter、Locust 和 K6 负载测试工具时,通过将 keep-alive 设置为 False,我注意到了这一点,但是,当我尝试使用浏览器(Google Chrome)打开多个选项卡并同时请求该端点时,会出现更多副本参与并处理请求,从而更公平地分配工作量。你知道为什么复杂的负载测试工具会发生这种情况吗?

kubernetes load-balancing load-testing locust k6
1个回答
0
投票

尝试 Pod 反亲和力

示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: app
                    operator: In
                    values:
                      - myapp
              topologyKey: "kubernetes.io/hostname"
      containers:
        - name: myapp
          image: myapp:latest

© www.soinside.com 2019 - 2024. All rights reserved.