mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 20:53:33 +00:00
Fix bug about unintentional scale out during updating deployment.
This commit fix bug in calcPlainMetricReplicas function. Same bug in GetResourceReplicas function was fixed in #85027.
This commit is contained in:
parent
044a4ce21d
commit
dbd0d566ed
@ -235,9 +235,15 @@ func (c *ReplicaCalculator) calcPlainMetricReplicas(metrics metricsclient.PodMet
|
|||||||
return currentReplicas, utilization, nil
|
return currentReplicas, utilization, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newReplicas := int32(math.Ceil(newUsageRatio * float64(len(metrics))))
|
||||||
|
if (newUsageRatio < 1.0 && newReplicas > currentReplicas) || (newUsageRatio > 1.0 && newReplicas < currentReplicas) {
|
||||||
|
// return the current replicas if the change of metrics length would cause a change in scale direction
|
||||||
|
return currentReplicas, utilization, nil
|
||||||
|
}
|
||||||
|
|
||||||
// return the result, where the number of replicas considered is
|
// return the result, where the number of replicas considered is
|
||||||
// however many replicas factored into our calculation
|
// however many replicas factored into our calculation
|
||||||
return int32(math.Ceil(newUsageRatio * float64(len(metrics)))), utilization, nil
|
return newReplicas, utilization, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetObjectMetricReplicas calculates the desired replica count based on a target metric utilization (as a milli-value)
|
// GetObjectMetricReplicas calculates the desired replica count based on a target metric utilization (as a milli-value)
|
||||||
|
@ -1265,6 +1265,22 @@ func TestReplicaCalcDuringRollingUpdateWithMaxSurge(t *testing.T) {
|
|||||||
tc.runTest(t)
|
tc.runTest(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReplicaCalcDuringRollingUpdateWithMaxSurgeCM(t *testing.T) {
|
||||||
|
tc := replicaCalcTestCase{
|
||||||
|
currentReplicas: 2,
|
||||||
|
expectedReplicas: 2,
|
||||||
|
podPhase: []v1.PodPhase{v1.PodRunning, v1.PodRunning, v1.PodRunning},
|
||||||
|
metric: &metricInfo{
|
||||||
|
name: "qps",
|
||||||
|
levels: []int64{10000, 10000},
|
||||||
|
targetUtilization: 17000,
|
||||||
|
expectedUtilization: 10000,
|
||||||
|
metricType: podMetric,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
tc.runTest(t)
|
||||||
|
}
|
||||||
|
|
||||||
// TestComputedToleranceAlgImplementation is a regression test which
|
// TestComputedToleranceAlgImplementation is a regression test which
|
||||||
// back-calculates a minimal percentage for downscaling based on a small percentage
|
// back-calculates a minimal percentage for downscaling based on a small percentage
|
||||||
// increase in pod utilization which is calibrated against the tolerance value.
|
// increase in pod utilization which is calibrated against the tolerance value.
|
||||||
|
Loading…
Reference in New Issue
Block a user