mirror of
https://github.com/kubernetes-sigs/descheduler.git
synced 2026-01-26 05:14:13 +01:00
Move helper funcs to testutil
This commit is contained in:
@@ -30,7 +30,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/fields"
|
"k8s.io/apimachinery/pkg/fields"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
serializer "k8s.io/apimachinery/pkg/runtime/serializer"
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
"k8s.io/client-go/kubernetes/fake"
|
"k8s.io/client-go/kubernetes/fake"
|
||||||
core "k8s.io/client-go/testing"
|
core "k8s.io/client-go/testing"
|
||||||
@@ -45,30 +45,6 @@ var (
|
|||||||
highPriority = int32(10000)
|
highPriority = int32(10000)
|
||||||
)
|
)
|
||||||
|
|
||||||
func setRSOwnerRef(pod *v1.Pod) { pod.ObjectMeta.OwnerReferences = test.GetReplicaSetOwnerRefList() }
|
|
||||||
func setDSOwnerRef(pod *v1.Pod) { pod.ObjectMeta.OwnerReferences = test.GetDaemonSetOwnerRefList() }
|
|
||||||
func setNormalOwnerRef(pod *v1.Pod) { pod.ObjectMeta.OwnerReferences = test.GetNormalPodOwnerRefList() }
|
|
||||||
func setHighPriority(pod *v1.Pod) { pod.Spec.Priority = &highPriority }
|
|
||||||
func setLowPriority(pod *v1.Pod) { pod.Spec.Priority = &lowPriority }
|
|
||||||
func setNodeUnschedulable(node *v1.Node) { node.Spec.Unschedulable = true }
|
|
||||||
|
|
||||||
func makeBestEffortPod(pod *v1.Pod) {
|
|
||||||
pod.Spec.Containers[0].Resources.Requests = nil
|
|
||||||
pod.Spec.Containers[0].Resources.Requests = nil
|
|
||||||
pod.Spec.Containers[0].Resources.Limits = nil
|
|
||||||
pod.Spec.Containers[0].Resources.Limits = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeBurstablePod(pod *v1.Pod) {
|
|
||||||
pod.Spec.Containers[0].Resources.Limits = nil
|
|
||||||
pod.Spec.Containers[0].Resources.Limits = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeGuaranteedPod(pod *v1.Pod) {
|
|
||||||
pod.Spec.Containers[0].Resources.Limits[v1.ResourceCPU] = pod.Spec.Containers[0].Resources.Requests[v1.ResourceCPU]
|
|
||||||
pod.Spec.Containers[0].Resources.Limits[v1.ResourceMemory] = pod.Spec.Containers[0].Resources.Requests[v1.ResourceMemory]
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLowNodeUtilization(t *testing.T) {
|
func TestLowNodeUtilization(t *testing.T) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
n1NodeName := "n1"
|
n1NodeName := "n1"
|
||||||
@@ -99,19 +75,19 @@ func TestLowNodeUtilization(t *testing.T) {
|
|||||||
nodes: map[string]*v1.Node{
|
nodes: map[string]*v1.Node{
|
||||||
n1NodeName: test.BuildTestNode(n1NodeName, 4000, 3000, 9, nil),
|
n1NodeName: test.BuildTestNode(n1NodeName, 4000, 3000, 9, nil),
|
||||||
n2NodeName: test.BuildTestNode(n2NodeName, 4000, 3000, 10, nil),
|
n2NodeName: test.BuildTestNode(n2NodeName, 4000, 3000, 10, nil),
|
||||||
n3NodeName: test.BuildTestNode(n3NodeName, 4000, 3000, 10, setNodeUnschedulable),
|
n3NodeName: test.BuildTestNode(n3NodeName, 4000, 3000, 10, test.SetNodeUnschedulable),
|
||||||
},
|
},
|
||||||
pods: map[string]*v1.PodList{
|
pods: map[string]*v1.PodList{
|
||||||
n1NodeName: {
|
n1NodeName: {
|
||||||
Items: []v1.Pod{
|
Items: []v1.Pod{
|
||||||
// These won't be evicted.
|
// These won't be evicted.
|
||||||
*test.BuildTestPod("p1", 400, 0, n1NodeName, setDSOwnerRef),
|
*test.BuildTestPod("p1", 400, 0, n1NodeName, test.SetDSOwnerRef),
|
||||||
*test.BuildTestPod("p2", 400, 0, n1NodeName, setDSOwnerRef),
|
*test.BuildTestPod("p2", 400, 0, n1NodeName, test.SetDSOwnerRef),
|
||||||
*test.BuildTestPod("p3", 400, 0, n1NodeName, setDSOwnerRef),
|
*test.BuildTestPod("p3", 400, 0, n1NodeName, test.SetDSOwnerRef),
|
||||||
*test.BuildTestPod("p4", 400, 0, n1NodeName, setDSOwnerRef),
|
*test.BuildTestPod("p4", 400, 0, n1NodeName, test.SetDSOwnerRef),
|
||||||
*test.BuildTestPod("p5", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p5", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
// A pod with local storage.
|
// A pod with local storage.
|
||||||
setNormalOwnerRef(pod)
|
test.SetNormalOwnerRef(pod)
|
||||||
pod.Spec.Volumes = []v1.Volume{
|
pod.Spec.Volumes = []v1.Volume{
|
||||||
{
|
{
|
||||||
Name: "sample",
|
Name: "sample",
|
||||||
@@ -135,7 +111,7 @@ func TestLowNodeUtilization(t *testing.T) {
|
|||||||
},
|
},
|
||||||
n2NodeName: {
|
n2NodeName: {
|
||||||
Items: []v1.Pod{
|
Items: []v1.Pod{
|
||||||
*test.BuildTestPod("p9", 400, 0, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p9", 400, 0, n1NodeName, test.SetRSOwnerRef),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
n3NodeName: {},
|
n3NodeName: {},
|
||||||
@@ -155,21 +131,21 @@ func TestLowNodeUtilization(t *testing.T) {
|
|||||||
nodes: map[string]*v1.Node{
|
nodes: map[string]*v1.Node{
|
||||||
n1NodeName: test.BuildTestNode(n1NodeName, 4000, 3000, 9, nil),
|
n1NodeName: test.BuildTestNode(n1NodeName, 4000, 3000, 9, nil),
|
||||||
n2NodeName: test.BuildTestNode(n2NodeName, 4000, 3000, 10, nil),
|
n2NodeName: test.BuildTestNode(n2NodeName, 4000, 3000, 10, nil),
|
||||||
n3NodeName: test.BuildTestNode(n3NodeName, 4000, 3000, 10, setNodeUnschedulable),
|
n3NodeName: test.BuildTestNode(n3NodeName, 4000, 3000, 10, test.SetNodeUnschedulable),
|
||||||
},
|
},
|
||||||
pods: map[string]*v1.PodList{
|
pods: map[string]*v1.PodList{
|
||||||
n1NodeName: {
|
n1NodeName: {
|
||||||
Items: []v1.Pod{
|
Items: []v1.Pod{
|
||||||
*test.BuildTestPod("p1", 400, 0, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p1", 400, 0, n1NodeName, test.SetRSOwnerRef),
|
||||||
*test.BuildTestPod("p2", 400, 0, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p2", 400, 0, n1NodeName, test.SetRSOwnerRef),
|
||||||
*test.BuildTestPod("p3", 400, 0, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p3", 400, 0, n1NodeName, test.SetRSOwnerRef),
|
||||||
*test.BuildTestPod("p4", 400, 0, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p4", 400, 0, n1NodeName, test.SetRSOwnerRef),
|
||||||
*test.BuildTestPod("p5", 400, 0, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p5", 400, 0, n1NodeName, test.SetRSOwnerRef),
|
||||||
// These won't be evicted.
|
// These won't be evicted.
|
||||||
*test.BuildTestPod("p6", 400, 0, n1NodeName, setDSOwnerRef),
|
*test.BuildTestPod("p6", 400, 0, n1NodeName, test.SetDSOwnerRef),
|
||||||
*test.BuildTestPod("p7", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p7", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
// A pod with local storage.
|
// A pod with local storage.
|
||||||
setNormalOwnerRef(pod)
|
test.SetNormalOwnerRef(pod)
|
||||||
pod.Spec.Volumes = []v1.Volume{
|
pod.Spec.Volumes = []v1.Volume{
|
||||||
{
|
{
|
||||||
Name: "sample",
|
Name: "sample",
|
||||||
@@ -193,7 +169,7 @@ func TestLowNodeUtilization(t *testing.T) {
|
|||||||
},
|
},
|
||||||
n2NodeName: {
|
n2NodeName: {
|
||||||
Items: []v1.Pod{
|
Items: []v1.Pod{
|
||||||
*test.BuildTestPod("p9", 400, 0, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p9", 400, 0, n1NodeName, test.SetRSOwnerRef),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
n3NodeName: {},
|
n3NodeName: {},
|
||||||
@@ -213,21 +189,21 @@ func TestLowNodeUtilization(t *testing.T) {
|
|||||||
nodes: map[string]*v1.Node{
|
nodes: map[string]*v1.Node{
|
||||||
n1NodeName: test.BuildTestNode(n1NodeName, 4000, 3000, 9, nil),
|
n1NodeName: test.BuildTestNode(n1NodeName, 4000, 3000, 9, nil),
|
||||||
n2NodeName: test.BuildTestNode(n2NodeName, 4000, 3000, 10, nil),
|
n2NodeName: test.BuildTestNode(n2NodeName, 4000, 3000, 10, nil),
|
||||||
n3NodeName: test.BuildTestNode(n3NodeName, 4000, 3000, 10, setNodeUnschedulable),
|
n3NodeName: test.BuildTestNode(n3NodeName, 4000, 3000, 10, test.SetNodeUnschedulable),
|
||||||
},
|
},
|
||||||
pods: map[string]*v1.PodList{
|
pods: map[string]*v1.PodList{
|
||||||
n1NodeName: {
|
n1NodeName: {
|
||||||
Items: []v1.Pod{
|
Items: []v1.Pod{
|
||||||
*test.BuildTestPod("p1", 400, 300, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p1", 400, 300, n1NodeName, test.SetRSOwnerRef),
|
||||||
*test.BuildTestPod("p2", 400, 300, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p2", 400, 300, n1NodeName, test.SetRSOwnerRef),
|
||||||
*test.BuildTestPod("p3", 400, 300, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p3", 400, 300, n1NodeName, test.SetRSOwnerRef),
|
||||||
*test.BuildTestPod("p4", 400, 300, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p4", 400, 300, n1NodeName, test.SetRSOwnerRef),
|
||||||
*test.BuildTestPod("p5", 400, 300, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p5", 400, 300, n1NodeName, test.SetRSOwnerRef),
|
||||||
// These won't be evicted.
|
// These won't be evicted.
|
||||||
*test.BuildTestPod("p6", 400, 300, n1NodeName, setDSOwnerRef),
|
*test.BuildTestPod("p6", 400, 300, n1NodeName, test.SetDSOwnerRef),
|
||||||
*test.BuildTestPod("p7", 400, 300, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p7", 400, 300, n1NodeName, func(pod *v1.Pod) {
|
||||||
// A pod with local storage.
|
// A pod with local storage.
|
||||||
setNormalOwnerRef(pod)
|
test.SetNormalOwnerRef(pod)
|
||||||
pod.Spec.Volumes = []v1.Volume{
|
pod.Spec.Volumes = []v1.Volume{
|
||||||
{
|
{
|
||||||
Name: "sample",
|
Name: "sample",
|
||||||
@@ -251,7 +227,7 @@ func TestLowNodeUtilization(t *testing.T) {
|
|||||||
},
|
},
|
||||||
n2NodeName: {
|
n2NodeName: {
|
||||||
Items: []v1.Pod{
|
Items: []v1.Pod{
|
||||||
*test.BuildTestPod("p9", 400, 2100, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p9", 400, 2100, n1NodeName, test.SetRSOwnerRef),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
n3NodeName: {},
|
n3NodeName: {},
|
||||||
@@ -272,40 +248,40 @@ func TestLowNodeUtilization(t *testing.T) {
|
|||||||
nodes: map[string]*v1.Node{
|
nodes: map[string]*v1.Node{
|
||||||
n1NodeName: test.BuildTestNode(n1NodeName, 4000, 3000, 9, nil),
|
n1NodeName: test.BuildTestNode(n1NodeName, 4000, 3000, 9, nil),
|
||||||
n2NodeName: test.BuildTestNode(n2NodeName, 4000, 3000, 10, nil),
|
n2NodeName: test.BuildTestNode(n2NodeName, 4000, 3000, 10, nil),
|
||||||
n3NodeName: test.BuildTestNode(n3NodeName, 4000, 3000, 10, setNodeUnschedulable),
|
n3NodeName: test.BuildTestNode(n3NodeName, 4000, 3000, 10, test.SetNodeUnschedulable),
|
||||||
},
|
},
|
||||||
pods: map[string]*v1.PodList{
|
pods: map[string]*v1.PodList{
|
||||||
n1NodeName: {
|
n1NodeName: {
|
||||||
Items: []v1.Pod{
|
Items: []v1.Pod{
|
||||||
*test.BuildTestPod("p1", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p1", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
setRSOwnerRef(pod)
|
test.SetRSOwnerRef(pod)
|
||||||
setHighPriority(pod)
|
test.SetPodPriority(pod, highPriority)
|
||||||
}),
|
}),
|
||||||
*test.BuildTestPod("p2", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p2", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
setRSOwnerRef(pod)
|
test.SetRSOwnerRef(pod)
|
||||||
setHighPriority(pod)
|
test.SetPodPriority(pod, highPriority)
|
||||||
}),
|
}),
|
||||||
*test.BuildTestPod("p3", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p3", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
setRSOwnerRef(pod)
|
test.SetRSOwnerRef(pod)
|
||||||
setHighPriority(pod)
|
test.SetPodPriority(pod, highPriority)
|
||||||
}),
|
}),
|
||||||
*test.BuildTestPod("p4", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p4", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
setRSOwnerRef(pod)
|
test.SetRSOwnerRef(pod)
|
||||||
setHighPriority(pod)
|
test.SetPodPriority(pod, highPriority)
|
||||||
}),
|
}),
|
||||||
*test.BuildTestPod("p5", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p5", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
setRSOwnerRef(pod)
|
test.SetRSOwnerRef(pod)
|
||||||
setLowPriority(pod)
|
test.SetPodPriority(pod, lowPriority)
|
||||||
}),
|
}),
|
||||||
// These won't be evicted.
|
// These won't be evicted.
|
||||||
*test.BuildTestPod("p6", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p6", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
setDSOwnerRef(pod)
|
test.SetDSOwnerRef(pod)
|
||||||
setHighPriority(pod)
|
test.SetPodPriority(pod, highPriority)
|
||||||
}),
|
}),
|
||||||
*test.BuildTestPod("p7", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p7", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
// A pod with local storage.
|
// A pod with local storage.
|
||||||
setNormalOwnerRef(pod)
|
test.SetNormalOwnerRef(pod)
|
||||||
setLowPriority(pod)
|
test.SetPodPriority(pod, lowPriority)
|
||||||
pod.Spec.Volumes = []v1.Volume{
|
pod.Spec.Volumes = []v1.Volume{
|
||||||
{
|
{
|
||||||
Name: "sample",
|
Name: "sample",
|
||||||
@@ -329,7 +305,7 @@ func TestLowNodeUtilization(t *testing.T) {
|
|||||||
},
|
},
|
||||||
n2NodeName: {
|
n2NodeName: {
|
||||||
Items: []v1.Pod{
|
Items: []v1.Pod{
|
||||||
*test.BuildTestPod("p9", 400, 0, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p9", 400, 0, n1NodeName, test.SetRSOwnerRef),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
n3NodeName: {},
|
n3NodeName: {},
|
||||||
@@ -349,38 +325,38 @@ func TestLowNodeUtilization(t *testing.T) {
|
|||||||
nodes: map[string]*v1.Node{
|
nodes: map[string]*v1.Node{
|
||||||
n1NodeName: test.BuildTestNode(n1NodeName, 4000, 3000, 9, nil),
|
n1NodeName: test.BuildTestNode(n1NodeName, 4000, 3000, 9, nil),
|
||||||
n2NodeName: test.BuildTestNode(n2NodeName, 4000, 3000, 10, nil),
|
n2NodeName: test.BuildTestNode(n2NodeName, 4000, 3000, 10, nil),
|
||||||
n3NodeName: test.BuildTestNode(n3NodeName, 4000, 3000, 10, setNodeUnschedulable),
|
n3NodeName: test.BuildTestNode(n3NodeName, 4000, 3000, 10, test.SetNodeUnschedulable),
|
||||||
},
|
},
|
||||||
// All pods are assumed to be burstable (test.BuildTestNode always sets both cpu/memory resource requests to some value)
|
// All pods are assumed to be burstable (test.BuildTestNode always sets both cpu/memory resource requests to some value)
|
||||||
pods: map[string]*v1.PodList{
|
pods: map[string]*v1.PodList{
|
||||||
n1NodeName: {
|
n1NodeName: {
|
||||||
Items: []v1.Pod{
|
Items: []v1.Pod{
|
||||||
*test.BuildTestPod("p1", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p1", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
setRSOwnerRef(pod)
|
test.SetRSOwnerRef(pod)
|
||||||
makeBestEffortPod(pod)
|
test.MakeBestEffortPod(pod)
|
||||||
}),
|
}),
|
||||||
*test.BuildTestPod("p2", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p2", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
setRSOwnerRef(pod)
|
test.SetRSOwnerRef(pod)
|
||||||
makeBestEffortPod(pod)
|
test.MakeBestEffortPod(pod)
|
||||||
}),
|
}),
|
||||||
*test.BuildTestPod("p3", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p3", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
setRSOwnerRef(pod)
|
test.SetRSOwnerRef(pod)
|
||||||
}),
|
}),
|
||||||
*test.BuildTestPod("p4", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p4", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
setRSOwnerRef(pod)
|
test.SetRSOwnerRef(pod)
|
||||||
makeBestEffortPod(pod)
|
test.MakeBestEffortPod(pod)
|
||||||
}),
|
}),
|
||||||
*test.BuildTestPod("p5", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p5", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
setRSOwnerRef(pod)
|
test.SetRSOwnerRef(pod)
|
||||||
makeBestEffortPod(pod)
|
test.MakeBestEffortPod(pod)
|
||||||
}),
|
}),
|
||||||
// These won't be evicted.
|
// These won't be evicted.
|
||||||
*test.BuildTestPod("p6", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p6", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
setDSOwnerRef(pod)
|
test.SetDSOwnerRef(pod)
|
||||||
}),
|
}),
|
||||||
*test.BuildTestPod("p7", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
*test.BuildTestPod("p7", 400, 0, n1NodeName, func(pod *v1.Pod) {
|
||||||
// A pod with local storage.
|
// A pod with local storage.
|
||||||
setNormalOwnerRef(pod)
|
test.SetNormalOwnerRef(pod)
|
||||||
pod.Spec.Volumes = []v1.Volume{
|
pod.Spec.Volumes = []v1.Volume{
|
||||||
{
|
{
|
||||||
Name: "sample",
|
Name: "sample",
|
||||||
@@ -404,7 +380,7 @@ func TestLowNodeUtilization(t *testing.T) {
|
|||||||
},
|
},
|
||||||
n2NodeName: {
|
n2NodeName: {
|
||||||
Items: []v1.Pod{
|
Items: []v1.Pod{
|
||||||
*test.BuildTestPod("p9", 400, 0, n1NodeName, setRSOwnerRef),
|
*test.BuildTestPod("p9", 400, 0, n1NodeName, test.SetRSOwnerRef),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
n3NodeName: {},
|
n3NodeName: {},
|
||||||
@@ -498,31 +474,33 @@ func TestLowNodeUtilization(t *testing.T) {
|
|||||||
func TestSortPodsByPriority(t *testing.T) {
|
func TestSortPodsByPriority(t *testing.T) {
|
||||||
n1 := test.BuildTestNode("n1", 4000, 3000, 9, nil)
|
n1 := test.BuildTestNode("n1", 4000, 3000, 9, nil)
|
||||||
|
|
||||||
p1 := test.BuildTestPod("p1", 400, 0, n1.Name, setLowPriority)
|
p1 := test.BuildTestPod("p1", 400, 0, n1.Name, func(pod *v1.Pod) {
|
||||||
|
test.SetPodPriority(pod, lowPriority)
|
||||||
|
})
|
||||||
|
|
||||||
// BestEffort
|
// BestEffort
|
||||||
p2 := test.BuildTestPod("p2", 400, 0, n1.Name, func(pod *v1.Pod) {
|
p2 := test.BuildTestPod("p2", 400, 0, n1.Name, func(pod *v1.Pod) {
|
||||||
setHighPriority(pod)
|
test.SetPodPriority(pod, highPriority)
|
||||||
makeBestEffortPod(pod)
|
test.MakeBestEffortPod(pod)
|
||||||
})
|
})
|
||||||
|
|
||||||
// Burstable
|
// Burstable
|
||||||
p3 := test.BuildTestPod("p3", 400, 0, n1.Name, func(pod *v1.Pod) {
|
p3 := test.BuildTestPod("p3", 400, 0, n1.Name, func(pod *v1.Pod) {
|
||||||
setHighPriority(pod)
|
test.SetPodPriority(pod, highPriority)
|
||||||
makeBurstablePod(pod)
|
test.MakeBurstablePod(pod)
|
||||||
})
|
})
|
||||||
|
|
||||||
// Guaranteed
|
// Guaranteed
|
||||||
p4 := test.BuildTestPod("p4", 400, 100, n1.Name, func(pod *v1.Pod) {
|
p4 := test.BuildTestPod("p4", 400, 100, n1.Name, func(pod *v1.Pod) {
|
||||||
setHighPriority(pod)
|
test.SetPodPriority(pod, highPriority)
|
||||||
makeGuaranteedPod(pod)
|
test.MakeGuaranteedPod(pod)
|
||||||
})
|
})
|
||||||
|
|
||||||
// Best effort with nil priorities.
|
// Best effort with nil priorities.
|
||||||
p5 := test.BuildTestPod("p5", 400, 100, n1.Name, makeBestEffortPod)
|
p5 := test.BuildTestPod("p5", 400, 100, n1.Name, test.MakeBestEffortPod)
|
||||||
p5.Spec.Priority = nil
|
p5.Spec.Priority = nil
|
||||||
|
|
||||||
p6 := test.BuildTestPod("p6", 400, 100, n1.Name, makeGuaranteedPod)
|
p6 := test.BuildTestPod("p6", 400, 100, n1.Name, test.MakeGuaranteedPod)
|
||||||
p6.Spec.Priority = nil
|
p6.Spec.Priority = nil
|
||||||
|
|
||||||
podList := []*v1.Pod{p4, p3, p2, p1, p6, p5}
|
podList := []*v1.Pod{p4, p3, p2, p1, p6, p5}
|
||||||
@@ -783,7 +761,7 @@ func TestWithTaints(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
podThatToleratesTaint := test.BuildTestPod("tolerate_pod", 200, 0, n1.Name, setRSOwnerRef)
|
podThatToleratesTaint := test.BuildTestPod("tolerate_pod", 200, 0, n1.Name, test.SetRSOwnerRef)
|
||||||
podThatToleratesTaint.Spec.Tolerations = []v1.Toleration{
|
podThatToleratesTaint.Spec.Tolerations = []v1.Toleration{
|
||||||
{
|
{
|
||||||
Key: "key",
|
Key: "key",
|
||||||
@@ -802,16 +780,16 @@ func TestWithTaints(t *testing.T) {
|
|||||||
nodes: []*v1.Node{n1, n2, n3},
|
nodes: []*v1.Node{n1, n2, n3},
|
||||||
pods: []*v1.Pod{
|
pods: []*v1.Pod{
|
||||||
//Node 1 pods
|
//Node 1 pods
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_1_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_1_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_2_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_2_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_3_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_3_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_4_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_4_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_5_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_5_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_6_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_6_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_7_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_7_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_8_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_8_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
// Node 2 pods
|
// Node 2 pods
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_9_%s", n2.Name), 200, 0, n2.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_9_%s", n2.Name), 200, 0, n2.Name, test.SetRSOwnerRef),
|
||||||
},
|
},
|
||||||
evictionsExpected: 1,
|
evictionsExpected: 1,
|
||||||
},
|
},
|
||||||
@@ -820,16 +798,16 @@ func TestWithTaints(t *testing.T) {
|
|||||||
nodes: []*v1.Node{n1, n3withTaints},
|
nodes: []*v1.Node{n1, n3withTaints},
|
||||||
pods: []*v1.Pod{
|
pods: []*v1.Pod{
|
||||||
//Node 1 pods
|
//Node 1 pods
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_1_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_1_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_2_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_2_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_3_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_3_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_4_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_4_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_5_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_5_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_6_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_6_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_7_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_7_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_8_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_8_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
// Node 3 pods
|
// Node 3 pods
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_9_%s", n3withTaints.Name), 200, 0, n3withTaints.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_9_%s", n3withTaints.Name), 200, 0, n3withTaints.Name, test.SetRSOwnerRef),
|
||||||
},
|
},
|
||||||
evictionsExpected: 0,
|
evictionsExpected: 0,
|
||||||
},
|
},
|
||||||
@@ -838,16 +816,16 @@ func TestWithTaints(t *testing.T) {
|
|||||||
nodes: []*v1.Node{n1, n3withTaints},
|
nodes: []*v1.Node{n1, n3withTaints},
|
||||||
pods: []*v1.Pod{
|
pods: []*v1.Pod{
|
||||||
//Node 1 pods
|
//Node 1 pods
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_1_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_1_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_2_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_2_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_3_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_3_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_4_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_4_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_5_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_5_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_6_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_6_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_7_%s", n1.Name), 200, 0, n1.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_7_%s", n1.Name), 200, 0, n1.Name, test.SetRSOwnerRef),
|
||||||
podThatToleratesTaint,
|
podThatToleratesTaint,
|
||||||
// Node 3 pods
|
// Node 3 pods
|
||||||
test.BuildTestPod(fmt.Sprintf("pod_9_%s", n3withTaints.Name), 200, 0, n3withTaints.Name, setRSOwnerRef),
|
test.BuildTestPod(fmt.Sprintf("pod_9_%s", n3withTaints.Name), 200, 0, n3withTaints.Name, test.SetRSOwnerRef),
|
||||||
},
|
},
|
||||||
evictionsExpected: 1,
|
evictionsExpected: 1,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -116,3 +116,48 @@ func BuildTestNode(name string, millicpu int64, mem int64, pods int64, apply fun
|
|||||||
}
|
}
|
||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MakeBestEffortPod makes the given pod a BestEffort pod
|
||||||
|
func MakeBestEffortPod(pod *v1.Pod) {
|
||||||
|
pod.Spec.Containers[0].Resources.Requests = nil
|
||||||
|
pod.Spec.Containers[0].Resources.Requests = nil
|
||||||
|
pod.Spec.Containers[0].Resources.Limits = nil
|
||||||
|
pod.Spec.Containers[0].Resources.Limits = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MakeBurstablePod makes the given pod a Burstable pod
|
||||||
|
func MakeBurstablePod(pod *v1.Pod) {
|
||||||
|
pod.Spec.Containers[0].Resources.Limits = nil
|
||||||
|
pod.Spec.Containers[0].Resources.Limits = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MakeGuaranteedPod makes the given pod an Guaranteed pod
|
||||||
|
func MakeGuaranteedPod(pod *v1.Pod) {
|
||||||
|
pod.Spec.Containers[0].Resources.Limits[v1.ResourceCPU] = pod.Spec.Containers[0].Resources.Requests[v1.ResourceCPU]
|
||||||
|
pod.Spec.Containers[0].Resources.Limits[v1.ResourceMemory] = pod.Spec.Containers[0].Resources.Requests[v1.ResourceMemory]
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRSOwnerRef sets the given pod's owner to ReplicaSet
|
||||||
|
func SetRSOwnerRef(pod *v1.Pod) {
|
||||||
|
pod.ObjectMeta.OwnerReferences = GetReplicaSetOwnerRefList()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetDSOwnerRef sets the given pod's owner to DaemonSet
|
||||||
|
func SetDSOwnerRef(pod *v1.Pod) {
|
||||||
|
pod.ObjectMeta.OwnerReferences = GetDaemonSetOwnerRefList()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNormalOwnerRef sets the given pod's owner to Pod
|
||||||
|
func SetNormalOwnerRef(pod *v1.Pod) {
|
||||||
|
pod.ObjectMeta.OwnerReferences = GetNormalPodOwnerRefList()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPodPriority sets the given pod's priority
|
||||||
|
func SetPodPriority(pod *v1.Pod, priority int32) {
|
||||||
|
pod.Spec.Priority = &priority
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNodeUnschedulable sets the given node unschedulable
|
||||||
|
func SetNodeUnschedulable(node *v1.Node) {
|
||||||
|
node.Spec.Unschedulable = true
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user