Skip to content

Commit

Permalink
koord-descheduler: fix prod pod excessive eviction when node recover …
Browse files Browse the repository at this point in the history
…to normal (#2225)

Signed-off-by: JBbin <namechenjiabin@icloud.com>
  • Loading branch information
JBinin authored Oct 16, 2024
1 parent 11701ae commit 34b17b8
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 2 deletions.
58 changes: 58 additions & 0 deletions pkg/descheduler/framework/plugins/loadaware/low_node_load_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1300,6 +1300,64 @@ func TestLowNodeLoad(t *testing.T) {
expectedPodsEvicted: 3,
evictedPods: []string{},
},
{
name: "stop prod pod eviction when the node recovers to normal.",
thresholds: ResourceThresholds{
corev1.ResourceCPU: 0,
corev1.ResourcePods: 0,
},
targetThresholds: ResourceThresholds{
corev1.ResourceCPU: 100,
corev1.ResourcePods: 100,
},
prodLowThresholds: ResourceThresholds{
corev1.ResourceCPU: 60,
corev1.ResourcePods: 60,
},
prodHighThresholds: ResourceThresholds{
corev1.ResourceCPU: 70,
corev1.ResourcePods: 70,
},
nodes: []*corev1.Node{
test.BuildTestNode(n1NodeName, 4000, 3000, 20, nil),
test.BuildTestNode(n2NodeName, 4000, 3000, 20, nil),
},
pods: []*corev1.Pod{
test.BuildTestPod("p1", 400, 0, n1NodeName, test.SetRSOwnerRef),
test.BuildTestPod("p2", 400, 0, n1NodeName, test.SetRSOwnerRef),
test.BuildTestPod("p3", 400, 0, n1NodeName, test.SetRSOwnerRef),
test.BuildTestPod("p4", 400, 0, n1NodeName, test.SetRSOwnerRef),
test.BuildTestPod("p5", 400, 0, n1NodeName, test.SetRSOwnerRef),
// These won't be evicted.
test.BuildTestPod("p6", 400, 0, n1NodeName, test.SetDSOwnerRef),
test.BuildTestPod("p7", 400, 0, n1NodeName, func(pod *corev1.Pod) {
// A pod with local storage.
test.SetNormalOwnerRef(pod)
pod.Spec.Volumes = []corev1.Volume{
{
Name: "sample",
VolumeSource: corev1.VolumeSource{
HostPath: &corev1.HostPathVolumeSource{Path: "somePath"},
EmptyDir: &corev1.EmptyDirVolumeSource{
SizeLimit: resource.NewQuantity(int64(10), resource.BinarySI),
},
},
},
}
// A Mirror Pod.
pod.Annotations = test.GetMirrorPodAnnotation()
}),
test.BuildTestPod("p8", 400, 0, n1NodeName, func(pod *corev1.Pod) {
// A Critical Pod.
pod.Namespace = "kube-system"
priority := utils.SystemCriticalPriority
pod.Spec.Priority = &priority
}),
test.BuildTestPod("p9", 400, 0, n2NodeName, test.SetRSOwnerRef),
},
expectedPodsEvicted: 1,
evictedPods: []string{},
},
}

for _, tt := range testCases {
Expand Down
15 changes: 13 additions & 2 deletions pkg/descheduler/framework/plugins/loadaware/utilization_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -540,20 +540,31 @@ func evictPods(
if nodeUsage := nodeInfo.usage[resourceName]; nodeUsage != nil {
nodeUsage.Sub(quantity)
}
if prodUsage := nodeInfo.prodUsage[resourceName]; prod && prodUsage != nil {
prodUsage.Sub(quantity)
}
}

keysAndValues := []interface{}{
"node", nodeInfo.node.Name,
"nodePool", nodePoolName,
}
for k, v := range nodeInfo.usage {
usage := nodeInfo.usage
if prod {
usage = nodeInfo.prodUsage
}
for k, v := range usage {
keysAndValues = append(keysAndValues, k.String(), v.String())
}
for resourceName, quantity := range totalAvailableUsages {
keysAndValues = append(keysAndValues, fmt.Sprintf("%s/totalAvailable", resourceName), quantity.String())
}

klog.V(4).InfoS("Updated node usage", keysAndValues...)
if prod {
klog.V(4).InfoS("Updated node prodUsage", keysAndValues...)
} else {
klog.V(4).InfoS("Updated node usage", keysAndValues...)
}
}
}

Expand Down

0 comments on commit 34b17b8

Please sign in to comment.