1
0
mirror of https://github.com/kubernetes-sigs/descheduler.git synced 2026-01-26 13:29:11 +01:00

NewPodEvictor: drop nodes parameter

This commit is contained in:
Jan Chaloupka
2024-06-22 15:02:07 +02:00
parent cdbd101eae
commit 0901cb18bf
19 changed files with 65 additions and 42 deletions

View File

@@ -160,7 +160,6 @@ func (d *descheduler) runDeschedulerLoop(ctx context.Context, nodes []*v1.Node)
d.rs.DryRun,
d.deschedulerPolicy.MaxNoOfPodsToEvictPerNode,
d.deschedulerPolicy.MaxNoOfPodsToEvictPerNamespace,
nodes,
!d.rs.DisableMetrics,
d.eventRecorder,
)

View File

@@ -43,7 +43,6 @@ type (
type PodEvictor struct {
client clientset.Interface
nodes []*v1.Node
policyGroupVersion string
dryRun bool
maxPodsToEvictPerNode *uint
@@ -60,26 +59,17 @@ func NewPodEvictor(
dryRun bool,
maxPodsToEvictPerNode *uint,
maxPodsToEvictPerNamespace *uint,
nodes []*v1.Node,
metricsEnabled bool,
eventRecorder events.EventRecorder,
) *PodEvictor {
nodePodCount := make(nodePodEvictedCount)
namespacePodCount := make(namespacePodEvictCount)
for _, node := range nodes {
// Initialize podsEvicted till now with 0.
nodePodCount[node.Name] = 0
}
return &PodEvictor{
client: client,
nodes: nodes,
policyGroupVersion: policyGroupVersion,
dryRun: dryRun,
maxPodsToEvictPerNode: maxPodsToEvictPerNode,
maxPodsToEvictPerNamespace: maxPodsToEvictPerNamespace,
nodepodCount: nodePodCount,
namespacePodCount: namespacePodCount,
nodepodCount: make(nodePodEvictedCount),
namespacePodCount: make(namespacePodEvictCount),
metricsEnabled: metricsEnabled,
eventRecorder: eventRecorder,
}

View File

@@ -22,9 +22,12 @@ import (
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/kubernetes/fake"
core "k8s.io/client-go/testing"
"k8s.io/client-go/tools/events"
utilpointer "k8s.io/utils/pointer"
podutil "sigs.k8s.io/descheduler/pkg/descheduler/pod"
"sigs.k8s.io/descheduler/pkg/utils"
"sigs.k8s.io/descheduler/test"
@@ -113,3 +116,52 @@ func TestPodTypes(t *testing.T) {
t.Errorf("Expected p1 to be a normal pod.")
}
}
func TestNewPodEvictor(t *testing.T) {
pod1 := test.BuildTestPod("pod", 400, 0, "node", nil)
fakeClient := fake.NewSimpleClientset(pod1)
eventRecorder := &events.FakeRecorder{}
podEvictor := NewPodEvictor(
fakeClient,
"policy/v1",
false,
utilpointer.Uint(1),
nil,
false,
eventRecorder,
)
stubNode := &v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "node"}}
// 0 evictions expected
if evictions := podEvictor.NodeEvicted(stubNode); evictions != 0 {
t.Errorf("Expected 0 node evictions, got %q instead", evictions)
}
// 0 evictions expected
if evictions := podEvictor.TotalEvicted(); evictions != 0 {
t.Errorf("Expected 0 total evictions, got %q instead", evictions)
}
if podEvictor.NodeLimitExceeded(stubNode) {
t.Errorf("Expected NodeLimitExceeded to return false, got true instead")
}
if !podEvictor.EvictPod(context.TODO(), pod1, EvictOptions{}) {
t.Errorf("Expected a pod eviction, got no eviction instead")
}
// 1 node eviction expected
if evictions := podEvictor.NodeEvicted(stubNode); evictions != 1 {
t.Errorf("Expected 1 node eviction, got %q instead", evictions)
}
// 1 total eviction expected
if evictions := podEvictor.TotalEvicted(); evictions != 1 {
t.Errorf("Expected 1 total evictions, got %q instead", evictions)
}
if !podEvictor.NodeLimitExceeded(stubNode) {
t.Errorf("Expected NodeLimitExceeded to return true, got false instead")
}
}

View File

@@ -490,7 +490,6 @@ func TestHighNodeUtilization(t *testing.T) {
false,
nil,
nil,
testCase.nodes,
false,
eventRecorder,
)
@@ -642,7 +641,6 @@ func TestHighNodeUtilizationWithTaints(t *testing.T) {
false,
&item.evictionsExpected,
nil,
item.nodes,
false,
eventRecorder,
)

View File

@@ -892,7 +892,6 @@ func TestLowNodeUtilization(t *testing.T) {
false,
nil,
nil,
test.nodes,
false,
eventRecorder,
)
@@ -1064,7 +1063,6 @@ func TestLowNodeUtilizationWithTaints(t *testing.T) {
false,
&item.evictionsExpected,
nil,
item.nodes,
false,
eventRecorder,
)

View File

@@ -562,7 +562,6 @@ func TestPodLifeTime(t *testing.T) {
false,
tc.maxPodsToEvictPerNode,
tc.maxPodsToEvictPerNamespace,
tc.nodes,
false,
eventRecorder,
)

View File

@@ -319,7 +319,6 @@ func TestFindDuplicatePods(t *testing.T) {
false,
nil,
nil,
testCase.nodes,
false,
eventRecorder,
)
@@ -768,7 +767,6 @@ func TestRemoveDuplicatesUniformly(t *testing.T) {
false,
nil,
nil,
testCase.nodes,
false,
eventRecorder,
)

View File

@@ -381,7 +381,6 @@ func TestRemoveFailedPods(t *testing.T) {
false,
nil,
nil,
tc.nodes,
false,
eventRecorder,
)

View File

@@ -350,7 +350,6 @@ func TestRemovePodsHavingTooManyRestarts(t *testing.T) {
false,
tc.maxPodsToEvictPerNode,
tc.maxNoOfPodsToEvictPerNamespace,
tc.nodes,
false,
eventRecorder,
)

View File

@@ -239,7 +239,6 @@ func TestPodAntiAffinity(t *testing.T) {
false,
test.maxPodsToEvictPerNode,
test.maxNoOfPodsToEvictPerNamespace,
test.nodes,
false,
eventRecorder,
)

View File

@@ -365,7 +365,6 @@ func TestRemovePodsViolatingNodeAffinity(t *testing.T) {
false,
tc.maxPodsToEvictPerNode,
tc.maxNoOfPodsToEvictPerNamespace,
tc.nodes,
false,
eventRecorder,
)

View File

@@ -406,7 +406,6 @@ func TestDeletePodsViolatingNodeTaints(t *testing.T) {
false,
tc.maxPodsToEvictPerNode,
tc.maxNoOfPodsToEvictPerNamespace,
tc.nodes,
false,
eventRecorder,
)

View File

@@ -1462,7 +1462,6 @@ func TestTopologySpreadConstraint(t *testing.T) {
false,
nil,
nil,
tc.nodes,
false,
eventRecorder,
)

View File

@@ -244,7 +244,7 @@ func TestProfileDescheduleBalanceExtensionPointsEviction(t *testing.T) {
eventBroadcaster, eventRecorder := utils.GetRecorderAndBroadcaster(ctx, eventClient)
defer eventBroadcaster.Shutdown()
podEvictor := evictions.NewPodEvictor(client, "policy/v1", false, nil, nil, nodes, true, eventRecorder)
podEvictor := evictions.NewPodEvictor(client, "policy/v1", false, nil, nil, true, eventRecorder)
prfl, err := NewProfile(
test.config,
@@ -306,7 +306,6 @@ func TestProfileExtensionPoints(t *testing.T) {
n1 := testutils.BuildTestNode("n1", 2000, 3000, 10, nil)
n2 := testutils.BuildTestNode("n2", 2000, 3000, 10, nil)
nodes := []*v1.Node{n1, n2}
p1 := testutils.BuildTestPod(fmt.Sprintf("pod_1_%s", n1.Name), 200, 0, n1.Name, nil)
p1.ObjectMeta.OwnerReferences = []metav1.OwnerReference{{}}
@@ -393,7 +392,7 @@ func TestProfileExtensionPoints(t *testing.T) {
eventBroadcaster, eventRecorder := utils.GetRecorderAndBroadcaster(ctx, eventClient)
defer eventBroadcaster.Shutdown()
podEvictor := evictions.NewPodEvictor(client, "policy/v1", false, nil, nil, nodes, true, eventRecorder)
podEvictor := evictions.NewPodEvictor(client, "policy/v1", false, nil, nil, true, eventRecorder)
prfl, err := NewProfile(
api.DeschedulerProfile{
@@ -605,7 +604,7 @@ func TestProfileExtensionPointOrdering(t *testing.T) {
eventBroadcaster, eventRecorder := utils.GetRecorderAndBroadcaster(ctx, eventClient)
defer eventBroadcaster.Shutdown()
podEvictor := evictions.NewPodEvictor(client, "policy/v1", false, nil, nil, nodes, true, eventRecorder)
podEvictor := evictions.NewPodEvictor(client, "policy/v1", false, nil, nil, true, eventRecorder)
prfl, err := NewProfile(
api.DeschedulerProfile{