Commit 6aeb77aa authored by sakeven's avatar sakeven

Use const value maxPriority instead of immediate value 10

Signed-off-by: 's avatarsakeven <jc5930@sina.cn>
parent b139d9d7
...@@ -71,7 +71,7 @@ func calculateBalancedResourceAllocation(pod *v1.Pod, podRequests *schedulercach ...@@ -71,7 +71,7 @@ func calculateBalancedResourceAllocation(pod *v1.Pod, podRequests *schedulercach
// 0-10 with 0 representing well balanced allocation and 10 poorly balanced. Subtracting it from // 0-10 with 0 representing well balanced allocation and 10 poorly balanced. Subtracting it from
// 10 leads to the score which also scales from 0 to 10 while 10 representing well balanced. // 10 leads to the score which also scales from 0 to 10 while 10 representing well balanced.
diff := math.Abs(cpuFraction - memoryFraction) diff := math.Abs(cpuFraction - memoryFraction)
score = int(10 - diff*10) score = int((1 - diff) * float64(schedulerapi.MaxPriority))
} }
if glog.V(10) { if glog.V(10) {
// We explicitly don't do glog.V(10).Infof() to avoid computing all the parameters if this is // We explicitly don't do glog.V(10).Infof() to avoid computing all the parameters if this is
...@@ -98,8 +98,8 @@ func fractionOfCapacity(requested, capacity int64) float64 { ...@@ -98,8 +98,8 @@ func fractionOfCapacity(requested, capacity int64) float64 {
return float64(requested) / float64(capacity) return float64(requested) / float64(capacity)
} }
// BalancedResourceAllocation favors nodes with balanced resource usage rate. // BalancedResourceAllocationMap favors nodes with balanced resource usage rate.
// BalancedResourceAllocation should **NOT** be used alone, and **MUST** be used together with LeastRequestedPriority. // BalancedResourceAllocationMap should **NOT** be used alone, and **MUST** be used together with LeastRequestedPriority.
// It calculates the difference between the cpu and memory fracion of capacity, and prioritizes the host based on how // It calculates the difference between the cpu and memory fracion of capacity, and prioritizes the host based on how
// close the two metrics are to each other. // close the two metrics are to each other.
// Detail: score = 10 - abs(cpuFraction-memoryFraction)*10. The algorithm is partly inspired by: // Detail: score = 10 - abs(cpuFraction-memoryFraction)*10. The algorithm is partly inspired by:
......
...@@ -110,7 +110,7 @@ func TestBalancedResourceAllocation(t *testing.T) { ...@@ -110,7 +110,7 @@ func TestBalancedResourceAllocation(t *testing.T) {
*/ */
pod: &v1.Pod{Spec: noResources}, pod: &v1.Pod{Spec: noResources},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)}, nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)},
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 10}, {Host: "machine2", Score: 10}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: schedulerapi.MaxPriority}},
test: "nothing scheduled, nothing requested", test: "nothing scheduled, nothing requested",
}, },
{ {
...@@ -127,7 +127,7 @@ func TestBalancedResourceAllocation(t *testing.T) { ...@@ -127,7 +127,7 @@ func TestBalancedResourceAllocation(t *testing.T) {
*/ */
pod: &v1.Pod{Spec: cpuAndMemory}, pod: &v1.Pod{Spec: cpuAndMemory},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 6000, 10000)}, nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 6000, 10000)},
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 7}, {Host: "machine2", Score: 10}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 7}, {Host: "machine2", Score: schedulerapi.MaxPriority}},
test: "nothing scheduled, resources requested, differently sized machines", test: "nothing scheduled, resources requested, differently sized machines",
}, },
{ {
...@@ -144,7 +144,7 @@ func TestBalancedResourceAllocation(t *testing.T) { ...@@ -144,7 +144,7 @@ func TestBalancedResourceAllocation(t *testing.T) {
*/ */
pod: &v1.Pod{Spec: noResources}, pod: &v1.Pod{Spec: noResources},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)}, nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)},
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 10}, {Host: "machine2", Score: 10}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: schedulerapi.MaxPriority}},
test: "no resources requested, pods scheduled", test: "no resources requested, pods scheduled",
pods: []*v1.Pod{ pods: []*v1.Pod{
{Spec: machine1Spec, ObjectMeta: metav1.ObjectMeta{Labels: labels2}}, {Spec: machine1Spec, ObjectMeta: metav1.ObjectMeta{Labels: labels2}},
......
...@@ -24,7 +24,7 @@ import ( ...@@ -24,7 +24,7 @@ import (
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache" "k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
) )
// ImageLocalityPriority is a priority function that favors nodes that already have requested pod container's images. // ImageLocalityPriorityMap is a priority function that favors nodes that already have requested pod container's images.
// It will detect whether the requested images are present on a node, and then calculate a score ranging from 0 to 10 // It will detect whether the requested images are present on a node, and then calculate a score ranging from 0 to 10
// based on the total size of those images. // based on the total size of those images.
// - If none of the images are present, this node will be given the lowest priority. // - If none of the images are present, this node will be given the lowest priority.
...@@ -57,9 +57,9 @@ func calculateScoreFromSize(sumSize int64) int { ...@@ -57,9 +57,9 @@ func calculateScoreFromSize(sumSize int64) int {
score = 0 score = 0
// If existing images' total size is larger than max, just make it highest priority. // If existing images' total size is larger than max, just make it highest priority.
case sumSize >= maxImgSize: case sumSize >= maxImgSize:
score = 10 score = schedulerapi.MaxPriority
default: default:
score = int((10 * (sumSize - minImgSize) / (maxImgSize - minImgSize)) + 1) score = int((int64(schedulerapi.MaxPriority) * (sumSize - minImgSize) / (maxImgSize - minImgSize)) + 1)
} }
// Return which bucket the given size belongs to // Return which bucket the given size belongs to
return score return score
......
...@@ -154,7 +154,7 @@ func TestImageLocalityPriority(t *testing.T) { ...@@ -154,7 +154,7 @@ func TestImageLocalityPriority(t *testing.T) {
// Score: 10 < min score = 0 // Score: 10 < min score = 0
pod: &v1.Pod{Spec: test_min_max}, pod: &v1.Pod{Spec: test_min_max},
nodes: []*v1.Node{makeImageNode("machine1", node_40_140_2000), makeImageNode("machine2", node_250_10)}, nodes: []*v1.Node{makeImageNode("machine1", node_40_140_2000), makeImageNode("machine2", node_250_10)},
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 10}, {Host: "machine2", Score: 0}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: 0}},
test: "if exceed limit, use limit", test: "if exceed limit, use limit",
}, },
} }
......
...@@ -111,7 +111,7 @@ func (p *podAffinityPriorityMap) processTerms(terms []v1.WeightedPodAffinityTerm ...@@ -111,7 +111,7 @@ func (p *podAffinityPriorityMap) processTerms(terms []v1.WeightedPodAffinityTerm
} }
} }
// compute a sum by iterating through the elements of weightedPodAffinityTerm and adding // CalculateInterPodAffinityPriority compute a sum by iterating through the elements of weightedPodAffinityTerm and adding
// "weight" to the sum if the corresponding PodAffinityTerm is satisfied for // "weight" to the sum if the corresponding PodAffinityTerm is satisfied for
// that node; the node(s) with the highest sum are the most preferred. // that node; the node(s) with the highest sum are the most preferred.
// Symmetry need to be considered for preferredDuringSchedulingIgnoredDuringExecution from podAffinity & podAntiAffinity, // Symmetry need to be considered for preferredDuringSchedulingIgnoredDuringExecution from podAffinity & podAntiAffinity,
...@@ -224,7 +224,7 @@ func (ipa *InterPodAffinity) CalculateInterPodAffinityPriority(pod *v1.Pod, node ...@@ -224,7 +224,7 @@ func (ipa *InterPodAffinity) CalculateInterPodAffinityPriority(pod *v1.Pod, node
for _, node := range nodes { for _, node := range nodes {
fScore := float64(0) fScore := float64(0)
if (maxCount - minCount) > 0 { if (maxCount - minCount) > 0 {
fScore = 10 * ((pm.counts[node.Name] - minCount) / (maxCount - minCount)) fScore = float64(schedulerapi.MaxPriority) * ((pm.counts[node.Name] - minCount) / (maxCount - minCount))
} }
result = append(result, schedulerapi.HostPriority{Host: node.Name, Score: int(fScore)}) result = append(result, schedulerapi.HostPriority{Host: node.Name, Score: int(fScore)})
if glog.V(10) { if glog.V(10) {
......
...@@ -53,7 +53,7 @@ func calculateUnusedScore(requested int64, capacity int64, node string) int64 { ...@@ -53,7 +53,7 @@ func calculateUnusedScore(requested int64, capacity int64, node string) int64 {
requested, capacity, node) requested, capacity, node)
return 0 return 0
} }
return ((capacity - requested) * 10) / capacity return ((capacity - requested) * int64(schedulerapi.MaxPriority)) / capacity
} }
// Calculates host priority based on the amount of unused resources. // Calculates host priority based on the amount of unused resources.
......
...@@ -110,7 +110,7 @@ func TestLeastRequested(t *testing.T) { ...@@ -110,7 +110,7 @@ func TestLeastRequested(t *testing.T) {
*/ */
pod: &v1.Pod{Spec: noResources}, pod: &v1.Pod{Spec: noResources},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)}, nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)},
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 10}, {Host: "machine2", Score: 10}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: schedulerapi.MaxPriority}},
test: "nothing scheduled, nothing requested", test: "nothing scheduled, nothing requested",
}, },
{ {
...@@ -144,7 +144,7 @@ func TestLeastRequested(t *testing.T) { ...@@ -144,7 +144,7 @@ func TestLeastRequested(t *testing.T) {
*/ */
pod: &v1.Pod{Spec: noResources}, pod: &v1.Pod{Spec: noResources},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)}, nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)},
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 10}, {Host: "machine2", Score: 10}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: schedulerapi.MaxPriority}},
test: "no resources requested, pods scheduled", test: "no resources requested, pods scheduled",
pods: []*v1.Pod{ pods: []*v1.Pod{
{Spec: machine1Spec, ObjectMeta: metav1.ObjectMeta{Labels: labels2}}, {Spec: machine1Spec, ObjectMeta: metav1.ObjectMeta{Labels: labels2}},
......
...@@ -57,7 +57,7 @@ func calculateUsedScore(requested int64, capacity int64, node string) int64 { ...@@ -57,7 +57,7 @@ func calculateUsedScore(requested int64, capacity int64, node string) int64 {
requested, capacity, node) requested, capacity, node)
return 0 return 0
} }
return (requested * 10) / capacity return (requested * schedulerapi.MaxPriority) / capacity
} }
// Calculate the resource used on a node. 'node' has information about the resources on the node. // Calculate the resource used on a node. 'node' has information about the resources on the node.
......
...@@ -87,7 +87,7 @@ func CalculateNodeAffinityPriorityReduce(pod *v1.Pod, meta interface{}, nodeName ...@@ -87,7 +87,7 @@ func CalculateNodeAffinityPriorityReduce(pod *v1.Pod, meta interface{}, nodeName
var fScore float64 var fScore float64
for i := range result { for i := range result {
if maxCount > 0 { if maxCount > 0 {
fScore = 10 * (float64(result[i].Score) / maxCountFloat) fScore = float64(schedulerapi.MaxPriority) * (float64(result[i].Score) / maxCountFloat)
} else { } else {
fScore = 0 fScore = 0
} }
......
...@@ -146,7 +146,7 @@ func TestNodeAffinityPriority(t *testing.T) { ...@@ -146,7 +146,7 @@ func TestNodeAffinityPriority(t *testing.T) {
{ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}},
{ObjectMeta: metav1.ObjectMeta{Name: "machine3", Labels: label3}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine3", Labels: label3}},
}, },
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 10}, {Host: "machine2", Score: 0}, {Host: "machine3", Score: 0}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: 0}, {Host: "machine3", Score: 0}},
test: "only machine1 matches the preferred scheduling requirements of pod", test: "only machine1 matches the preferred scheduling requirements of pod",
}, },
{ {
...@@ -160,7 +160,7 @@ func TestNodeAffinityPriority(t *testing.T) { ...@@ -160,7 +160,7 @@ func TestNodeAffinityPriority(t *testing.T) {
{ObjectMeta: metav1.ObjectMeta{Name: "machine5", Labels: label5}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine5", Labels: label5}},
{ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}},
}, },
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 1}, {Host: "machine5", Score: 10}, {Host: "machine2", Score: 3}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 1}, {Host: "machine5", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: 3}},
test: "all machines matches the preferred scheduling requirements of pod but with different priorities ", test: "all machines matches the preferred scheduling requirements of pod but with different priorities ",
}, },
} }
......
...@@ -51,7 +51,7 @@ func (n *NodeLabelPrioritizer) CalculateNodeLabelPriorityMap(pod *v1.Pod, meta i ...@@ -51,7 +51,7 @@ func (n *NodeLabelPrioritizer) CalculateNodeLabelPriorityMap(pod *v1.Pod, meta i
exists := labels.Set(node.Labels).Has(n.label) exists := labels.Set(node.Labels).Has(n.label)
score := 0 score := 0
if (exists && n.presence) || (!exists && !n.presence) { if (exists && n.presence) || (!exists && !n.presence) {
score = 10 score = schedulerapi.MaxPriority
} }
return schedulerapi.HostPriority{ return schedulerapi.HostPriority{
Host: node.Name, Host: node.Name,
......
...@@ -55,7 +55,7 @@ func TestNewNodeLabelPriority(t *testing.T) { ...@@ -55,7 +55,7 @@ func TestNewNodeLabelPriority(t *testing.T) {
{ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}},
{ObjectMeta: metav1.ObjectMeta{Name: "machine3", Labels: label3}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine3", Labels: label3}},
}, },
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 10}, {Host: "machine2", Score: 10}, {Host: "machine3", Score: 10}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: schedulerapi.MaxPriority}, {Host: "machine3", Score: schedulerapi.MaxPriority}},
label: "baz", label: "baz",
presence: false, presence: false,
test: "no match found, presence false", test: "no match found, presence false",
...@@ -66,7 +66,7 @@ func TestNewNodeLabelPriority(t *testing.T) { ...@@ -66,7 +66,7 @@ func TestNewNodeLabelPriority(t *testing.T) {
{ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}},
{ObjectMeta: metav1.ObjectMeta{Name: "machine3", Labels: label3}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine3", Labels: label3}},
}, },
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 10}, {Host: "machine2", Score: 0}, {Host: "machine3", Score: 0}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: 0}, {Host: "machine3", Score: 0}},
label: "foo", label: "foo",
presence: true, presence: true,
test: "one match found, presence true", test: "one match found, presence true",
...@@ -77,7 +77,7 @@ func TestNewNodeLabelPriority(t *testing.T) { ...@@ -77,7 +77,7 @@ func TestNewNodeLabelPriority(t *testing.T) {
{ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}},
{ObjectMeta: metav1.ObjectMeta{Name: "machine3", Labels: label3}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine3", Labels: label3}},
}, },
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 0}, {Host: "machine2", Score: 10}, {Host: "machine3", Score: 10}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 0}, {Host: "machine2", Score: schedulerapi.MaxPriority}, {Host: "machine3", Score: schedulerapi.MaxPriority}},
label: "foo", label: "foo",
presence: false, presence: false,
test: "one match found, presence false", test: "one match found, presence false",
...@@ -88,7 +88,7 @@ func TestNewNodeLabelPriority(t *testing.T) { ...@@ -88,7 +88,7 @@ func TestNewNodeLabelPriority(t *testing.T) {
{ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}},
{ObjectMeta: metav1.ObjectMeta{Name: "machine3", Labels: label3}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine3", Labels: label3}},
}, },
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 0}, {Host: "machine2", Score: 10}, {Host: "machine3", Score: 10}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 0}, {Host: "machine2", Score: schedulerapi.MaxPriority}, {Host: "machine3", Score: schedulerapi.MaxPriority}},
label: "bar", label: "bar",
presence: true, presence: true,
test: "two matches found, presence true", test: "two matches found, presence true",
...@@ -99,7 +99,7 @@ func TestNewNodeLabelPriority(t *testing.T) { ...@@ -99,7 +99,7 @@ func TestNewNodeLabelPriority(t *testing.T) {
{ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine2", Labels: label2}},
{ObjectMeta: metav1.ObjectMeta{Name: "machine3", Labels: label3}}, {ObjectMeta: metav1.ObjectMeta{Name: "machine3", Labels: label3}},
}, },
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 10}, {Host: "machine2", Score: 0}, {Host: "machine3", Score: 0}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: 0}, {Host: "machine3", Score: 0}},
label: "bar", label: "bar",
presence: false, presence: false,
test: "two matches found, presence false", test: "two matches found, presence false",
......
...@@ -41,13 +41,13 @@ func CalculateNodePreferAvoidPodsPriorityMap(pod *v1.Pod, meta interface{}, node ...@@ -41,13 +41,13 @@ func CalculateNodePreferAvoidPodsPriorityMap(pod *v1.Pod, meta interface{}, node
} }
} }
if controllerRef == nil { if controllerRef == nil {
return schedulerapi.HostPriority{Host: node.Name, Score: 10}, nil return schedulerapi.HostPriority{Host: node.Name, Score: schedulerapi.MaxPriority}, nil
} }
avoids, err := v1helper.GetAvoidPodsFromNodeAnnotations(node.Annotations) avoids, err := v1helper.GetAvoidPodsFromNodeAnnotations(node.Annotations)
if err != nil { if err != nil {
// If we cannot get annotation, assume it's schedulable there. // If we cannot get annotation, assume it's schedulable there.
return schedulerapi.HostPriority{Host: node.Name, Score: 10}, nil return schedulerapi.HostPriority{Host: node.Name, Score: schedulerapi.MaxPriority}, nil
} }
for i := range avoids.PreferAvoidPods { for i := range avoids.PreferAvoidPods {
avoid := &avoids.PreferAvoidPods[i] avoid := &avoids.PreferAvoidPods[i]
...@@ -55,5 +55,5 @@ func CalculateNodePreferAvoidPodsPriorityMap(pod *v1.Pod, meta interface{}, node ...@@ -55,5 +55,5 @@ func CalculateNodePreferAvoidPodsPriorityMap(pod *v1.Pod, meta interface{}, node
return schedulerapi.HostPriority{Host: node.Name, Score: 0}, nil return schedulerapi.HostPriority{Host: node.Name, Score: 0}, nil
} }
} }
return schedulerapi.HostPriority{Host: node.Name, Score: 10}, nil return schedulerapi.HostPriority{Host: node.Name, Score: schedulerapi.MaxPriority}, nil
} }
...@@ -96,7 +96,7 @@ func TestNodePreferAvoidPriority(t *testing.T) { ...@@ -96,7 +96,7 @@ func TestNodePreferAvoidPriority(t *testing.T) {
}, },
}, },
nodes: testNodes, nodes: testNodes,
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 0}, {Host: "machine2", Score: 10}, {Host: "machine3", Score: 10}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 0}, {Host: "machine2", Score: schedulerapi.MaxPriority}, {Host: "machine3", Score: schedulerapi.MaxPriority}},
test: "pod managed by ReplicationController should avoid a node, this node get lowest priority score", test: "pod managed by ReplicationController should avoid a node, this node get lowest priority score",
}, },
{ {
...@@ -109,7 +109,7 @@ func TestNodePreferAvoidPriority(t *testing.T) { ...@@ -109,7 +109,7 @@ func TestNodePreferAvoidPriority(t *testing.T) {
}, },
}, },
nodes: testNodes, nodes: testNodes,
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 10}, {Host: "machine2", Score: 10}, {Host: "machine3", Score: 10}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: schedulerapi.MaxPriority}, {Host: "machine3", Score: schedulerapi.MaxPriority}},
test: "ownership by random controller should be ignored", test: "ownership by random controller should be ignored",
}, },
{ {
...@@ -122,7 +122,7 @@ func TestNodePreferAvoidPriority(t *testing.T) { ...@@ -122,7 +122,7 @@ func TestNodePreferAvoidPriority(t *testing.T) {
}, },
}, },
nodes: testNodes, nodes: testNodes,
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 10}, {Host: "machine2", Score: 10}, {Host: "machine3", Score: 10}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: schedulerapi.MaxPriority}, {Host: "machine3", Score: schedulerapi.MaxPriority}},
test: "owner without Controller field set should be ignored", test: "owner without Controller field set should be ignored",
}, },
{ {
...@@ -135,7 +135,7 @@ func TestNodePreferAvoidPriority(t *testing.T) { ...@@ -135,7 +135,7 @@ func TestNodePreferAvoidPriority(t *testing.T) {
}, },
}, },
nodes: testNodes, nodes: testNodes,
expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: 10}, {Host: "machine2", Score: 0}, {Host: "machine3", Score: 10}}, expectedList: []schedulerapi.HostPriority{{Host: "machine1", Score: schedulerapi.MaxPriority}, {Host: "machine2", Score: 0}, {Host: "machine3", Score: schedulerapi.MaxPriority}},
test: "pod managed by ReplicaSet should avoid a node, this node get lowest priority score", test: "pod managed by ReplicaSet should avoid a node, this node get lowest priority score",
}, },
} }
......
...@@ -30,13 +30,9 @@ import ( ...@@ -30,13 +30,9 @@ import (
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache" "k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
) )
// The maximum priority value to give to a node
// Priority values range from 0-maxPriority
const maxPriority float32 = 10
// When zone information is present, give 2/3 of the weighting to zone spreading, 1/3 to node spreading // When zone information is present, give 2/3 of the weighting to zone spreading, 1/3 to node spreading
// TODO: Any way to justify this weighting? // TODO: Any way to justify this weighting?
const zoneWeighting = 2.0 / 3.0 const zoneWeighting float64 = 2.0 / 3.0
type SelectorSpread struct { type SelectorSpread struct {
serviceLister algorithm.ServiceLister serviceLister algorithm.ServiceLister
...@@ -103,15 +99,15 @@ func (s *SelectorSpread) CalculateSpreadPriority(pod *v1.Pod, nodeNameToInfo map ...@@ -103,15 +99,15 @@ func (s *SelectorSpread) CalculateSpreadPriority(pod *v1.Pod, nodeNameToInfo map
selectors := s.getSelectors(pod) selectors := s.getSelectors(pod)
// Count similar pods by node // Count similar pods by node
countsByNodeName := make(map[string]float32, len(nodes)) countsByNodeName := make(map[string]float64, len(nodes))
countsByZone := make(map[string]float32, 10) countsByZone := make(map[string]float64, 10)
maxCountByNodeName := float32(0) maxCountByNodeName := float64(0)
countsByNodeNameLock := sync.Mutex{} countsByNodeNameLock := sync.Mutex{}
if len(selectors) > 0 { if len(selectors) > 0 {
processNodeFunc := func(i int) { processNodeFunc := func(i int) {
nodeName := nodes[i].Name nodeName := nodes[i].Name
count := float32(0) count := float64(0)
for _, nodePod := range nodeNameToInfo[nodeName].Pods() { for _, nodePod := range nodeNameToInfo[nodeName].Pods() {
if pod.Namespace != nodePod.Namespace { if pod.Namespace != nodePod.Namespace {
continue continue
...@@ -153,7 +149,7 @@ func (s *SelectorSpread) CalculateSpreadPriority(pod *v1.Pod, nodeNameToInfo map ...@@ -153,7 +149,7 @@ func (s *SelectorSpread) CalculateSpreadPriority(pod *v1.Pod, nodeNameToInfo map
// Aggregate by-zone information // Aggregate by-zone information
// Compute the maximum number of pods hosted in any zone // Compute the maximum number of pods hosted in any zone
haveZones := len(countsByZone) != 0 haveZones := len(countsByZone) != 0
maxCountByZone := float32(0) maxCountByZone := float64(0)
for _, count := range countsByZone { for _, count := range countsByZone {
if count > maxCountByZone { if count > maxCountByZone {
maxCountByZone = count maxCountByZone = count
...@@ -165,16 +161,16 @@ func (s *SelectorSpread) CalculateSpreadPriority(pod *v1.Pod, nodeNameToInfo map ...@@ -165,16 +161,16 @@ func (s *SelectorSpread) CalculateSpreadPriority(pod *v1.Pod, nodeNameToInfo map
// 0 being the lowest priority and maxPriority being the highest // 0 being the lowest priority and maxPriority being the highest
for _, node := range nodes { for _, node := range nodes {
// initializing to the default/max node score of maxPriority // initializing to the default/max node score of maxPriority
fScore := maxPriority fScore := float64(schedulerapi.MaxPriority)
if maxCountByNodeName > 0 { if maxCountByNodeName > 0 {
fScore = maxPriority * ((maxCountByNodeName - countsByNodeName[node.Name]) / maxCountByNodeName) fScore = float64(schedulerapi.MaxPriority) * ((maxCountByNodeName - countsByNodeName[node.Name]) / maxCountByNodeName)
} }
// If there is zone information present, incorporate it // If there is zone information present, incorporate it
if haveZones { if haveZones {
zoneId := utilnode.GetZoneKey(node) zoneId := utilnode.GetZoneKey(node)
if zoneId != "" { if zoneId != "" {
zoneScore := maxPriority * ((maxCountByZone - countsByZone[zoneId]) / maxCountByZone) zoneScore := float64(schedulerapi.MaxPriority) * ((maxCountByZone - countsByZone[zoneId]) / maxCountByZone)
fScore = (fScore * (1.0 - zoneWeighting)) + (zoneWeighting * zoneScore) fScore = (fScore * (1.0 - zoneWeighting)) + (zoneWeighting * zoneScore)
} }
} }
...@@ -258,9 +254,9 @@ func (s *ServiceAntiAffinity) CalculateAntiAffinityPriority(pod *v1.Pod, nodeNam ...@@ -258,9 +254,9 @@ func (s *ServiceAntiAffinity) CalculateAntiAffinityPriority(pod *v1.Pod, nodeNam
// 0 being the lowest priority and maxPriority being the highest // 0 being the lowest priority and maxPriority being the highest
for node := range labeledNodes { for node := range labeledNodes {
// initializing to the default/max node score of maxPriority // initializing to the default/max node score of maxPriority
fScore := float32(maxPriority) fScore := float64(schedulerapi.MaxPriority)
if numServicePods > 0 { if numServicePods > 0 {
fScore = maxPriority * (float32(numServicePods-podCounts[labeledNodes[node]]) / float32(numServicePods)) fScore = float64(schedulerapi.MaxPriority) * (float64(numServicePods-podCounts[labeledNodes[node]]) / float64(numServicePods))
} }
result = append(result, schedulerapi.HostPriority{Host: node, Score: int(fScore)}) result = append(result, schedulerapi.HostPriority{Host: node, Score: int(fScore)})
} }
......
...@@ -83,13 +83,10 @@ func ComputeTaintTolerationPriorityReduce(pod *v1.Pod, meta interface{}, nodeNam ...@@ -83,13 +83,10 @@ func ComputeTaintTolerationPriorityReduce(pod *v1.Pod, meta interface{}, nodeNam
} }
maxCountFloat := float64(maxCount) maxCountFloat := float64(maxCount)
// The maximum priority value to give to a node
// Priority values range from 0 - maxPriority
const maxPriority = float64(10)
for i := range result { for i := range result {
fScore := maxPriority fScore := float64(schedulerapi.MaxPriority)
if maxCountFloat > 0 { if maxCountFloat > 0 {
fScore = (1.0 - float64(result[i].Score)/maxCountFloat) * 10 fScore = (1.0 - float64(result[i].Score)/maxCountFloat) * float64(schedulerapi.MaxPriority)
} }
if glog.V(10) { if glog.V(10) {
// We explicitly don't do glog.V(10).Infof() to avoid computing all the parameters if this is // We explicitly don't do glog.V(10).Infof() to avoid computing all the parameters if this is
......
...@@ -78,7 +78,7 @@ func TestTaintAndToleration(t *testing.T) { ...@@ -78,7 +78,7 @@ func TestTaintAndToleration(t *testing.T) {
}}), }}),
}, },
expectedList: []schedulerapi.HostPriority{ expectedList: []schedulerapi.HostPriority{
{Host: "nodeA", Score: 10}, {Host: "nodeA", Score: schedulerapi.MaxPriority},
{Host: "nodeB", Score: 0}, {Host: "nodeB", Score: 0},
}, },
}, },
...@@ -120,9 +120,9 @@ func TestTaintAndToleration(t *testing.T) { ...@@ -120,9 +120,9 @@ func TestTaintAndToleration(t *testing.T) {
}), }),
}, },
expectedList: []schedulerapi.HostPriority{ expectedList: []schedulerapi.HostPriority{
{Host: "nodeA", Score: 10}, {Host: "nodeA", Score: schedulerapi.MaxPriority},
{Host: "nodeB", Score: 10}, {Host: "nodeB", Score: schedulerapi.MaxPriority},
{Host: "nodeC", Score: 10}, {Host: "nodeC", Score: schedulerapi.MaxPriority},
}, },
}, },
// the count of taints on a node that are not tolerated by pod, matters. // the count of taints on a node that are not tolerated by pod, matters.
...@@ -156,7 +156,7 @@ func TestTaintAndToleration(t *testing.T) { ...@@ -156,7 +156,7 @@ func TestTaintAndToleration(t *testing.T) {
}), }),
}, },
expectedList: []schedulerapi.HostPriority{ expectedList: []schedulerapi.HostPriority{
{Host: "nodeA", Score: 10}, {Host: "nodeA", Score: schedulerapi.MaxPriority},
{Host: "nodeB", Score: 5}, {Host: "nodeB", Score: 5},
{Host: "nodeC", Score: 0}, {Host: "nodeC", Score: 0},
}, },
...@@ -199,8 +199,8 @@ func TestTaintAndToleration(t *testing.T) { ...@@ -199,8 +199,8 @@ func TestTaintAndToleration(t *testing.T) {
}), }),
}, },
expectedList: []schedulerapi.HostPriority{ expectedList: []schedulerapi.HostPriority{
{Host: "nodeA", Score: 10}, {Host: "nodeA", Score: schedulerapi.MaxPriority},
{Host: "nodeB", Score: 10}, {Host: "nodeB", Score: schedulerapi.MaxPriority},
{Host: "nodeC", Score: 0}, {Host: "nodeC", Score: 0},
}, },
}, },
...@@ -220,7 +220,7 @@ func TestTaintAndToleration(t *testing.T) { ...@@ -220,7 +220,7 @@ func TestTaintAndToleration(t *testing.T) {
}), }),
}, },
expectedList: []schedulerapi.HostPriority{ expectedList: []schedulerapi.HostPriority{
{Host: "nodeA", Score: 10}, {Host: "nodeA", Score: schedulerapi.MaxPriority},
{Host: "nodeB", Score: 0}, {Host: "nodeB", Score: 0},
}, },
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment