Commit ac8b985b authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #42890 from wanghaoran1988/e2e_scheduler_priority

Automatic merge from submit-queue [e2e] Scheduler priority test Fix https://github.com/kubernetes/kubernetes/issues/42439 In order to reduce the interfere of the balanced least-requested priority function, I create a balance pod to make the node have same mem/cpu use rate, not sure it's a correct way, but it did good, I have not cover all the scenarios yet, want to get feedback whether I am in the right way. @k82cn @bsalamat Would you please help review ?
parents a644c8f9 0b3a6c80
...@@ -19,6 +19,7 @@ package framework ...@@ -19,6 +19,7 @@ package framework
import ( import (
"bytes" "bytes"
"context" "context"
"encoding/json"
"errors" "errors"
"fmt" "fmt"
"io" "io"
...@@ -2601,6 +2602,55 @@ func NodeHasTaint(c clientset.Interface, nodeName string, taint *v1.Taint) (bool ...@@ -2601,6 +2602,55 @@ func NodeHasTaint(c clientset.Interface, nodeName string, taint *v1.Taint) (bool
return true, nil return true, nil
} }
//AddOrUpdateAvoidPodOnNode adds avoidPods annotations to node, will override if it exists
func AddOrUpdateAvoidPodOnNode(c clientset.Interface, nodeName string, avoidPods v1.AvoidPods) {
err := wait.PollImmediate(Poll, SingleCallTimeout, func() (bool, error) {
node, err := c.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{})
ExpectNoError(err)
taintsData, err := json.Marshal(avoidPods)
ExpectNoError(err)
if node.Annotations == nil {
node.Annotations = make(map[string]string)
}
node.Annotations[v1.PreferAvoidPodsAnnotationKey] = string(taintsData)
_, err = c.CoreV1().Nodes().Update(node)
if err != nil {
if !apierrs.IsConflict(err) {
ExpectNoError(err)
} else {
Logf("Conflict when trying to add/update avoidPonds %v to %v", avoidPods, nodeName)
}
}
return true, nil
})
ExpectNoError(err)
}
//RemoveAnnotationOffNode removes AvoidPods annotations from the node. It does not fail if no such annotation exists.
func RemoveAvoidPodsOffNode(c clientset.Interface, nodeName string) {
err := wait.PollImmediate(Poll, SingleCallTimeout, func() (bool, error) {
node, err := c.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{})
ExpectNoError(err)
if node.Annotations == nil {
return true, nil
}
delete(node.Annotations, v1.PreferAvoidPodsAnnotationKey)
_, err = c.CoreV1().Nodes().Update(node)
if err != nil {
if !apierrs.IsConflict(err) {
ExpectNoError(err)
} else {
Logf("Conflict when trying to remove avoidPods to %v", nodeName)
}
}
return true, nil
})
ExpectNoError(err)
}
func getScalerForKind(internalClientset internalclientset.Interface, kind schema.GroupKind) (kubectl.Scaler, error) { func getScalerForKind(internalClientset internalclientset.Interface, kind schema.GroupKind) (kubectl.Scaler, error) {
return kubectl.ScalerFor(kind, internalClientset) return kubectl.ScalerFor(kind, internalClientset)
} }
......
...@@ -13,6 +13,7 @@ go_library( ...@@ -13,6 +13,7 @@ go_library(
"events.go", "events.go",
"opaque_resource.go", "opaque_resource.go",
"predicates.go", "predicates.go",
"priorities.go",
"rescheduler.go", "rescheduler.go",
], ],
tags = ["automanaged"], tags = ["automanaged"],
...@@ -20,6 +21,7 @@ go_library( ...@@ -20,6 +21,7 @@ go_library(
"//pkg/api/v1:go_default_library", "//pkg/api/v1:go_default_library",
"//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library",
"//pkg/util/system:go_default_library", "//pkg/util/system:go_default_library",
"//plugin/pkg/scheduler/algorithm/priorities/util:go_default_library",
"//test/e2e/common:go_default_library", "//test/e2e/common:go_default_library",
"//test/e2e/framework:go_default_library", "//test/e2e/framework:go_default_library",
"//test/utils:go_default_library", "//test/utils:go_default_library",
......
...@@ -48,6 +48,7 @@ type pausePodConfig struct { ...@@ -48,6 +48,7 @@ type pausePodConfig struct {
Annotations, Labels, NodeSelector map[string]string Annotations, Labels, NodeSelector map[string]string
Resources *v1.ResourceRequirements Resources *v1.ResourceRequirements
Tolerations []v1.Toleration Tolerations []v1.Toleration
NodeName string
} }
var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() { var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
...@@ -757,6 +758,7 @@ func initPausePod(f *framework.Framework, conf pausePodConfig) *v1.Pod { ...@@ -757,6 +758,7 @@ func initPausePod(f *framework.Framework, conf pausePodConfig) *v1.Pod {
}, },
}, },
Tolerations: conf.Tolerations, Tolerations: conf.Tolerations,
NodeName: conf.NodeName,
}, },
} }
if conf.Resources != nil { if conf.Resources != nil {
......
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