From 956e20c33f6456d1bfae25ce8c8ef1ffb4b0f08c Mon Sep 17 00:00:00 2001 From: Marcin Wielgus Date: Wed, 25 May 2016 17:47:12 +0200 Subject: [PATCH] Cluster-autoscaler: skip scale down if schedulable but not scheduled pods are present --- cluster-autoscaler/cluster_autoscaler.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/cluster-autoscaler/cluster_autoscaler.go b/cluster-autoscaler/cluster_autoscaler.go index df9003530b..5216caabea 100644 --- a/cluster-autoscaler/cluster_autoscaler.go +++ b/cluster-autoscaler/cluster_autoscaler.go @@ -143,8 +143,14 @@ func main() { // // Without below check cluster might be unnecessary scaled up to the max allowed size // in the describe situation. + schedulablePodsPresent := false if *verifyUnschedulablePods { - unschedulablePodsToHelp = FilterOutSchedulable(unschedulablePodsToHelp, nodes, allScheduled, predicateChecker) + newUnschedulablePodsToHelp := FilterOutSchedulable(unschedulablePodsToHelp, nodes, allScheduled, predicateChecker) + + if len(newUnschedulablePodsToHelp) != len(unschedulablePodsToHelp) { + schedulablePodsPresent = true + } + unschedulablePodsToHelp = newUnschedulablePodsToHelp } if len(unschedulablePodsToHelp) == 0 { @@ -166,7 +172,8 @@ func main() { if *scaleDownEnabled { // In dry run only utilization is updated calculateUtilizationOnly := lastScaleUpTime.Add(*scaleDownDelay).After(time.Now()) || - lastScaleDownFailedTrial.Add(*scaleDownTrialFrequency).After(time.Now()) + lastScaleDownFailedTrial.Add(*scaleDownTrialFrequency).After(time.Now()) || + schedulablePodsPresent underutilizedNodes = CalculateUnderutilizedNodes( nodes,