我有以下 HPA 配置
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
behavior:
scaleUp:
policies:
- periodSeconds: 15
type: Pods
value: 4
- periodSeconds: 15
type: Percent
value: 100
selectPolicy: Max
stabilizationWindowSeconds: 0
metrics:
- resource:
name: memory
target:
averageUtilization: 70
type: Utilization
type: Resource
minReplicas: 1
maxReplicas: 10
当部署只有一个 Pod 时,如果我将 Pod 内存增加到 71%,HPA 不会扩展 Pod 数量。当我执行
kubectl describe hpa
时,我可以看到以下内容。
the desired count is within the acceptable range
但是根据 kubernetes 使用以下公式计算所需的 pod 数量,所需的 pod 数量应该是 2。
desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
我等了几分钟才看到使用了一些稳定期(即使指定的 stableWindowSeconds 为 0),但它并没有增加 pod 的数量。
然后我尝试逐渐减少
averageUtilization
,只有当我将其设置为 64 时,它才会扩大并创建新的 pod。
为什么即使内存使用率高于指定的平均值,但当内存使用率低于某个值时,kubernetes 不扩展 pod 数量?
您当前所需的 Pod 数量=
1\*(71/70)=1.014
根据此 kubernetes 文档:
如果比率足够接近 1.0(在全局可配置的容差范围内,默认为 0.1),控制平面将跳过任何缩放操作。
所以也许这就是你没有扩大新 Pod 规模的原因。
您还提到减少
averageUtilization to 64
就是扩展一个新的 pod。所需的数量是 1.1
,这就是您要扩大新 Pod 规模的原因。