Kubernetes——一些 HPA 正在根据其他 HPA 的指标而不是他们自己的指标进行扩展
Kubernetes - some HPA's are scaling up based on other HPA's metrics not their own
我想知道是否有人能够帮助我理解我在这里做错了什么。我的命名空间中有 3 个部署,每个部署都配置了 Horizontal 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 所有人的平均值都相同的原因。
我想知道是否有人能够帮助我理解我在这里做错了什么。我的命名空间中有 3 个部署,每个部署都配置了 Horizontal 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 所有人的平均值都相同的原因。