mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Scheduler/plugins/nodelabel fix no label preference
This commit is contained in:
parent
bc13a38367
commit
ab3a765570
@ -89,6 +89,12 @@ func (pl *NodeLabel) Filter(ctx context.Context, _ *framework.CycleState, pod *v
|
|||||||
if node == nil {
|
if node == nil {
|
||||||
return framework.NewStatus(framework.Error, "node not found")
|
return framework.NewStatus(framework.Error, "node not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size := int64(len(pl.args.PresentLabels) + len(pl.args.AbsentLabels))
|
||||||
|
if size == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
nodeLabels := labels.Set(node.Labels)
|
nodeLabels := labels.Set(node.Labels)
|
||||||
check := func(labels []string, presence bool) bool {
|
check := func(labels []string, presence bool) bool {
|
||||||
for _, label := range labels {
|
for _, label := range labels {
|
||||||
@ -114,6 +120,15 @@ func (pl *NodeLabel) Score(ctx context.Context, state *framework.CycleState, pod
|
|||||||
}
|
}
|
||||||
|
|
||||||
node := nodeInfo.Node()
|
node := nodeInfo.Node()
|
||||||
|
if node == nil {
|
||||||
|
return 0, framework.NewStatus(framework.Error, "node not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
size := int64(len(pl.args.PresentLabelsPreference) + len(pl.args.AbsentLabelsPreference))
|
||||||
|
if size == 0 {
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
score := int64(0)
|
score := int64(0)
|
||||||
for _, label := range pl.args.PresentLabelsPreference {
|
for _, label := range pl.args.PresentLabelsPreference {
|
||||||
if labels.Set(node.Labels).Has(label) {
|
if labels.Set(node.Labels).Has(label) {
|
||||||
@ -125,8 +140,9 @@ func (pl *NodeLabel) Score(ctx context.Context, state *framework.CycleState, pod
|
|||||||
score += framework.MaxNodeScore
|
score += framework.MaxNodeScore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Take average score for each label to ensure the score doesn't exceed MaxNodeScore.
|
// Take average score for each label to ensure the score doesn't exceed MaxNodeScore.
|
||||||
score /= int64(len(pl.args.PresentLabelsPreference) + len(pl.args.AbsentLabelsPreference))
|
score /= size
|
||||||
|
|
||||||
return score, nil
|
return score, nil
|
||||||
}
|
}
|
||||||
|
@ -110,6 +110,11 @@ func TestNodeLabelFilter(t *testing.T) {
|
|||||||
},
|
},
|
||||||
res: framework.UnschedulableAndUnresolvable,
|
res: framework.UnschedulableAndUnresolvable,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "no label",
|
||||||
|
args: config.NodeLabelArgs{},
|
||||||
|
res: framework.Success,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
@ -231,6 +236,11 @@ func TestNodeLabelScore(t *testing.T) {
|
|||||||
},
|
},
|
||||||
name: "two present labels one matches, two absent labels mismatch",
|
name: "two present labels one matches, two absent labels mismatch",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
want: 0,
|
||||||
|
args: config.NodeLabelArgs{},
|
||||||
|
name: "no label preference",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
|
Loading…
Reference in New Issue
Block a user