Kubernetes——一些 HPA 正在根据其他 HPA 的指标而不是他们自己的指标进行扩展

Kubernetes - some HPA's are scaling up based on other HPA's metrics not their own

我想知道是否有人能够帮助我理解我在这里做错了什么。我的命名空间中有 3 个部署,每个部署都配置了 Horizo​​ntal Pod Autoscaler。然而,尽管每个 HPA 都配置了各自部署的目标,但它们似乎都对相同的 CPU 指标

做出反应
$ kubectl get hpa -n my-namespace
NAME       REFERENCE         TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
app1-hpa   Deployment/app1   54%/100%   2         5         5          11h
app2-hpa   Deployment/app2   54%/100%   10        40        39         11h
app3-hpa   Deployment/app3   54%/100%   10        50        39         11h

在我的示例中,app3 是唯一繁忙的,但如果您查看 TARGETS 列,所有 3 个 HPA 的利用率百分比计算相同,因此它们都已按比例放大...app1例如,它完全空闲(每个 pod 仅使用 1m cpu)已经扩展到 5,因为指标表明它在 54%/100% ....

我试图实现的是每个 HPA 仅对与其配对的部署的 CPU 指标做出反应。因此在上面的例子中,app1 显然会停留在 2 个实例

我的 HPA 配置如下所示(下面是 app1 的示例)

---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: app1-hpa
  namespace: my-namespace
spec:
  maxReplicas: 5
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: app1
  targetCPUUtilizationPercentage: 100

这里是 app1 的部署代码(app2 和 app3 除了名称相同外)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app1
  labels:
    app: my-namespace
spec:
  replicas: 2
  selector:
    matchLabels:
      app: app
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: app
    spec:
      imagePullSecrets:
      - name: container-registry-access
      containers:
      - name: app
        image: "path_to_registry/location/imagename"
        resources:
          requests:
            memory: 512Mi
            cpu: 500m
          limits:
            memory: 512Mi
            cpu: 1000m
        env:
        - name: LOG_LEVEL
          value: info
        command: ["/entrypoint-app1.sh"]
        imagePullPolicy: Always
      restartPolicy: Always

有谁知道我在这里做错了什么?它似乎在所有 pods 的整体 CPU 平均值或类似的东西上扩展?如果 app3 真的很忙,我不希望 app1 和 app2 在它们实际上空闲时也扩展

如有任何帮助,我们将不胜感激

如果您的所有部署除了名称之外都相同,我建议您更改 spec.template.metadata.labels.app 和 spec.selector.matchLabels.app 以对应于正确的应用程序,这意味着这些值中的每一个app1 将是 app1 而不是 app。 我的猜测是部署认为所有应用程序都是相同的,这就是为什么 cpu 所有人的平均值都相同的原因。