Ere*_*ush 6 rabbitmq kubernetes google-kubernetes-engine kubernetes-hpa
我有以下的谷歌Kubernetes发动机水平波德Autoscaller配置比例由度量的自定义部署-RabbitMQ messages ready count特定队列:foo-queue。
它正确地获取了度量值。
插入 2 条消息时,它将部署扩展到最多 10 个副本。我希望它可以扩展到 2 个副本,因为 targetValue 是 1 并且准备好了 2 条消息。
为什么它会如此积极地扩展?
HPA 配置:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: foo-hpa
namespace: development
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: foo
minReplicas: 1
maxReplicas: 10
metrics:
- type: External
external:
metricName: "custom.googleapis.com|rabbitmq_queue_messages_ready"
metricSelector:
matchLabels:
metric.labels.queue: foo-queue
targetValue: 1
Run Code Online (Sandbox Code Playgroud)
我认为您很好地解释targetValue了HorizontalPodAutoscalers 的工作原理。但是,根据您的问题,我认为您正在寻找targetAverageValue而不是targetValue.
在HPA 的 Kubernetes 文档中,它提到 usingtargetAverageValue指示 Kubernetes 根据自动缩放器下所有 Pod 公开的平均指标来缩放 pod。虽然文档没有明确说明,但外部指标(例如消息队列中等待的作业数量)算作单个数据点。通过使用 扩展外部指标targetAverageValue,您可以创建一个自动缩放器,用于缩放 Pod 数量以匹配 Pod 与作业的比率。
回到你的例子:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: foo-hpa
namespace: development
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: foo
minReplicas: 1
maxReplicas: 10
metrics:
- type: External
external:
metricName: "custom.googleapis.com|rabbitmq_queue_messages_ready"
metricSelector:
matchLabels:
metric.labels.queue: foo-queue
# Aim for one Pod per message in the queue
targetAverageValue: 1
Run Code Online (Sandbox Code Playgroud)
将导致 HPA 尝试为队列中的每条消息保留一个 Pod(最多 10 个 Pod)。
顺便说一句,每条消息针对一个 Pod 可能会导致您不断启动和停止 Pod。如果您最终启动了大量 Pod 并处理队列中的所有消息,Kubernetes 会将您的 Pod 缩减至 1 个。根据启动 Pod 所需的时间以及处理消息所需的时间,您可以通过指定较高的targetAverageValue. 理想情况下,给定恒定的流量,您的目标应该是有恒定数量的 Pod 处理消息(这要求您以与消息排队相同的速率处理消息)。
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |