diff --git a/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go b/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go index 15a1f34dc42..c249a45e1a5 100644 --- a/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go +++ b/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go @@ -34,7 +34,8 @@ import ( const ( // GCE instances can have up to 16 PD volumes attached. - DefaultMaxGCEPDVolumes = 16 + DefaultMaxGCEPDVolumes = 16 + ClusterAutoscalerProvider = "ClusterAutoscalerProvider" ) // getMaxVols checks the max PD volumes environment variable, otherwise returning a default value @@ -54,6 +55,9 @@ func getMaxVols(defaultVal int) int { func init() { factory.RegisterAlgorithmProvider(factory.DefaultProvider, defaultPredicates(), defaultPriorities()) + // Cluster autoscaler friendly scheduling algorithm. + factory.RegisterAlgorithmProvider(ClusterAutoscalerProvider, defaultPredicates(), + replace(defaultPriorities(), "LeastRequestedPriority", "MostRequestedPriority")) // EqualPriority is a prioritizer function that gives an equal weight of one to all nodes // Register the priority function so that its available // but do not include it as part of the default priorities @@ -97,6 +101,15 @@ func init() { factory.RegisterPriorityFunction("MostRequestedPriority", priorities.MostRequestedPriority, 1) } +func replace(set sets.String, replaceWhat, replaceWith string) sets.String { + result := sets.NewString(set.List()...) + if result.Has(replaceWhat) { + result.Delete(replaceWhat) + result.Insert(replaceWith) + } + return result +} + func defaultPredicates() sets.String { return sets.NewString( // Fit is determined by non-conflicting disk volumes.